引言
這篇文章介紹幾種常用的磁盤陣列技術(Raid0、Raid1、Raid4、Raid5、Raid10、Raid01),演示如何在CentOS7環(huán)境下使用mdadm命令去創(chuàng)建和維護磁盤陣列;RAID又稱“廉價磁盤冗余陣列”,可以使用硬件和軟件兩種方式來實現(xiàn),硬件RAID可以參考購買硬件時附帶的參考手冊,設置方法與軟件RAID有差異;現(xiàn)如今軟件RAID大多用作研究和熟悉RAID的工作方式。
文章目錄
- 0×1.Raid(磁盤陣列)級別介紹
a.Raid0b.Raid1c.Raid4d.Raid5e.Raid10f.Raid01- 0×2.Linux創(chuàng)建磁盤陣列實例
a.實驗環(huán)境介紹b.創(chuàng)建磁盤陣列Raid10c.配置開機自啟動磁盤陣列d.將磁盤陣列掛載到目錄使用- 0×3.創(chuàng)建冗余磁盤陣列
- 0×4.刪除磁盤陣列
0×1.Raid(磁盤陣列)級別介紹
Raid有"廉價磁盤冗余陣列"的意思,就是利用多塊廉價的硬盤組成磁盤組,讓數(shù)據(jù)分部儲存在這些硬盤里面,從而達到讀取和寫入加速的目的;也可以用作數(shù)據(jù)的冗余,當某塊硬盤損毀后,其他硬盤可以通過冗余數(shù)據(jù)計算出損壞磁盤的數(shù)據(jù),這樣就提高了數(shù)據(jù)儲存的安全性。
a.Raid0
Raid0數(shù)據(jù)儲存方法如下(假設有兩塊硬盤D1、D2):

特點:數(shù)據(jù)被并行寫入每個磁盤,每個磁盤都保存了完整數(shù)據(jù)的一部分,讀取也采用并行方式,磁盤數(shù)量越多,讀取和寫入速度越快。因為沒有冗余,一個硬盤壞掉全部數(shù)據(jù)丟失。至少兩塊硬盤才能組成Raid0陣列。
容量:所有硬盤之和。
b.Raid1
Raid1數(shù)據(jù)儲存方法如下(假設有兩塊硬盤D1、D2):

特點:有數(shù)據(jù)冗余,可靠性強,D1、D2被寫入相同的數(shù)據(jù),其中D2可以作為D1的完整備份。讀取時,從兩塊硬盤上并行讀取,寫入慢,讀取快。任何一塊硬盤壞掉不會丟失數(shù)據(jù),至少兩塊硬盤并且兩塊硬盤大小相等才能組成Raid1陣列。
容量:所有硬盤容量之和的一半(一半寫數(shù)據(jù),一半用來做備份)。
c.Raid4
Raid4數(shù)據(jù)儲存方法如下(假設有三塊硬盤D1、D2、D3):

特點:有數(shù)據(jù)冗余校驗,可靠性強。其中任何一塊硬盤壞掉都不會引起數(shù)據(jù)丟失,D1丟失時,D3根據(jù)校驗和以及D2的數(shù)據(jù)進行逆運算,計算出D1的數(shù)據(jù)。但當寫入大量數(shù)據(jù)時校驗盤D3會是一個數(shù)據(jù)瓶頸,導致寫入慢。只有當兩塊磁盤同時丟失時,數(shù)據(jù)才無法恢復。至少三塊硬盤并且磁盤大小應該相等才能組成Raid4陣列(不常用)。
容量:所有硬盤容量之和減去其中一塊硬盤的容量。
d.Raid5
Raid5數(shù)據(jù)儲存方法如下(假設有三塊硬盤D1、D2、D3):

特點:采用奇偶校驗,可靠性強,磁盤校驗和被散列到不同的磁盤里面,增加了讀寫速率。只有當兩塊磁盤同時丟失時,數(shù)據(jù)才無法恢復,至少三塊硬盤并且硬盤大小應該相等才能組成Raid5陣列。
容量:所有硬盤容量之和減去其中一塊硬盤的容量,被減去的容量被分配到三塊硬盤的不同區(qū)域用來存放數(shù)據(jù)校驗信息。
e.Raid10
Raid10(Raid1+Raid0)是現(xiàn)在比較常用的一種磁盤陣列級別,它的容錯好,讀寫數(shù)據(jù)效率較高,但經(jīng)費相對也較高。
Raid10數(shù)據(jù)儲存方法如下(假設有四塊硬盤D1、D2、D3、D4):

