注 :這個博文是軟RAID的實作過程,在實際生産中主要是硬來實作磁盤備援。本博文僅供學習,和硬RAID不能實作中使用。
(1)常用RAID級别的介紹(隻介紹級别,原理及raid曆史自行學習)
1,RAID0:條帶化,沒有備援功能,磁盤的磁盤的讀寫速率為n倍 使用率為100%。實作條件最少2塊盤
2, RAID1:鏡像技術,有備援功能,磁盤的寫速率變慢,讀的速率變快,使用率為1/2。實作條件最少2塊盤
3, RAID4:校驗碼技術,有備援功能,磁盤的使用率為n-1倍 ,使用率為n-1/n。實作條件最少3塊盤.
有個巨大的缺點,校驗盤成為速度評定标準
4,RAID5和RAID4不同一處 :RAID5校驗碼不放在固定一個盤。實作條件最少3塊盤.
5,RAID10 先做鏡像,再做條帶。有錢的企業,會選擇這種方式。使用率為1/2。實作條件最少4塊盤.
6,RAID5先做RAID5.再做RAID0
介紹一個特殊的jbod:實作多個小盤合并成一個大空間磁盤,多用于hadoop.
準備過程,vmware虛拟機,redhat6 ,兩塊磁盤(準備好3塊磁盤,為2G,2G ,2G)在虛拟機中添加好,開機。如果開機添加的,需要重新開機。#:reboot
(2)RAID的實作過程
1,RAID0實作過程
1):用指令fdisk -l 可以檢視到我們添加的/dev/sdb ,/dev/sdc ,/dev/sdd 三塊磁盤
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002980c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2611 20458496 8e Linux LVM
Disk /dev/sdb: 2147 MB, 2147483648 bytes
Disk /dev/sdc: 2147 MB, 2147483648 bytes
Disk /dev/sdd: 8589 MB, 8589934592 bytes
2)用fdisk /dev/sdb 對sdb進行分區
[root@localhost ~]# fdisk /dev/sdb------>對/dev/sdb分區指令
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x21b0103d.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): n ----->指令n建立一個分區
Command action
e extended ----->選項e為擴充分區
p primary partition (1-4) ----->選項p為主分區
p ----->這裡我選擇主分區(實際操作中根據實際情況而定)
Partition number (1-4): 1 ----->分區編号選擇範圍1-4
First cylinder (1-261, default 1): ----->起始柱面 預設為1
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261): ----->結束柱面 可以用+#G定義分區大小
Using default value 261
Command (m for help): t------>指令t改變分區類型
Selected partition 1----->我們這裡隻有一個分區,隻能選擇1,如果你們有很多分區可用根據需要選擇
Hex code (type L to list codes): fd----->RAID支援的fd類型(注意下面一條資訊)
Changed system type of partition 1 to fd (Linux raid autodetect)
Command (m for help): w--------->指令w 儲存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
這樣,我們就把/dev/sdb磁盤分好區了,以同樣的方法,我們對/dev/sdc和/dev/sdd分區,我這裡就不示範了
#現在我們再來fdisk -l 看一下
/dev/sdb1 1 261 2096451 fd Linux raid autodetect
Device Boot Start End Blocks Id System
/dev/sdc1 1 261 2096451 fd Linux raid autodetect
可以看到這兩個分區類型沒有問題。
2)指令partprobe /dev/sdb 和partprobe /dev/sdc重新讀取分區表(或者指令partx /dev/sdb 和 part /dev/sdc)
3)檢視系統有沒有讀取分區表 cat /proc/partitions
[root@localhost ~]# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 512000 sda1
8 2 20458496 sda2
8 16 2097152 sdb
8 17 2096451 sdb1
8 32 2097152 sdc
8 33 2096451 sdc1
8 48 8388608 sdd
253 0 18358272 dm-0
253 1 2097152 dm-1
确定,都讀取了
4)建立RAID0
mdadm raid 管理器 mdadm 可以将任何兩個塊裝置做成raid
-C 建立模式
專用選項
-l : 級别
-n#: 裝置個數
-a{yes|no} : 是否 自動為其建立裝置檔案
-c --chunk 條帶大小redhat5預設為64k redhat7預設512k
-x #指定空白盤 (-n#+ -x#)要等于後面的裝置數
mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sdb1 /dev/sdc1 注:/dev/md0 為RAID裝置名。
-l 0 為條帶。
-a yes ;自動為其建立裝置檔案
-n 2 : 為兩個裝置組成RAID
[root@localhost ~]# mdadm -C /dev/md0 -l 0 -a yes -n 2 /dev/sdb1 /dev/sdc1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started。
現在我們已經成功建立RAID0了
現在我們就可以格式化RAID0 :mke2fs j /dev/md0
格式化完成後,就可以挂載使用:mount /dev/md0 /mnt
---------------------------------------------------------------------------------------------------------
現在我們删了RAID0建立RAID1:
1先解除安裝/dev/md0 :umount /dev/md0
2停用md0 : mdadm -S /dev/md0
3删除/dev/md0 :rm -f /dev/md0
4--建立RAID1
mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb1 /dev/sdc1
unused devices: <none>
[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdb1 /dev/sdc1
mdadm: /dev/sdb1 appears to be part of a raid array:
level=raid0 devices=2 ctime=Sun Mar 26 23:31:54 2017
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: /dev/sdc1 appears to be part of a raid array:
Continue creating array? y
mdadm: array /dev/md1 started.
5)檢視RAID1
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sdc1[1] sdb1[0]
2095360 blocks super 1.2 [2/2] [UU]
6)RIAD管理模式
mdadm
-a /--add 添加磁盤
-r /--remove 删除磁盤
-f /--fail 模拟一塊磁盤損壞 如:mdadm -f /dev/md# /dev/sd#
例如 ## 模拟一塊磁盤損壞:如,我們讓RAID1中/dev/sdb1損壞
(mdadm -f /dev/md1 /dev/sdb1)
[root@localhost ~]# mdadm -f /dev/md1 /dev/sdb1
mdadm: set /dev/sdb1 faulty in /dev/md1
##RAID的檢視mdadm -D /dev/md1
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Mon Mar 27 00:12:42 2017
Raid Level : raid1
Array Size : 2095360 (2046.59 MiB 2145.65 MB)
Used Dev Size : 2095360 (2046.59 MiB 2145.65 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Mon Mar 27 00:33:48 2017
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
Spare Devices : 0
Name : localhost:1 (local to host localhost)
UUID : 5e187c59:ab9f8970:a941e8f4:3f5f0feb
Events : 19
Number Major Minor RaidDevice State
0 0 0 0 removed
1 8 33 1 active sync /dev/sdc1
0 8 17 - faulty /dev/sdb1
##現在 0 8 17 - faulty /dev/sdb1可以看出/dev/sdb1損壞了,我們移除,換塊新的
##移除/dev/sdb1
(mdadm -r /dev/md1 /dev/sdb1)
[root@localhost ~]# mdadm -r /dev/md1 /dev/sdb1
mdadm: hot removed /dev/sdb1 from /dev/md1
##添加新磁盤/dev/sdd1
(mdadm -a /dev /md1 /dev/sdd1)
[root@localhost ~]# mdadm -a /dev/md1 /dev/sdd1
mdadm: added /dev/sdd1
##在添加空閑磁盤把/dev/sdb1添加上
[root@localhost ~]# mdadm -a /dev/md1 /dev/sdb1
mdadm: added /dev/sdb1
##檢視一下md1詳細情況
[root@localhost ~]#mdadm -d /dev/md1
2 8 49 0 active sync /dev/sdd1
3 8 17 - spare /dev/sdb1
##這種屬于後面添加空閑磁盤。建立md的時候,可以一起建立空閑磁盤如
mdadm -C /dev/md1 -a yes -l 1 -n 2 /dev/sdc1 /dev/sdd1 -x 1 /dev/sdb1
這樣就可以把/dev/sdb1添加為空閑磁盤
-----------------------------------------------------------
7)RAID的停用和重新裝配
1,RAID的停用
mdadm -S /dev/md#
[root@localhost ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
2,RAID重新裝配 (本來有幾塊就要裝配幾塊)
mdadm -A /dev/md1 /dev/sdb1 /dev/sdd1 /dev/sdc1
[root@localhost ~]# mdadm -A /dev/md1 /dev/sdb1 /dev/sdd1 /dev/sdc1
mdadm: /dev/md1 has been started with 2 drives and 1 spare.
8)RAID 的掃描系統上raid
mdadm -D -scan
[root@localhost ~]# mdadm -D -scan
ARRAY /dev/md1 metadata=1.2 spares=1 name=localhost:1 UUID=5e187c59:ab9f8970:a941e8f4:3f5f0feb
###mdadm -D -scan > /etc/mdadm.conf
把掃描的儲存到mdadm配置檔案中,重新裝置就不要添加那些磁盤裝置
##如:mdadm -S /dev/md1 停止md1
重新裝配:mdadm -A /dev/md1