數(shù)據(jù)安全是中小型企業(yè)信息安全工作的重中之重,企業(yè)數(shù)據(jù)的可用性、安全性成為工作的焦點(diǎn)問(wèn)題。在保護(hù)企業(yè)數(shù)據(jù)的過(guò)程中,磁盤(pán)陣列技術(shù)(也稱(chēng)為RAID(Redundant Array of Inexpensive Disks))目前已經(jīng)廣泛的用于中小型企業(yè),或做磁盤(pán)的容錯(cuò)和備份,或用作構(gòu)建SAN存儲(chǔ)等等,是保證數(shù)據(jù)安全的一項(xiàng)重要技術(shù)。并且,RAID的門(mén)類(lèi)非常多,企業(yè)在如何選擇合適的磁盤(pán)陣列的問(wèn)題上需要做好決策。本文將選取RAID1、RAID-5這兩種磁盤(pán)陣列的創(chuàng)建過(guò)程來(lái)介紹開(kāi)源系統(tǒng)Linux下硬件磁盤(pán)陣列的使用。
一、了解磁盤(pán)陣列
RAID按照實(shí)現(xiàn)原理的不同分為不同的級(jí)別,不同的級(jí)別之間工作模式是有區(qū)別的,分別可以提供不同的速度,安全性和性?xún)r(jià)比。在業(yè)界,常見(jiàn)的幾種RAID如下所示:
RAID0:又稱(chēng)為Stripe或Striping(條帶),它代表了所有RAID級(jí)別中最高的存儲(chǔ)性能。RAID0提高存儲(chǔ)性能的原理是把連續(xù)的數(shù)據(jù)分散到多個(gè)磁盤(pán)上存取,這樣,系統(tǒng)有數(shù)據(jù)請(qǐng)求就可以被多個(gè)磁盤(pán)并行的執(zhí)行,每個(gè)磁盤(pán)執(zhí)行屬于它自己的那部分?jǐn)?shù)據(jù)請(qǐng)求。這種數(shù)據(jù)上的并行操作可以充分利用總線(xiàn)的帶寬,顯著提高磁盤(pán)整體存取性能。
RAID1:RAID1通過(guò)數(shù)據(jù)鏡像實(shí)現(xiàn)數(shù)據(jù)冗余,在兩對(duì)分離的磁盤(pán)上產(chǎn)生互為備份的數(shù)據(jù)。RAID1可以提高讀的性能,當(dāng)原始數(shù)據(jù)繁忙時(shí),可直接從鏡像拷貝中讀取數(shù)據(jù)。RAID1是磁盤(pán)陣列中費(fèi)用最高的,但提供了最高的數(shù)據(jù)可用率。當(dāng)一個(gè)磁盤(pán)失效,系統(tǒng)可以自動(dòng)地交換到鏡像磁盤(pán)上,而不需要重組失效的數(shù)據(jù)。
RAID2:從概念上講,RAID2同RAID3類(lèi)似,兩者都是將數(shù)據(jù)條塊化分布于不同的硬盤(pán)上,條塊單位為位或字節(jié)。然而RAID2使用稱(chēng)為“加重平均糾錯(cuò)碼”的編碼技術(shù)來(lái)提供錯(cuò)誤檢查及恢復(fù)。這種編碼技術(shù)需要多個(gè)磁盤(pán)存放檢查及恢復(fù)信息,使得RAID2技術(shù)實(shí)施更復(fù)雜。因此,在商業(yè)環(huán)境中很少使用。
RAID3:不同于RAID2,RAID3使用單塊磁盤(pán)存放奇偶校驗(yàn)信息。如果一塊磁盤(pán)失效,奇偶盤(pán)及其他數(shù)據(jù)盤(pán)可以重新產(chǎn)生數(shù)據(jù)。如果奇偶盤(pán)失效,則不影響數(shù)據(jù)使用。RAID3對(duì)于大量的連續(xù)數(shù)據(jù)可提供很好的傳輸率,但對(duì)于隨機(jī)數(shù)據(jù),奇偶盤(pán)會(huì)成為寫(xiě)操作的瓶頸。
RAID4:同RAID2、RAID3一樣,RAID4也同樣將數(shù)據(jù)條塊化并分布于不同的磁盤(pán)上,但條塊單位為塊或記錄。RAID4使用一塊磁盤(pán)作為奇偶校驗(yàn)盤(pán),每次寫(xiě)操作都需要訪(fǎng)問(wèn)奇偶盤(pán),成為寫(xiě)操作的瓶頸。
RAID5:RAID5沒(méi)有單獨(dú)指定的奇偶盤(pán),而是交叉地存取數(shù)據(jù)及奇偶校驗(yàn)信息于所有磁盤(pán)上。在RAID5上,讀/寫(xiě)指針可同時(shí)對(duì)陣列設(shè)備進(jìn)行操作,提供了更高的數(shù)據(jù)流量。RAID5更適合于小數(shù)據(jù)塊,隨機(jī)讀寫(xiě)的數(shù)據(jù)。RAID3與RAID5相比,重要的區(qū)別在于RAID3每進(jìn)行一次數(shù)據(jù)傳輸,需涉及到所有的陣列盤(pán)。而對(duì)于RAID5來(lái)說(shuō),大部分?jǐn)?shù)據(jù)傳輸只對(duì)一塊磁盤(pán)操作,可進(jìn)行并行操作。在RAID5中有“寫(xiě)損失”現(xiàn)象發(fā)生,即每一次寫(xiě)操作,將產(chǎn)生四個(gè)實(shí)際的讀/寫(xiě)操作,其中兩次讀舊的數(shù)據(jù)及奇偶信息,兩次寫(xiě)新的數(shù)據(jù)及奇偶信息。它可能是目前世界上最常見(jiàn)的RAID產(chǎn)品,最適合于事務(wù)性處理應(yīng)用,如ERP、CRM和E-mail等。
RAID6:RAID6與RAID5相比,增加了第二個(gè)獨(dú)立的奇偶校驗(yàn)信息塊。兩個(gè)獨(dú)立的奇偶系統(tǒng)使用不同的算法,數(shù)據(jù)的可靠性非常高。即使兩塊磁盤(pán)同時(shí)失效,也不會(huì)影響數(shù)據(jù)的使用。但需要分配給奇偶校驗(yàn)信息更大的磁盤(pán)空間,相對(duì)于RAID5有更大的“寫(xiě)損失”。RAID6的寫(xiě)性能非常差,較差的性能和復(fù)雜的實(shí)施,以及實(shí)現(xiàn)代價(jià)非常昂貴,使得RAID6很少使用。
RAID7:它有一個(gè)實(shí)時(shí)嵌入操作系統(tǒng)用作控制器,一個(gè)高速總線(xiàn)用于緩存。它提供快速的I/O,但是價(jià)格昂貴,應(yīng)用性稍差。
RAID10:它由數(shù)據(jù)條陣列組成,其中每個(gè)條都是驅(qū)動(dòng)器的一個(gè)RAID1陣列。它與RAID1的容錯(cuò)能力相同,面向需要高性能和冗余,但不需要高容量的數(shù)據(jù)庫(kù)服務(wù)器。
RAID53:其實(shí)施情況同RAID0數(shù)據(jù)條陣列,其中,每一段都是一個(gè)RAID3陣列。它的冗余與容錯(cuò)能力同RAID3。這對(duì)需要具有高數(shù)據(jù)傳輸率的RAID3配置的IT系統(tǒng)有益,但是它價(jià)格昂貴、效率偏低。
二、根據(jù)具體情況使用磁盤(pán)陣列
表1對(duì)各類(lèi)RAID產(chǎn)品的優(yōu)缺點(diǎn)進(jìn)行了詳細(xì)說(shuō)明,用戶(hù)可以在實(shí)際的應(yīng)用中選擇使用:
表1 各類(lèi)RAID產(chǎn)品比較

