詳細(xì)解說(shuō)磁盤(pán)陣列
1.為什么需要磁盤(pán)陣列
如何增加磁盤(pán)的存取(access)速度,如何防止數(shù)據(jù)因磁盤(pán)的故障而失落及如何有效的利用磁盤(pán)空間,一直是電腦專(zhuān)業(yè)人員和用戶(hù)的困擾;而大容量磁盤(pán)的價(jià)格非常昂貴,對(duì)用戶(hù)形成很大的負(fù)擔(dān)。磁盤(pán)陣列技術(shù)的產(chǎn)生一舉解決了這些問(wèn)題。
過(guò)去十年來(lái),CPU的處理速度增加了五十倍有多,內(nèi)存(memory)的存取速度亦大幅增,而數(shù)據(jù)儲(chǔ)存裝置--主要是磁盤(pán)(hard disk)--的存取速度只增加了三、四倍,形成電腦系統(tǒng)的瓶頸,拉低了電腦系統(tǒng)的整體性能(throughput),若不能有效的提升磁盤(pán)的存取速度,CPU、內(nèi)存及磁盤(pán)間的不平衡將使CPU及內(nèi)存的改進(jìn)形成浪費(fèi)。
目前改進(jìn)磁盤(pán)存取速度的的方式主要有兩種。一是磁盤(pán)快取控制(disk cache controller),它將從磁盤(pán)讀取的數(shù)據(jù)存在快取內(nèi)存(cache memory)中以減少磁盤(pán)存取的次數(shù),數(shù)據(jù)的讀寫(xiě)都在快取內(nèi)存中進(jìn)行,大幅增加存取的速度,如要讀取的數(shù)據(jù)不在快取內(nèi)存中,或要寫(xiě)數(shù)據(jù)到磁盤(pán)時(shí),才做磁盤(pán)的存取動(dòng)作。這種方式在單工環(huán)境(single-tasking environment)如DOS之下,對(duì)大量數(shù)據(jù)的存取有很好的性能(量小且頻繁的存取則不然),但在多工(multi-tasking)環(huán)境之下(因?yàn)橐煌5刈鲾?shù)據(jù)交換(swapping)的動(dòng)作)或數(shù)據(jù)庫(kù)(database)的存取(因?yàn)槊恳挥涗浂己苄?就不能顯示其性能。這種方式?jīng)]有任何安全保障。其二是使用磁盤(pán)陣列的技術(shù)。磁盤(pán)陣列是把多個(gè)磁盤(pán)組成一個(gè)陣列,當(dāng)作單一磁盤(pán)使用,它將數(shù)據(jù)以分段(striping)的方式儲(chǔ)存在不同的磁盤(pán)中,存取數(shù)據(jù)時(shí),陣列中的相關(guān)磁盤(pán)一起動(dòng)作,大幅減低數(shù)據(jù)的存取時(shí)間,同時(shí)有更佳的空間利用率。磁盤(pán)陣列所利用的不同的技術(shù),稱(chēng)為RAID level,不同的level針對(duì)不同的系統(tǒng)及應(yīng)用,以解決數(shù)據(jù)安全的問(wèn)題。
一般高性能的磁盤(pán)陣列都是以硬件的形式來(lái)達(dá)成,進(jìn)一步的把磁盤(pán)快取控制及磁盤(pán)陣列結(jié)合在一個(gè)控制器(RAID controller)或控制卡上,針對(duì)不同的用戶(hù)解決人們對(duì)磁盤(pán)輸出入系統(tǒng)的四大要求:
(1)增加存取速度,
(2)容錯(cuò)(fault tolerance),即安全性
(3)有效的利用磁盤(pán)空間;
(4)盡量的平衡CPU,內(nèi)存及磁盤(pán)的性能差異,提高電腦的整體工作性能。
2.磁盤(pán)陣列原理
磁盤(pán)陣列中針對(duì)不同的應(yīng)用使用的不同技術(shù),稱(chēng)為RAID level, RAID是Redundant Array of Inexpensive Disks的縮寫(xiě),而每一level代表一種技術(shù),目前業(yè)界公認(rèn)的標(biāo)準(zhǔn)是RAID 0~RAID 5。這個(gè)level并不代表技術(shù)的高低,level 5并不高于level 3,level 1也不低過(guò)level 4,至于要選擇那一種RAID level的產(chǎn)品,純視用戶(hù)的操作環(huán)境(operating environment)及應(yīng)用(application)而定,與level的高低沒(méi)有必然的關(guān)系。RAID 0及RAID 1適用于PC及PC相關(guān)的系統(tǒng)如小型的網(wǎng)絡(luò)服務(wù)器(network server)及需要高磁盤(pán)容量與快速磁盤(pán)存取的工作站等,因?yàn)楸容^便宜,但因一般人對(duì)磁盤(pán)陣列不了解,沒(méi)有看到磁盤(pán)陣列對(duì)他們價(jià)值,市場(chǎng)尚未打開(kāi);RAID 2及RAID 3適用于大型電腦及影像、CAD/CAM等處理;RAID 5多用于OLTP,因有金融機(jī)構(gòu)及大型數(shù)據(jù)處理中心的迫切需要,故使用較多而較有名氣,但也因此形成很多人對(duì)磁盤(pán)陣列的誤解,以為磁盤(pán)陣列非要RAID 5不可;RAID 4較少使用,因?yàn)閮烧哂衅涔餐?而RAID 4有其先天的限制。其他如RAID 6,RAID 7,乃至RAID 10等,都是廠(chǎng)商各做各的,并無(wú)一致的標(biāo)準(zhǔn),在此不作說(shuō)明。介紹各個(gè)RAID level之前,先看看形成磁盤(pán)陣列的兩個(gè)基本技術(shù):磁盤(pán)延伸(Disk Spanning):譯為磁盤(pán)延伸,能確切的表示disk spanning這種技術(shù)的含義。如下圖所示,DFTraid 磁盤(pán)陣列控制器,聯(lián)接了四個(gè)磁盤(pán):
這四個(gè)磁盤(pán)形成一個(gè)陣列(array),而磁盤(pán)陣列的控制器(RAID controller)是將此四個(gè)磁盤(pán)視為單一的磁盤(pán),如DOS環(huán)境下的C:盤(pán)。這是disk spanning的意義,因?yàn)榘研∪萘康拇疟P(pán)延伸為大容量的單一磁盤(pán),用戶(hù)不必規(guī)劃數(shù)據(jù)在各磁盤(pán)的分布,而且提高了磁盤(pán)空間的使用率。DFTraid的SCSI磁盤(pán)陣列更可連接幾十個(gè)磁盤(pán),形成數(shù)十GB到數(shù)百GB的陣列,使磁盤(pán)容量幾乎可作無(wú)限的延伸;而各個(gè)磁盤(pán)一起作取存的動(dòng)作,比單一磁盤(pán)更為快捷。很明顯的,有此陣列的形成而產(chǎn)生RAID的各種技術(shù)。我們也可從上圖看出inexpensive(便宜)的意義,因?yàn)樗膫€(gè)250MBbytes的磁盤(pán)比一個(gè)1GBytes的磁盤(pán)要便宜,尤其以前大磁盤(pán)的價(jià)格非常昴貴,但在磁盤(pán)越來(lái)越便宜的今天,inexpensive已非磁盤(pán)陣列的重點(diǎn),雖然對(duì)于需要大磁盤(pán)容量的系統(tǒng),仍是考慮的要點(diǎn)。磁盤(pán)或數(shù)據(jù)分段(Disk Striping or Data Striping):
因?yàn)榇疟P(pán)陣列是將同一陣列的多個(gè)磁盤(pán)視為單一的虛擬磁盤(pán)(virtual disk),所以其數(shù)據(jù)是以分段(block or segment)的方式順序存放在磁盤(pán)陣列中,如下圖:
數(shù)據(jù)按需要分段,從第一個(gè)磁盤(pán)開(kāi)始放,放到最後一個(gè)磁盤(pán)再回到第一個(gè)磁盤(pán)放起,直到數(shù)據(jù)分布完畢。至于分段的大小視系統(tǒng)而定,有的系統(tǒng)或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB的,但除非數(shù)據(jù)小于一個(gè)扇區(qū)(sector,即521bytes),否則其分段應(yīng)是512byte的倍數(shù)。因?yàn)榇疟P(pán)的讀寫(xiě)是以一個(gè)扇區(qū)為單位,若數(shù)據(jù)小于512bytes,系統(tǒng)讀取該扇區(qū)后,還要做組合或分組(視讀或?qū)懚?的動(dòng)作,浪費(fèi)時(shí)間。從上圖我們可以看出,數(shù)據(jù)以分段于在不同的磁盤(pán),整個(gè)陣列的各個(gè)磁盤(pán)可同時(shí)作讀寫(xiě),故數(shù)據(jù)分段使數(shù)據(jù)的存取有最好的效率,理論上本來(lái)讀一個(gè)包含四個(gè)分段的數(shù)據(jù)所需要的時(shí)間約=(磁盤(pán)的access time +數(shù)據(jù)的transfer time)X4次,現(xiàn)在只要一次就可以完成。
若以N表示磁盤(pán)的數(shù)目,R表示讀取,W表示寫(xiě)入,S表示可使用空間,則數(shù)據(jù)分段的性能為:
R:N(可同時(shí)讀取所有磁盤(pán))
W:N(可同時(shí)寫(xiě)入所有磁盤(pán))
S:N(可利用所有的磁盤(pán),并有最佳的使用率)
Disk striping也稱(chēng)為RAID 0,很多人以為RAID 0沒(méi)有甚么,其實(shí)這是非常錯(cuò)誤的觀(guān)念,因?yàn)镽AID 0使磁盤(pán)的輸出入有最高的效率。而磁盤(pán)陣列有更好效率的原因除數(shù)據(jù)分段外,它可以同時(shí)執(zhí)行多個(gè)輸出入的要求,因?yàn)殛嚵兄械拿恳粋€(gè)磁盤(pán)都能獨(dú)立動(dòng)作,分段放在不同的磁盤(pán),不同的磁盤(pán)可同時(shí)作讀寫(xiě),而且能在快取內(nèi)存及磁盤(pán)作并行存取(parallel access)的動(dòng)作,但只有硬件的磁盤(pán)陣列才有此性能表現(xiàn)。
從上面兩點(diǎn)我們可以看出,disk spanning定義了RAID的基本形式,提供了一個(gè)便宜、靈活、高性能的系統(tǒng)結(jié)構(gòu),而disk striping解決了數(shù)據(jù)的存取效率和磁盤(pán)的利用率問(wèn)題,RAID 1至RAID 5是在此基礎(chǔ)上提供磁盤(pán)安全的方案。
RAID 1
RAID 1是使用磁盤(pán)鏡像(disk mirroring)的技術(shù)。磁盤(pán)鏡像應(yīng)用在RAID 1之前就在很多系統(tǒng)中使用,它的方式是在工作磁盤(pán)(working disk)之外再加一額外的備份磁盤(pán)(backup disk),兩個(gè)磁盤(pán)所儲(chǔ)存的數(shù)據(jù)完全一樣,數(shù)據(jù)寫(xiě)入工作磁盤(pán)的同時(shí)亦寫(xiě)入備份磁盤(pán)。磁盤(pán)鏡像不見(jiàn)得就是RAID 1,如Novell NetWare亦有提供磁盤(pán)鏡像的功能,但并不表示NetWare有了RAID 1的功能。一般磁盤(pán)鏡像和RAID 1有二點(diǎn)最大的不同:
RAID 1無(wú)工作磁盤(pán)和備份磁盤(pán)之分,多個(gè)磁盤(pán)可同時(shí)動(dòng)作而有重疊(overlapping)讀取的功能,甚至不同的鏡像磁盤(pán)可同時(shí)作寫(xiě)入的動(dòng)作,這是一種最佳化的方式,稱(chēng)為負(fù)載平衡(load-balance)。例如有多個(gè)用戶(hù)在同一時(shí)間要讀取數(shù)據(jù),系統(tǒng)能同時(shí)驅(qū)動(dòng)互相鏡像的磁盤(pán),同時(shí)讀取數(shù)據(jù),以減輕系統(tǒng)的負(fù)載,增加I/O的性能。
RAID 1的磁盤(pán)是以磁盤(pán)延伸的方式形成陣列,而數(shù)據(jù)是以數(shù)據(jù)分段的方式作儲(chǔ)存,因而在讀取時(shí),它幾乎和RAID 0有同樣的性能。從RAID的結(jié)構(gòu)就可以很清楚的看出RAID 1和一般磁盤(pán)鏡像的不同。
下圖為RAID 1,每一筆數(shù)據(jù)都儲(chǔ)存兩份
從上圖可以看出:
R:N(可同時(shí)讀取所有磁盤(pán))
W:N/2(同時(shí)寫(xiě)入磁盤(pán)數(shù))
S:N/2(利用率)
讀取數(shù)據(jù)時(shí)可用到所有的磁盤(pán),充分發(fā)揮數(shù)據(jù)分段的優(yōu)點(diǎn);寫(xiě)入數(shù)據(jù)時(shí),因?yàn)橛袀浞?所以要寫(xiě)入兩個(gè)磁盤(pán),其效率是N/2,磁盤(pán)空間的使用率也只有全部磁盤(pán)的一半。
很多人以為RAID 1要加一個(gè)額外的磁盤(pán),形成浪費(fèi)而不看好RAID 1,事實(shí)上磁盤(pán)越來(lái)越便宜,并不見(jiàn)得造成負(fù)擔(dān),況且RAID 1有最好的容錯(cuò)(fault tolerance)能力,其效率也是除RAID 0之外最好的。我們可視應(yīng)用的不同,在同一磁盤(pán)陣列中使用不同的RAID level,如華藝科技公司的DFTraid系列都可同一磁盤(pán)陣列中定義八個(gè)邏輯磁盤(pán)(logic disk),分別使用不同的RAID level,分為C:,D:及E:三個(gè)邏輯磁盤(pán)(或LUN0,LUN1,LUN2).
RAID 1完全做到了容錯(cuò)包括不停機(jī)(non-stop),當(dāng)某一磁盤(pán)發(fā)生故障,可將此磁盤(pán)拆下來(lái)而不影向其他磁盤(pán)的操作;待新的磁盤(pán)換上去之后,系統(tǒng)即時(shí)做鏡像,將數(shù)據(jù)重新復(fù)上去,RAID 1在容錯(cuò)及存取的性能上是所有RAID level之冠。
在磁盤(pán)陣列的技術(shù)上,從RAID 1到RAID 5,不停機(jī)的意思表示在工作時(shí)如發(fā)生磁盤(pán)故障,系統(tǒng)能持續(xù)工作而不停頓,仍然可作磁盤(pán)的存取,正常的讀寫(xiě)數(shù)據(jù);而容錯(cuò)則表示即使磁盤(pán)故障,數(shù)據(jù)仍能保持完整,可讓系統(tǒng)存取到正確的數(shù)據(jù),而SCSI的磁盤(pán)陣列更可在工作中抽換磁盤(pán),并可自動(dòng)重建故障磁盤(pán)的數(shù)據(jù)。磁盤(pán)陣列之所以能做到容錯(cuò)及不停機(jī),是因?yàn)樗腥哂嗟拇疟P(pán)空間可資利用,這也就是Redundant的意義。
#p#
RAID 2
RAID 2是把數(shù)據(jù)分散為位元(bit)或塊(block),加入海明碼Hamming Code,在磁盤(pán)陣列中作間隔寫(xiě)入(interleaving)到每個(gè)磁盤(pán)中,而且地址(address)都一樣,也就是在各個(gè)磁盤(pán)中,其數(shù)據(jù)都在相同的磁道(cylinder or track)及扇區(qū)中。RAID 2的設(shè)計(jì)是使用共軸同步(spindle synchronize)的技術(shù),存取數(shù)據(jù)時(shí),整個(gè)磁盤(pán)陣列一起動(dòng)作,在各作磁盤(pán)的相同位置作平行存取,所以有最好的存取時(shí)間(access time),其總線(xiàn)(bus)是特別的設(shè)計(jì),以大帶寬(band wide)并行傳輸所存取的數(shù)據(jù),所以有最好的傳輸時(shí)間(transfer time)。在大型檔案的存取應(yīng)用,RAID 2有最好的性能,但如果檔案太小,會(huì)將其性能拉下來(lái),因?yàn)榇疟P(pán)的存取是以扇區(qū)為單位,而RAID 2的存取是所有磁盤(pán)平行動(dòng)作,而且是作單位元的存取,故小于一個(gè)扇區(qū)的數(shù)據(jù)量會(huì)使其性能大打折扣。RAID 2是設(shè)計(jì)給需要連續(xù)且大量數(shù)據(jù)的電腦使用的,如大型電腦(mainframe to supercomputer)、作影像處理或CAD/CAM的工作站(workstation)等,并不適用于一般的多用戶(hù)環(huán)境、網(wǎng)絡(luò)服務(wù)器(network server),小型機(jī)或PC。
RAID 2的安全采用內(nèi)存陣列(memory array)的技術(shù),使用多個(gè)額外的磁盤(pán)作單位錯(cuò)誤校正(single-bit correction)及雙位錯(cuò)誤檢測(cè)(double-bit detection);至于需要多少個(gè)額外的磁盤(pán),則視其所采用的方法及結(jié)構(gòu)而定,例如八個(gè)數(shù)據(jù)磁盤(pán)的陣列可能需要三個(gè)額外的磁盤(pán),有三十二個(gè)數(shù)據(jù)磁盤(pán)的高檔陣列可能需要七個(gè)額外的磁盤(pán)。
RAID 3
RAID 3的數(shù)據(jù)儲(chǔ)存及存取方式都和RAID 2一樣,但在安全方面以奇偶校驗(yàn)(parity check)取代海明碼做錯(cuò)誤校正及檢測(cè),所以只需要一個(gè)額外的校檢磁盤(pán)(parity disk)。奇偶校驗(yàn)值的計(jì)算是以各個(gè)磁盤(pán)的相對(duì)應(yīng)位作XOR的邏輯運(yùn)算,然后將結(jié)果寫(xiě)入奇偶校驗(yàn)磁盤(pán),任何數(shù)據(jù)的修改都要做奇偶校驗(yàn)計(jì)算,如下圖:
如某一磁盤(pán)故障,換上新的磁盤(pán)后,整個(gè)磁盤(pán)陣列(包括奇偶校驗(yàn)磁盤(pán))需重新計(jì)算一次,將故障磁盤(pán)的數(shù)據(jù)恢復(fù)并寫(xiě)入新磁盤(pán)中;如奇偶校驗(yàn)磁盤(pán)故障,則重新計(jì)算奇偶校驗(yàn)值,以達(dá)容錯(cuò)的要求.
較之RAID 1及RAID 2,RAID 3有85%的磁盤(pán)空間利用率,其性能比RAID 2稍差,因?yàn)橐銎媾夹r?yàn)計(jì)算;共軸同步的平行存取在讀檔案時(shí)有很好的性能,但在寫(xiě)入時(shí)較慢,需要重新計(jì)算及修改奇偶校驗(yàn)磁盤(pán)的內(nèi)容。RAID 3和RAID 2有同樣的應(yīng)用方式,適用大檔案及大量數(shù)據(jù)輸出入的應(yīng)用,并不適用于PC及網(wǎng)絡(luò)服務(wù)器。
RAID 4
RAID 4也使用一個(gè)校驗(yàn)磁盤(pán),但和RAID 3不一樣,如下圖:
RAID 4是以扇區(qū)作數(shù)據(jù)分段,各磁盤(pán)相同位置的分段形成一個(gè)校驗(yàn)磁盤(pán)分段(parity block),放在校驗(yàn)磁盤(pán)。這種方式可在不同的磁盤(pán)平行執(zhí)行不同的讀取命今,大幅提高磁盤(pán)陣列的讀取性能;但寫(xiě)入數(shù)據(jù)時(shí),因受限于校驗(yàn)磁盤(pán),同一時(shí)間只能作一次,啟動(dòng)所有磁盤(pán)讀取數(shù)據(jù)形成同一校驗(yàn)分段的所有數(shù)據(jù)分段,與要寫(xiě)入的數(shù)據(jù)做好校驗(yàn)計(jì)算再寫(xiě)入。即使如此,小型檔案的寫(xiě)入仍然比RAID 3要快,因其校驗(yàn)計(jì)算較簡(jiǎn)單而非作位(bit level)的計(jì)算;但校驗(yàn)磁盤(pán)形成RAID 4的瓶頸,降低了性能,因有RAID 5而使得RAID 4較少使用。
RAID 5
RAID5避免了RAID 4的瓶頸,方法是不用校驗(yàn)磁盤(pán)而將校驗(yàn)數(shù)據(jù)以循環(huán)的方式放在每一個(gè)磁盤(pán)中,如下圖
磁盤(pán)陣列的第一個(gè)磁盤(pán)分段是校驗(yàn)值,第二個(gè)磁盤(pán)至后一個(gè)磁盤(pán)再折回第一個(gè)磁盤(pán)的分段是數(shù)據(jù),然后第二個(gè)磁盤(pán)的分段是校驗(yàn)值,從第三個(gè)磁盤(pán)再折回第二個(gè)磁盤(pán)的分段是數(shù)據(jù),以此類(lèi)推,直到放完為止。圖中的第一個(gè)parity block是由A0,A1...,B1,B2計(jì)算出來(lái),第二個(gè)parity block是由B3,B4,...,C4,D0計(jì)算出來(lái),也就是校驗(yàn)值是由各磁盤(pán)同一位置的分段的數(shù)據(jù)所計(jì)算出來(lái)。這種方式能大幅增加小檔案的存取性能,不但可同時(shí)讀取,甚至有可能同時(shí)執(zhí)行多個(gè)寫(xiě)入的動(dòng)作,如可寫(xiě)入數(shù)據(jù)到磁盤(pán)1而其parity block在磁盤(pán)2,同時(shí)寫(xiě)入數(shù)據(jù)到磁盤(pán)4而其parity block在磁盤(pán)1,這對(duì)聯(lián)機(jī)交易處理(OLTP, on-line Transaction Processing)如銀行系統(tǒng)、金融、股市等或大型數(shù)據(jù)庫(kù)的處理提供了最佳的解決方案(solution),因?yàn)檫@些應(yīng)用的每一筆數(shù)據(jù)量小,磁盤(pán)輸出入頻繁而且必須容錯(cuò)。
事實(shí)上RAID 5的性能并無(wú)如此理想,因?yàn)槿魏螖?shù)據(jù)的修改,都要把同一parity block的所有數(shù)據(jù)讀出來(lái)修改后,做完校驗(yàn)計(jì)算再寫(xiě)回去,也就是RMW cycle(Read-Modify-Write cycle,這個(gè)cycle沒(méi)有包括校驗(yàn)計(jì)算);正因?yàn)闋恳欢鴦?dòng)全身,所以:
R:N(可同時(shí)讀取所有磁盤(pán))
W:1(可同時(shí)寫(xiě)入磁盤(pán)數(shù))
S:N-1(利用率)
RAID 5的控制比較復(fù)雜,尤其是利用硬件對(duì)磁盤(pán)陣列的控制,因?yàn)檫@種方式的應(yīng)用比其他的RAID level要掌握更多的事情,有更多的輸出入需求,既要速度快,又要處理數(shù)據(jù),計(jì)算校驗(yàn)值,做錯(cuò)誤校正等,所以?xún)r(jià)格較高;其應(yīng)用最好是OLTP,至于用于PC等,不見(jiàn)得有最佳的性能。
【編輯推薦】