由加利福尼亞大學伯克利分校(University of California-Berkeley)在1988年,發表的文章:“A Case for Redundant Arrays of Inexpensive Disks”。文章中,談到了RAID這個詞匯,而且定義了RAID的5個層級。獨立磁盤冗余陣列(RAID,redundant array of independent disks)是把相同的數據存儲在多個硬盤的不同的地方(因此,冗余地)的方法。通過把數據放在多個硬盤上,輸入輸出操作能以平衡的方式交疊,改良性能。因為多個硬盤增加了平均故障間隔時間(MTBF),儲存冗余數據也增加了容錯性。
- RAID的幾個常用級別
- raid 0 要2塊或2塊以上的硬盤,把數據分散在N塊硬盤內性能提升極高,無容錯能力。
- raid 1 需要2塊硬盤,會把一塊硬盤寫數據,把另一塊寫入數據鏡像,容錯性最高,但寫入性能會下降。
- raid 4 需要3塊或以上的硬盤,多塊數據盤進行異或運算,把一塊硬盤做專用校驗盤,異或相同為假不同為真,有容錯性,一塊壞掉可以通過校驗盤來計算恢復。但已基本不用本文不做詳細介紹。
- raid 5 需要3塊或3塊以上的硬盤,會把1塊硬盤的容量來放校驗位,有容錯性允許一塊磁盤損壞,性能有提升,比較常用。磁盤利用率比raid1要高。擁有和raid0相近的讀取速度,但寫入數據和單個磁盤相比稍慢。把多塊數據進行異或運算生成校驗信息,然后把數據和與其相對的校驗信息保存在raid5各個磁盤中。
- raid 6 需要4塊或4塊以上的硬盤,會把2塊硬盤的容量來放校驗位,會計算兩個校驗位儲存在兩塊盤上,容錯性允許兩塊磁盤損壞,不常用,本文不做詳細介紹。
- raid 10 需要4塊或2的2倍以上的硬盤,但添加硬盤要一次添加2塊。會把硬盤先做raid 1在做raid 0,性能提升較高,但磁盤利用率較低,容錯性極高。raid01與其相似但是raid01是先做raid 0再做raid 1.
- raid 50 需要6塊或3的2倍以上的硬盤,先把硬盤做成raid5,再做成raid 0,性能提升較高,磁盤利用率較低,容錯性極高。
- raid 7 可以理解為一個獨立存儲計算機,自身帶有操作系統和管理工具,可以獨立運行,理論上性能最高的raid模式,本文里不做詳細介紹。
級別 | 最少硬盤 | 容量 | 讀取性能 | 寫入性能 | 容錯性 |
---|---|---|---|---|---|
raid 0 | 2 | n | n | n | 無容錯性 |
raid 1 | 2 | n/2 | n | n/2 | 2塊可以壞掉一塊 |
raid 5 | 3 | n-1 | n-1 | n-1 | 3塊可以壞掉一塊 |
raid 10 | 4 | n/2 | n | n/2 | 只要不是同一個raid1的硬盤,可以壞掉一半 |
- 實現
2.1 軟raid命令mdadm
-C: 創建模式,參數:
- -n #: 使用 #個塊設備來創建此RAID
- -l #:指明要創建的RAID的級別,1表示raid1
- -a {yes|no}:自動創建目標RAID設備的設備文件
- -c CHUNK_SIZE: 指明塊大小
- -x #: 指明空閑盤的個數
-D:顯示raid的詳細信息
- -s:掃描配置文件或/proc/mdstat缺少信息。
-G:更改大小
-I:添加或刪除單個硬盤
-F:監控
管理模式
- -f: 標記指定磁盤為損壞
- -a: 添加磁盤
- -r: 移除磁盤
注:要查看raid的狀態:cat /proc/mdstat,創建之后要寫入配置文件來保存否則在停用設備之后無法啟動: mdadm –D –s >> /etc/mdadm.conf
2.2 raid 0
[root@centos6.9 ~]#lsblk #查看硬盤情況
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 30G 0 part /test
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1000M 0 part /boot
├─sda2 8:2 0 97.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdc 8:32 0 10G 0 disk #這里有4塊10GB的硬盤,就是我們做實驗要用的
sdd 8:48 0 10G 0 disk
sde 8:64 0 10G 0 disk
sdf 8:80 0 10G 0 disk
[root@centos6.9 ~]#mdadm -C /dev/md0 -n 2 -a yes -l 0 /dev/sdc /dev/sdd
#-C創建md0,-n指定由2塊硬盤創建,-a yes自動創建設備文件,-l 指定raid 0,后面指定成員硬盤
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started. #創建md0成功
[root@centos6.9 ~]#mdadm -D /dev/md0 #查看創建的md0的詳細信息
/dev/md0:
Version : 1.2
Creation Time : Tue Jun 20 19:53:17 2017
Raid Level : raid0 #raid等級
Array Size : 20955136 (19.98 GiB 21.46 GB) #總容量
Raid Devices : 2 #raid硬盤數
Total Devices : 2 #總硬盤數
Persistence : Superblock is persistent
Update Time : Tue Jun 20 19:53:17 2017
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K #分散在硬盤中塊的大小
Name : centos6.9:0 (local to host centos6.9)
UUID : cd351fb1:b45416d3:5ac664ae:6d130fd2 #raid的UUID號
Events : 0
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc #成員1
1 8 48 1 active sync /dev/sdd #成員2
root@centos6.9 ~]#fdisk /dev/md0 #用fdisk管理/md0分區
Command (m for help): n #創建一個分區
Command action
e extended #擴展分區
p primary partition (1-4) #主分區
p #這里選了p,創建一個主分區
Partition number (1-4): 1 #選擇分區編號1
First cylinder (1-5238784, default 257 ): #默認從的257個扇區開始,這里選擇默認
Last cylinder, +cylinders or +size{K,M,G} (257-5238784, default 5238784): +10G #創建一個10G的分區
Command (m for help): p #查看分區
Disk /dev/md0: 21.5 GB, 21458059264 bytes
2 heads, 4 sectors/track, 5238784 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x861106f0
Device Boot Start End Blocks Id System
/dev/md0p1 257 2621696 10485760 83 Linux
Command (m for help): w #保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos6.9 ~]#fdisk -l #查看硬盤分區,因為硬盤比較多所以只顯示了md0
Disk /dev/md0: 21.5 GB, 21458059264 bytes #硬盤大小
2 heads, 4 sectors/track, 5238784 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0xdbb02828
Device Boot Start End Blocks Id System
/dev/md0p1 257 2621440 10485758 83 Linux #硬盤里的分區
[root@centos6.9 ~]#mkfs.ext4 /dev/md0p1 #格式化md0p1分區,文件系統ext4
[root@centos6.9 ~]#mkdir /raid #創建raid文件夾
[root@centos6.9 ~]#mount /dev/md0 /raid/ #把raid掛載到raid目錄上
[root@centos6.9 ~]#df #查看掛載信息
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 100660656 3598692 91941964 4% /
tmpfs 502056 8 502048 1% /dev/shm
/dev/sda3 50264772 56396 47648376 1% /app
/dev/sda1 991512 34932 905380 4% /boot
/dev/sdb1 30838496 45008 29220328 1% /test
/dev/md0 20494972 44992 19402224 1% /raid 掛載成功
[root@centos6.9 ~]#vim /etc/fstab #修改文件保存掛載,如果不寫入文件的話,開機之后不會自動掛載
UUID=80f63701-5c1b-4dc1-9864-7c1247ed8561 / ext4 defaults 1 1
UUID=daf6631d-90ab-45dc-b5b5-20eb52476056 /app ext4 defaults 1 2
UUID=87c9aa50-7b7a-459e-babc-87bfaf5b49f2 /boot ext4 defaults 1 2
UUID=2f7f0957-6978-4028-ac0d-966fb8d486e5 swap swap defaults 0 0
UUID=0ec85016-ffa5-4d52-b353-b55b0c239228 /raid ext4 defaults 0 0 #在里面加一行,參考系統的格式寫
#在添加的時候要寫文件的UUID號,以防止設備名變更無法掛載。
[root@centos6.9 ~]#blkid /dev/md0p1 #查看分區的UUID
/dev/md0p1: UUID="0ec85016-ffa5-4d52-b353-b55b0c239228" TYPE="ext4" #分區的UUID號和文件系統類型
[root@centos6.9 ~]#mdadm -D -s /dev/md0 >> /etc/mdadm.conf #把md0的配置追加進/etc/mdadm.conf文件
2.3 raid 1
[root@centos6.9 ~]#mdadm -C /dev/md1 -n 2 -a yes -l 1 /dev/sdc /dev/sdd #創建raid1
/dev/md1:
Version : 1.2
Creation Time : Tue Jun 20 21:27:53 2017
Raid Level : raid1 #raid 等級
Array Size : 10477568 (9.99 GiB 10.73 GB) #raid1容量
Used Dev Size : 10477568 (9.99 GiB 10.73 GB) #鏡像空間大小
Raid Devices : 2 #raid硬盤數
Total Devices : 2 #總硬盤數
Persistence : Superblock is persistent
Update Time : Tue Jun 20 21:28:25 2017
State : clean, resyncing
Active Devices : 2 #主動設備
Working Devices : 2 #工作設備
Failed Devices : 0 #問題設備
Spare Devices : 0 #備用設備
Resync Status : 66% complete
Name : centos6.9:1 (local to host centos6.9)
UUID : 2244ef88:05bcf8d4:3de8c6f6:a65ee55b
Events : 10
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc #成員
1 8 48 1 active sync /dev/sdd #成員
2.4 raid 5
[root@centos6.9 ~]#mdadm -C /dev/md2 -n 3 -x 1 -a yes -l 5 /dev/sdc /dev/sdd /dev/sde /dev/sdf
#指定三個成員硬盤,同是用-x指定了一個備用盤
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md2 started. #創建成功
[root@centos6.9 ~]#mdadm -D /dev/md2
/dev/md2:
Version : 1.2
Creation Time : Tue Jun 20 21:49:02 2017 #創建時間
Raid Level : raid5 #等級
Array Size : 20955136 (19.98 GiB 21.46 GB) #可用容量
Used Dev Size : 10477568 (9.99 GiB 10.73 GB) #校驗數據容量
Raid Devices : 3 #
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Tue Jun 20 21:49:55 2017
State : clean
Active Devices : 3 #raid硬盤數
Working Devices : 4 #總硬盤數
Failed Devices : 0 #損壞硬盤數
Spare Devices : 1 #備用硬盤數
Layout : left-symmetric
Chunk Size : 512K #分散在硬盤中的塊大小,不指定默認為512KB
Name : centos6.9:2 (local to host centos6.9)
UUID : e33c123d:e4598fda:c6b15be6:7cc8cf29 #uuid
Events : 18
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc #成員
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
3 8 80 - spare /dev/sdf #空閑備份硬盤
#空閑盤,不用來儲存數據,在其中一塊raid硬盤出現問題后自動頂替并通過運算恢復數據
2.5 有容錯性的raid實驗其容錯性,這里以raid5來實驗。
[root@centos6.9 raid]#echo 11111 > 11 #創建一個文件,在里面寫入11111
[root@centos6.9 raid]#cat 11 #查看文件
11111
[root@centos6.9 ~]#mdadm /dev/md2 -f /dev/sdc #把sdc標記為損壞
[root@centos6.9 ~]#mdadm -D /dev/md2 #查看md2狀態,因為信息過多,所以這里只顯示硬盤的狀態
Active Devices : 3
Working Devices : 4
Failed Devices : 1 #這里顯示有一個損壞的硬盤
Spare Devices : 0 #沒有空閑的硬盤了
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf #sdf已經替換了sdc
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
0 8 32 - faulty /dev/sdc #sdc被標記為壞掉的
[root@centos6.9 raid]#cat 11 #看看數據有沒有丟失
11111 #數據沒有問題
2.6 移除和添加硬盤,我這里添加了一塊硬盤sdg
[root@centos6.9 raid]#mdadm /dev/md2 -r /dev/sdc #把上面實驗標記為損壞的sdc從md2中移除
mdadm: hot removed /dev/sdc from /dev/md2
[root@centos6.9 raid]#mdadm -D /dev/md2 #查看md2的狀態
/dev/md2:
Version : 1.2
Creation Time : Tue Jun 20 21:49:02 2017
Raid Level : raid5
Array Size : 20955136 (19.98 GiB 21.46 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 3
Total Devices : 3 #這里的總硬盤數只有三個
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0 #沒有損壞硬盤
Spare Devices : 0
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde #沒有sdc的信息了
[root@centos6.9 raid]#mdadm /dev/md2 -a /dev/sdg #把sdg添加到md2中
[root@centos6.9 raid]#mdadm -D /dev/md2 #查看md2的信息,有省略
/dev/md2:
Raid Devices : 3
Total Devices : 4 #總硬盤數
State : clean
Active Devices : 3
Working Devices : 4 #總硬盤數
Failed Devices : 0 #損壞硬盤數
Spare Devices : 1 #有一個備用盤
Name : centos6.9:2 (local to host centos6.9)
UUID : e33c123d:e4598fda:c6b15be6:7cc8cf29
Events : 39
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
5 8 96 - spare /dev/sdg #sdg為備份盤
如果想要擴展只想raid硬盤的盤數用:
[root@centos6.9 raid]#mdadm -G /dev/md2 -n 4 -a /dev/sdg
Update Time : Tue Jun 20 22:48:47 2017
State : clean, reshaping
Active Devices : 4 #raid盤數
Working Devices : 4 #總盤數
Failed Devices : 0
Spare Devices : 0 #沒有備份盤
Number Major Minor RaidDevice State
3 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
4 8 64 2 active sync /dev/sde
5 8 96 3 active sync /dev/sdg #不會把sdg添加為備用盤,直接參與數據儲存
2.7 停用、啟動raid設備
[root@centos6.9 ~]#mdadm -D -s >> /etc/mdadm.conf #在創建好raid設備后一定要,把配置寫入文件,否則無法啟動
[root@centos6.9 ~]#cat /etc/mdadm.conf #查看文件
ARRAY /dev/md2 metadata=1.2 name=centos6.9:2 UUID=cbb20529:52eced42:77605adf:0a416662
[root@centos6.9 ~]#mdadm -S /dev/md2 #停用raid設備md2
mdadm: stopped /dev/md2
[root@centos6.9 ~]#mdadm -D /dev/md2 #再來查看md2的信息
mdadm: cannot open /dev/md2: No such file or directory #提示沒有這個目錄或文件,無法打開
[root@centos6.9 ~]#mdadm -A -s /dev/md2 #啟用設備
mdadm: /dev/md2 has been started with 4 drives. #啟動成功
[root@centos6.9 ~]#mdadm -D /dev/md2 #查看md2的狀態
/dev/md2:
Version : 1.2 #可以查看了
Creation Time : Tue Jun 20 23:02:38 2017
Raid Level : raid5
Array Size : 31432704 (29.98 GiB 32.19 GB)
Used Dev Size : 10477568 (9.99 GiB 10.73 GB)
Raid Devices : 4
Total Devices : 4
#省略......
Number Major Minor RaidDevice State
0 8 80 0 active sync /dev/sdf
1 8 48 1 active sync /dev/sdd
2 8 64 2 active sync /dev/sde
4 8 96 3 active sync /dev/sdg
注:如果沒有寫配置文件可以用下面的命令來強制啟動,但會丟失一些配置信息
mdadm –R /dev/md2
2.8 刪除raid設備
- 1.先用umont取消設備掛載
- 2.停止raid設備
- 3.刪除/etc/fstab里掛載信息和/etc/mdadm.conf文件里的配置行
- 4.刪除每個磁盤的raid信息:
mdadm --zero-superblock /dev/sdd
注:如果不用第4步的命令,直接格式化硬盤,raid信息會清除不干凈有殘留,重啟之后設備會重新創建。