值得注意的是:上述介紹的0,1,2等RAID類(lèi)型并不代表技術(shù)的高低(比如RAID2并沒(méi)有商業(yè)產(chǎn)品,相對(duì)于RAID1說(shuō)較差),而只代表不同的技術(shù)型號(hào)。所以在實(shí)際應(yīng)用中選擇某種RAID產(chǎn)品需要根據(jù)應(yīng)用環(huán)境和資金等情況而定。
實(shí)現(xiàn)RAID可以采用兩種方法,硬RAID和軟RAID:
硬RAID:采用專(zhuān)門(mén)的控制器來(lái)完成,也就是常說(shuō)的RAID卡;通過(guò)磁盤(pán)陣列控制卡(RAID Controller Card)提供磁盤(pán)陣列的功能。要使用硬件的磁盤(pán)陣列,必須采購(gòu)支持Linux的磁盤(pán)陣列控制卡,一般需要正確安裝驅(qū)動(dòng)程序,才能讓Linux系統(tǒng)正常使用設(shè)備。
軟RAID:采用軟件的方法來(lái)實(shí)現(xiàn)。用戶(hù)無(wú)須安裝額外的硬設(shè)備,只要保證Linux內(nèi)核有支持,就可以直接使用。
由于硬件磁盤(pán)陣列的功能是由磁盤(pán)陣列控制卡提供計(jì)算工作的,因而效率大大高于由Linux內(nèi)核的軟件磁盤(pán)陣列;但硬件磁盤(pán)陣列得購(gòu)買(mǎi)額外的設(shè)備,因此其使用成本比軟件磁盤(pán)陣列高得多。過(guò)去RAID一直是高端服務(wù)器才應(yīng)用的設(shè)備,與高檔SCSI硬盤(pán)配合使用。SCSI RAID穩(wěn)定性好、速度快,但SCSI硬盤(pán)和SCSI接口RAID卡價(jià)格高昂,往往只在高檔服務(wù)器上使用。近來(lái)隨著技術(shù)的發(fā)展和產(chǎn)品成本的不斷下降,IDE硬盤(pán)和SATA硬盤(pán)的性能都有了很大提升,加之RAID芯片的普及,使得RAID技術(shù)也廣泛應(yīng)用到了IDE硬盤(pán)和SATA硬盤(pán)上。
三、開(kāi)源系統(tǒng)Linux下構(gòu)建磁盤(pán)陣列的具體方法
目前,Linux能夠較好地支持RAID0、RAID1、RAID4、RAID5這四種磁盤(pán)陣列模式。在4種模式中,RAID4和RAID5運(yùn)行方式較為接近。
1.創(chuàng)建RAID1磁盤(pán)陣列
RAID1磁盤(pán)陣列的基本工作方式是通過(guò)數(shù)據(jù)鏡像實(shí)現(xiàn)數(shù)據(jù)冗余,在兩對(duì)分離的磁盤(pán)上產(chǎn)生互為備份的數(shù)據(jù),也就是說(shuō)每一塊磁盤(pán)所存儲(chǔ)的數(shù)據(jù)是完全相同的。所以,要?jiǎng)?chuàng)建RAID1磁盤(pán)陣列,至少需要2塊硬盤(pán),每一塊硬盤(pán)最好大小一致。這是因?yàn)槊恳粋€(gè)硬盤(pán)存儲(chǔ)相同的數(shù)據(jù),因此有一個(gè)硬盤(pán)比其他的容量大時(shí),磁盤(pán)陣列也無(wú)法使用多出來(lái)的硬盤(pán)空間。本例采用2個(gè)硬盤(pán)的分區(qū)(hda1和hdb1)來(lái)創(chuàng)建RAID1類(lèi)型磁盤(pán)陣列。
基本步驟如下:
1)編輯磁盤(pán)陣列的配置文件/etc/raidtab如下:
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
chunk-size 4
persistent-superblock 1
device /dev/hda1
raid-disk 0
device /dev/sdb1
raid-disk 1
上述文件中每項(xiàng)的含義如下所示:
raiddev:指定磁盤(pán)陣列的設(shè)備名稱(chēng);
raid-level:指定采用的RAID模式,例中為RAID1;
nr-raid-disks:指定磁盤(pán)陣列的硬盤(pán)個(gè)數(shù),例中RAID為2個(gè)硬盤(pán)組成;
nr-spare-disks:指定磁盤(pán)陣列備用磁盤(pán)數(shù)目,例中為0;
chunk-size:指定數(shù)據(jù)寫(xiě)入磁盤(pán)陣列時(shí),每個(gè)寫(xiě)入?yún)^(qū)塊的大小,其單位為KB,且大小必須為2的冪次方。一般說(shuō)來(lái),此設(shè)置值的大小會(huì)影響磁盤(pán)陣列的讀寫(xiě)效率,不過(guò)理想的設(shè)置值,則隨著計(jì)算機(jī)的使用情況而異,所以并無(wú)絕對(duì)的結(jié)果;
persistent-superblock:配置是否要寫(xiě)入磁盤(pán)的超級(jí)塊(superblock),配置成“1”表示寫(xiě)入,配置“0”不寫(xiě)入;
device /dev/hda1:根據(jù)實(shí)際情況,指定第一個(gè)硬盤(pán)分區(qū)的名稱(chēng),此處第一個(gè)硬盤(pán)分區(qū)為hda1;
raid-disk 0:配置上述的分區(qū)是此磁盤(pán)陣列所使用的第一個(gè)硬盤(pán),編號(hào)從0開(kāi)始;
device /dev/hdb1:同上,按實(shí)際情況,指定第二塊硬盤(pán)分區(qū)的名稱(chēng);
raid-disk 1:配置上述的分區(qū)是此磁盤(pán)陣列所使用的第一個(gè)硬盤(pán),編號(hào)為1。
2)格式化并加載磁盤(pán)陣列,命令如下所示:
//建立磁盤(pán)
#mkraid /dev/md0
//使用ext3文件系統(tǒng)格式化
#mke3fs /dev/md0
//將md0磁盤(pán)陣列加載到目錄/mnt/md0下
#mount -t ext3 /dev/md0 mnt/md0
3)啟動(dòng)磁盤(pán)陣列
#raidstart /dev/md0
4)使用過(guò)程中查看磁盤(pán)陣列的使用狀態(tài)
#more /proc/mdstat
5)停止和卸載磁盤(pán)陣列
//首先停止磁盤(pán)陣列
#raidstop /dev/md0
//然后卸下裝載的磁盤(pán)陣列
#umount /dev/md0
6)刪除磁盤(pán)陣列:首先使用第5)步停止磁盤(pán)陣列,然后刪除/etc/raidtab文檔即可。
2.創(chuàng)建RAID5磁盤(pán)陣列
上面介紹了RAID0的創(chuàng)建方式,下面介紹如何創(chuàng)建RAID5磁盤(pán)陣列。有了上面的基礎(chǔ)后,對(duì)于RAID5的創(chuàng)建也就不那么困難了。簡(jiǎn)單地說(shuō),RAID5是在RAID0和RAI1中取得折衷,既具備容錯(cuò)能力,也不會(huì)浪費(fèi)太多硬盤(pán)空間,并有助于提高磁盤(pán)的I/O性能。由于RAID5需要存儲(chǔ)同位校驗(yàn)碼,因此要?jiǎng)?chuàng)建此模式的磁盤(pán)陣列,至少需要3塊或以上的硬盤(pán)。因此,本例以hda、hdb、hdc三塊磁盤(pán)的分區(qū)(hda1、hdb1和hdc1)來(lái)組成RAID5磁盤(pán)。當(dāng)然,也可以指定三塊磁盤(pán)的其他分區(qū),這個(gè)可以根據(jù)實(shí)際磁盤(pán)分區(qū)的使用情況選定,并不是固定的。
基本操作步驟如下:
1)編輯磁盤(pán)陣列的配置文件/etc/raidtab如下:
raiddev /dev/md0
raid-level 5
nr-raid-disks 3
nr-spare-disks 0
chunk-size 32
persistent-superblock 1
parity-algorithm left-symmetric
device /dev/hda1
raid-disk 0
device /dev/hdb1
raid-disk 1
device /dev/hdc1
raid-disk 2
同理,上述文件中每項(xiàng)的含義如下所示:
raiddev:指定磁盤(pán)陣列名稱(chēng);
raid-level:指定使用的RAID5磁盤(pán)陣列;
nr-raid-disks:此磁盤(pán)陣列由3個(gè)硬盤(pán)所組成;
nr-spare-disks :指定/此磁盤(pán)陣列的備用硬盤(pán)數(shù)目;
chunk-size:當(dāng)數(shù)據(jù)要寫(xiě)入磁盤(pán)陣列時(shí),每個(gè)寫(xiě)入的大小(單位為KB,且必須為2的冪次方)。此設(shè)置值的大小,會(huì)影響磁盤(pán)陣列的讀寫(xiě)效率,不過(guò)理想的設(shè)置值,則按每臺(tái)計(jì)算機(jī)的使用情況而異,并無(wú)絕對(duì)的結(jié)果;
persistent-superblock:設(shè)置是否要寫(xiě)入磁盤(pán)的superblock:設(shè)成1表示寫(xiě)入,否則設(shè)成0。若將此參數(shù)設(shè)成1,則當(dāng)磁盤(pán)陣列中有硬盤(pán)損壞時(shí),系統(tǒng)仍可繼續(xù)啟動(dòng);若有備用硬盤(pán),也會(huì)同時(shí)啟用備用硬盤(pán);
parity-algorithm:指定要用哪一種算法計(jì)算同位校驗(yàn)嗎,可使用的算法有l(wèi)eft-symmetric、left-asymmetric、right-symmetric及right-asymmetric等4種。一般采用left-symmetric能有最好的存取效率;
device /dev/hda1:指定所有使用的第1個(gè)硬盤(pán)分區(qū)名稱(chēng);
raid-disk 0:設(shè)置上述的分區(qū)是此磁盤(pán)陣列所使用的第1個(gè)硬盤(pán)(編號(hào)由0開(kāi)始);
device /dev/hdb1:指定所要使用的第2個(gè)硬盤(pán)分區(qū)名稱(chēng);
raid-disk 1:設(shè)置上述的分區(qū)是此磁盤(pán)陣列所使用的第2個(gè)硬盤(pán);
device /dev/hdc1 :指定所要使用的第3個(gè)硬盤(pán)分區(qū)名稱(chēng);
raid-disk 2:設(shè)置上述的分區(qū)是此磁盤(pán)陣列所使用的第3個(gè)硬盤(pán)。
2)格式化并加載磁盤(pán)陣列,命令如下所示:
//建立磁盤(pán)
#mkraid /dev/md0
//使用ext3文件系統(tǒng)格式化
#mke3fs /dev/md0
//將md0磁盤(pán)陣列加載到目錄/mnt/md0下
#mount -t ext3 /dev/md0 mnt/md0
3)啟動(dòng)磁盤(pán)陣列
#raidstart /dev/md0
4)使用過(guò)程中查看磁盤(pán)陣列的使用狀態(tài)
#more /proc/mdstat
5)停止和卸載磁盤(pán)陣列
//首先停止磁盤(pán)陣列
#raidstop /dev/md0
//然后卸下裝載的磁盤(pán)陣列
#umount /dev/md0
6)刪除磁盤(pán)陣列:首先使用第5)步停止磁盤(pán)陣列,然后刪除/etc/raidtab文檔即可。