特點:備份和并發(fā)式存取數(shù)據(jù),可靠性強。D1、D2組成一個陣列Raid1,其中D1是數(shù)據(jù)盤,D2是備份盤;D3、D4也組成一個Raid1,其中D3是數(shù)據(jù)盤,D4是備份盤;在這個基礎上將D1、D2作為一個整體,將D3、D4也作為一個整體,這兩個整體之間再組成一個Raid0陣列。這樣不僅僅讀取數(shù)據(jù)會非???,并發(fā)寫入的速度也會隨著磁盤的增多而變快。至少四塊硬盤并且每塊硬盤大小應該相等才能組成Raid10陣列。
容量:所有硬盤容量之和的一半(一半寫數(shù)據(jù),一半用來備份數(shù)據(jù))。
f.Raid01
Raid01數(shù)據(jù)儲存方法如下(假設有四塊硬盤D1、D2、D3、D4):

特點:D1、D2組成一個陣列Raid0,D3、D4也組成一個陣列Raid0,D1、D2和D3、D4再組成一個Raid1。D1和D2作為數(shù)據(jù)盤陣列,D3和D4作為數(shù)據(jù)備份陣列,這種方式并不常用,至少四塊硬盤并且每塊硬盤大小應該相等才能組成Raid01陣列。
容量:所有硬盤容量之和的一半。
0×2.Linux創(chuàng)建磁盤陣列實例
這一部分通過Linux上的mdadm命令來實現(xiàn)Raid10磁盤陣列。
a.實驗環(huán)境介紹
實驗環(huán)境為一臺安裝了5塊硬盤的計算機,操作系統(tǒng)是CentOS7,除系統(tǒng)所在硬盤(/dev/sda)外,其余四塊20G的硬盤盤符分別為(/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde);
主要用到的命令:mdadm;
CentOS7中mdadm默認已安裝,如果沒有安裝,可以使用yum在線安裝,如下:
#首先確保已經(jīng)連接到互聯(lián)網(wǎng),搜索一下yum服務器上是否存在mdadm
qing@qingsword.com:~$ sudo yum search mdadm
#根據(jù)搜索結果和系統(tǒng)環(huán)境選擇對應的版本安裝
qing@qingsword.com:~$ sudo yum install mdadm.x86_64
#安裝需要root權限,請確保普通用戶可用sudo或切換到root權限操作
到這里,實驗的準備工作完成。
b.創(chuàng)建磁盤陣列Raid10
#參數(shù)詳解:
# 磁盤陣列創(chuàng)建需要root權限;
# -C 創(chuàng)建一個新的RAID起名為md0;
# -a yes 自動創(chuàng)建對應設備;
# -l 指定RAID級別,本例是10;
# -n 活動的磁盤數(shù)量(備份盤除外);
# 因為RAID10最少需要4塊硬盤,后面的sd[b-e]都被添加到md0中;
# 如果要創(chuàng)建其他級別的RAID,只需要更改-l參數(shù)后的級別,并根據(jù)所需要的硬盤的數(shù)量更改-n參數(shù)后面的數(shù)量即可;
qing@qingsword.com:~$ sudo mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sd[b-e]
Continue creating array? (y/n) y #輸入y繼續(xù)
#如果每塊硬盤容量都很大,RAID的創(chuàng)建不是瞬間完成的,通過查看下面這個文件,可以看到一個創(chuàng)建進度,確保全部完成后再進行下一步
qing@qingsword.com:~$ cat /proc/mdstat
Personalities : [raid10]
[====>................] resync = 24.0%
#只有這個到達100%才算完成
#查看剛才創(chuàng)建的磁盤陣列md0詳細信息
qing@qingsword.com:~$ sudo mdadm -D /dev/md0
c.配置開機自啟動磁盤陣列
新創(chuàng)建的磁盤陣列默認是不能開機自啟動的,需要手動創(chuàng)建一個配置文件,讓系統(tǒng)在啟動的時候自動啟動Raid(經(jīng)過測試,CentOS7并不需要創(chuàng)建這個配置文件,如果重啟后磁盤陣列沒有隨機啟動,請使用下面的方法配置一次):
#這個配置文件的創(chuàng)建需要root權限才可進行,切換到root
qing@qingsword.com:~$ su root
#將mdadm信息寫入配置文件
root@qingsword.com:~# mdadm -D --scan > /etc/mdadm.conf
d.將磁盤陣列掛載到目錄使用
#掛載前先需要對磁盤陣列格式化
qing@qingsword.com:~$ sudo mkfs.ext4 /dev/md0
#掛載,本例掛載到/mnt目錄
qing@qingsword.com:~$ sudo mount /dev/md0 /mnt
#查看已經(jīng)掛載的設備,可以看到/dev/md0可使用的大小是40G,上面已經(jīng)介紹過,Raid10可用大小是活動硬盤總和的一半
qing@qingsword.com:~$ sudo df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/md0 40G 176M 38G 1% /mnt
0×3.創(chuàng)建冗余磁盤陣列
可以在創(chuàng)建RAID的時候指定有幾塊冗余磁盤,當工作磁盤出現(xiàn)故障的時候,冗余磁盤自動啟動,頂替出現(xiàn)故障的磁盤繼續(xù)工作,請看下面的實例:
#假設有6塊硬盤,前面4塊用作RAID10,后面兩塊將被用作冗余(參數(shù)-x 2表示有2塊硬盤用作冗余)
qing@qingsword.com:~$ sudo mdadm -C /dev/md0 -a yes -l 10 -n 4 -x 2 /dev/sd[b-g]
#查看磁盤陣列詳細詳細
qing@qingsword.com:~$ sudo mdadm -D /dev/md0
...
Raid Level : raid10
...
Raid Devices : 4 #參與磁盤陣列硬盤數(shù)4
Total Devices : 6 #總硬盤數(shù)6
...
Active Devices : 4 #正在工作的硬盤4
Working Devices : 6 #能夠工作的硬盤6個
Failed Devices : 0 #故障硬盤數(shù)0
Spare Devices : 2 #空閑硬盤數(shù)2
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
4 8 80 - spare /dev/sdf #兩個冗余磁盤
5 8 96 - spare /dev/sdg
下面手動將一塊磁盤標記為故障,看看冗余盤是否起作用:
#將md0中sdc標記為故障
qing@qingsword.com:~$ sudo mdadm /dev/md0 -f /dev/sdc
mdadm: set /dev/sdc faulty in /dev/md0
qing@qingsword.com:~$ sudo mdadm -D
...
Active Devices : 4
Working Devices : 5
#還有5個能工作的磁盤(包括剩下冗余的1個)
Failed Devices : 1 #壞掉1個
Spare Devices : 1 #空閑1個
Number Major Minor RaidDevice State
0 8 16 0 active sync set-A /dev/sdb
5 8 96 1 active sync set-B /dev/sdg
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
1 8 32 - faulty /dev/sdc
4 8 80 - spare /dev/sdf
假如/dev/sdc經(jīng)過測試后發(fā)現(xiàn)沒有問題,想要重新加入md0使用,可以在系統(tǒng)重啟后,使用"mdadm /dev/md0 -a /dev/sdc"命令將它重新(添加)啟用。
如果以后,想要加入一塊新硬盤到這個raid10里作為備份盤,這塊新硬盤需要和其他硬盤(或分區(qū))保持相同的大小,然后使用下面的命令添加:
#添加后,就會在備份列表中看到/dev/sdh這塊硬盤了
qing@qingsword.com:~$ sudo mdadm /dev/md0 --add /dev/sdh
#或簡寫命令如下,效果同上
qing@qingsword.com:~$ sudo mdadm /dev/md0 -a /dev/sdh
0×4.刪除磁盤陣列
要想徹底清除RAID以及數(shù)據(jù),請使用下面的方法:
#1.如果已經(jīng)掛載,先卸載
qing@qingsword.com:~$ sudo umount /dev/md0
#2.關閉RAID
qing@qingsword.com:~$ sudo mdadm -S /dev/md0
#3.將磁盤sdb至sdf中的所有數(shù)據(jù)全部用0填充(創(chuàng)建時有多少塊硬盤,這里就寫多少塊,例如上面創(chuàng)建了冗余是從b-g,那么這里就寫/dev/sd[b-g])
qing@qingsword.com:~$ sudo mdadm --zero-superblock /dev/sd[b-f]
#4.刪除啟動配置文件(如果有)
qing@qingsword.com:~$ sudo rm -rf /etc/mdadm.conf