磁盤陣列(DiskArray)原理

1.爲什麼需要磁盤陣列?

如何增加磁盤的存取(access)速度,如何防止數據因磁盤的故障而失落及如何有效的利用磁盤空間,一直是電腦專業人員和用戶的困擾;而大容量磁盤的價格非常昂貴,對用戶形成很大的負擔。磁盤陣列技術的產生一舉解決了這些問題。

過去十幾年來,CPU的處理速度增加了五十倍有多,內存(memory)的存取速度亦大幅增加,而數據儲存裝置--主要是磁盤(harddisk)--的存取速度只增加了三、四倍,形成電腦系統的瓶頸,拉低了電腦系統的整體性能(throughput),若不能有效的提升磁盤的存取速度,CPU、內存及磁盤間的不平衡將使CPU及內存的改進形成浪費。

目前改進磁盤存取速度的的方式主要有兩種。一是磁盤快取控制(diskcachecontroller),它將從磁盤讀取的數據存在快取內存(cachememory)中以減少磁盤存取的次數,數據的讀寫都在快取內存中進行,大幅增加存取的速度,如要讀取的數據不在快取內存中,或要寫數據到磁盤時,才做磁盤的存取動作。這種方式在單工環境(single-taskingenvioronment)如DOS之下,對大量數據的存取有很好的性能(量小且頻繁的存取則不然),但在多工(multi-tasking)環境之下(因爲要不停的作數據交換(swapping)的動作)或數據庫(database)的存取(因爲每一記錄都很小)就不能顯示其性能。這種方式沒有任何安全保障。

其二是使用磁盤陣列的技術。磁盤陣列是把多個磁盤組成一個陣列,當作單一磁盤使用,它將數據以分段(striping)的方式儲存在不同的磁盤中,存取數據時,陣列中的相關磁盤一起動作,大幅減低數據的存取時間,同時有更佳的空間利用率。磁盤陣列所利用的不同的技術,稱爲RAIDlevel,不同的level針對不同的系統及應用,以解決數據安全的問題。

一般高性能的磁盤陣列都是以硬件的形式來達成,進一步的把磁盤快取控制及磁盤陣列結合在一個控制器(RAIDcontroler或控制卡上,針對不同的用戶解決人們對磁盤輸出入系統的四大要求:

(1)增加存取速度,

(2)容錯(faulttolerance),即安全性

(3)有效的利用磁盤空間;

(4)儘量的平衡CPU,內存及磁盤的性能差異,提高電腦的整體工作性能。

2.磁盤陣列原理

磁盤陣列中針對不同的應用使用的不同技術,稱爲RAIDlevel,RAID是RedundentArrayofInexpensiveDisks的縮寫,而每一level代表一種技術,目前業界公認的標準是RAID0~RAID5。這個level並不代表技術的高低,level5並不高於level3,level1也不低過level4,至於要選擇那一種RAIDlevel的產品,純視用戶的操作環境(operatingenvironment)及應用(application)而定,與level的高低沒有必然的關係。

RAID0及RAID1適用於PC及PC相關的系統如小型的網絡服務器(networkserver)及需要高磁盤容量與快速磁盤存取的工作站等,比較便宜;RAID3及RAID4適用於大型電腦及影像、CAD/CAM等處理;RAID5多用於OLTP,因有金融機構及大型數據處理中心的迫切需要,故使用較多而較有名氣,RAID2較少使用,其他如RAID6,RAID7,乃至RAID10等,都是廠商各做各的,並無一致的標準,在此不作說明。介紹各個RAIDlevel之前,先看看形成磁盤陣列的兩個基本技術:

磁盤延伸(DiskSpanning):

譯爲磁盤延伸,能確切的表示diskspanning這種技術的含義。如圖磁盤陣列控制器,聯接了四個磁盤,這四個磁盤形成一個陣列(array),而磁盤陣列的控制器(RAIDcontroller)是將此四個磁盤視爲單一的磁盤,如DOS環境下的C:盤。這是diskspanning的意義,因爲把小容量的磁盤延伸爲大容量的單一磁盤,用戶不必規劃數據在各磁盤的分佈,而且提高了磁盤空間的使用率。並使磁盤容量幾乎可作無限的延伸;而各個磁盤一起作取存的動作,比單一磁盤更爲快捷。很明顯的,有此陣列的形成而產生RAID的各種技術。

磁盤或數據分段(DiskStripingorDataStriping):

因爲磁盤陣列是將同一陣列的多個磁盤視爲單一的虛擬磁盤(virtualdisk),所以其數據是以分段(blockorsegment)的方式順序存放在磁盤陣列中,數據按需要分段,從第一個磁盤開始放,放到最後一個磁盤再回到第一個磁盤放起,直到數據分佈完畢。至於分段的大小視系統而定,有的系統或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB的,但除非數據小於一個扇區(sector,即521bytes),否則其分段應是512byte的倍數。因爲磁盤的讀寫是以一個扇區爲單位,若數據小於512bytes,系統讀取該扇區後,還要做組合或分組(視讀或寫而定)的動作,浪費時間。從上圖我們可以看出,數據以分段於在不同的磁盤,整個陣列的各個磁盤可同時作讀寫,故數據分段使數據的存取有最好的效率,理論上本來讀一個包含四個分段的數據所需要的時間約=(磁盤的accesstime 數據的tranfertime)X4次,現在只要一次就可以完成。

若以N表示磁盤的數目,R表示讀取,W表示寫入,S表示可使用空間,則數據分段的性能爲:

R:N(可同時讀取所有磁盤)

W:N(可同時寫入所有磁盤)

S:N(可利用所有的磁盤,並有最佳的使用率)

Diskstriping也稱爲RAID0,很多人以爲RAID0沒有甚麼,其實這是非常錯誤的觀念,

因爲RAID0使磁盤的輸出入有最高的效率。而磁盤陣列有更好效率的原因除數據分段外,它可以同時執行多個輸出入的要求,因爲陣列中的每一個磁盤都能獨立動作,分段放在不同的磁盤,不同的磁盤可同時作讀寫,而且能在快取內存及磁盤作並行存取(parallelaccess)的動作,但只有硬件的磁盤陣列纔有此性能表現。

從上面兩點我們可以看出,diskspanning定義了RAID的基本形式,提供了一個便宜、靈活、高性能的系統結構,而diskstriping解決了數據的存取效率和磁盤的利用率問題,RAID1至RAID5是在此基礎上提供磁盤安全的方案。

RAID1

RAID1是使用磁盤鏡像(diskmirroring)的技術。磁盤鏡像應用在RAID1之前就在很多系統中使用,它的方式是在工作磁盤(workingdisk)之外再加一額外的備份磁盤(backupdisk),兩個磁盤所儲存的數據完全一樣,數據寫入工作磁盤的同時亦寫入備份磁盤。磁盤鏡像不見得就是RAID1,如NovellNetware亦有提供磁盤鏡像的功能,但並不表示Netware有了RAID1的功能。一般磁盤鏡像和RAID1有二點最大的不同:

RAID1無工作磁盤和備份磁盤之分,多個磁盤可同時動作而有重疊(overlaping)讀取的功能,甚至不同的鏡像磁盤可同時作寫入的動作,這是一種最佳化的方式,稱爲負載平衡(load-balance)。例如有多個用戶在同一時間要讀取數據,系統能同時驅動互相鏡像的磁盤,同時讀取數據,以減輕系統的負載,增加I/O的性能。

RAID1的磁盤是以磁盤延伸的方式形成陣列,而數據是以數據分段的方式作儲存,因而在讀取時,它幾乎和RAID0有同樣的性能。從RAID的結構就可以很清楚的看出RAID1和一般磁盤鏡像的不同。

下圖爲RAID1,每一筆數據都儲存兩份:

從圖可以看出:

R:N(可同時讀取所有磁盤)

W:N/2(同時寫入磁盤數)

S:N/2(利用率)

讀取數據時可用到所有的磁盤,充分發揮數據分段的優點;寫入數據時,因爲有備份,所以要寫入兩個磁盤,其效率是N/2,磁盤空間的使用率也只有全部磁盤的一半。

很多人以爲RAID1要加一個額外的磁盤,形成浪費而不看好RAID1,事實上磁盤越來越便宜,並不見得造成負擔,況且RAID1有最好的容錯(faulttolerence)能力,其效率也

是除RAID0之外最好的。

在磁盤陣列的技術上,從RAID1到RAID5,不停機的意思表示在工作時如發生磁盤故障,系統能持續工作而不停頓,仍然可作磁盤的存取,正常的讀寫數據;而容錯則表示即使磁

盤故障,數據仍能保持完整,可讓系統存取到正確的數據,而SCSI的磁盤陣列更可在工作中抽換磁盤,並可自動重建故障磁盤的數據。磁盤陣列之所以能做到容錯及不停機,

是因爲它有冗餘的磁盤空間可資利用,這也就是Redundant的意義。

RAID2

RAID2是把數據分散爲位(bit)或塊(block),加入海明碼HammingCode,在磁盤陣列中作間隔寫入(interleaving)到每個磁盤中,而且地址(address)都一樣,也就是在各個磁

盤中,其數據都在相同的磁道(cylinderortrack)及扇區中。RAID2的設計是使用共軸同步(spindlesynchronize)的技術,存取數據時,整個磁盤陣列一起動作,在各作磁

盤的相同位置作平行存取,所以有最好的存取時間(accesstime),其總線(bus)是特別的設計,以大帶寬(bandwide)並行傳輸所存取的數據,所以有最好的傳輸時間(transfer

time)。在大型檔案的存取應用,RAID2有最好的性能,但如果檔案太小,會將其性能拉下來,因爲磁盤的存取是以扇區爲單位,而RAID2的存取是所有磁盤平行動作,而且是作

單位元的存取,故小於一個扇區的數據量會使其性能大打折扣。RAID2是設計給需要連續且大量數據的電腦使用的,如大型電腦(mainframetosupercomputer)、作影像處理

或CAD/CAM的工作站(workstation)等,並不適用於一般的多用戶環境、網絡服務器(networkserver),小型機或PC。

RAID2的安全採用內存陣列(memoryarray)的技術,使用多個額外的磁盤作單位錯誤校正(single-bitcorrection)及雙位錯誤檢測(double-bitdetection);至於需要多少個

額外的磁盤,則視其所採用的方法及結構而定,例如八個數據磁盤的陣列可能需要三個額外的磁盤,有三十二個數據磁盤的高檔陣列可能需要七個額外的磁盤。

RAID3

RAID3的數據儲存及存取方式都和RAID2一樣,但在安全方面以奇偶校驗(paritycheck)取代海明碼做錯誤校正及檢測,所以只需要一個額外的校檢磁盤(paritydisk)。

奇偶校驗值的計算是以各個磁盤的相對應位作XOR的邏輯運算,然後將結果寫入奇偶校驗磁盤,任何數據的修改都要做奇偶校驗計算,如圖:

如某一磁盤故障,換上新的磁盤後,整個磁盤陣列(包括奇偶校驗磁盤)需重新計算一次,將故障磁盤的數據恢復並寫入新磁盤中;如奇偶校驗磁盤故障,則重新計算奇偶校驗值,

以達容錯的要求.

較之RAID1及RAID2,RAID3有85的磁盤空間利用率,其性能比RAID2稍差,因爲要做奇偶校驗計算;共軸同步的平行存取在讀檔案時有很好的性能,但在寫入時較慢,需要

重新計算及修改奇偶校驗磁盤的內容。RAID3和RAID2有同樣的應用方式,適用大檔案及大量數據輸出入的應用,並不適用於PC及網絡服務器。

RAID4

RAID4也使用一個校驗磁盤,但和RAID3不一樣,如圖:

RAID4是以扇區作數據分段,各磁盤相同位置的分段形成一個校驗磁盤分段(parityblock),放在校驗磁盤。這種方式可在不同的磁盤平行執行不同的讀取命今,大幅提高磁

盤陣列的讀取性能;但寫入數據時,因受限於校驗磁盤,同一時間只能作一次,啓動所有磁盤讀取數據形成同一校驗分段的所有數據分段,與要寫入的數據做好校驗計算再寫

入。即使如此,小型檔案的寫入仍然比RAID3要快,因其校驗計算較簡單而非作位(bitlevel)的計算;但校驗磁盤形成RAID4的瓶頸,降低了性能,因有RAID5而使得RAID4

較少使用。

RAID5

RAID5避免了RAID4的瓶頸,方法是不用校驗磁盤而將校驗數據以循環的方式放在每一個磁盤中,如下圖:

磁盤陣列的第一個磁盤分段是校驗值,第二個磁盤至後一個磁盤再折回第一個磁盤的分段是數據,然後第二個磁盤的分段是校驗值,從第三個磁盤再折回第二個磁盤的分段是

數據,以此類推,直到放完爲止。圖中的第一個parityblock是由A0,A1...,B1,B2計算出來,第二個parityblock是由B3,B4,...,C4,D0計算出來,也就是校驗值是由各磁盤

同一位置的分段的數據所計算出來。這種方式能大幅增加小檔案的存取性能,不但可同時讀取,甚至有可能同時執行多個寫入的動作,如可寫入數據到磁盤1而其parity

block在磁盤2,同時寫入數據到磁盤4而其parityblock在磁盤1,這對聯機交易處理(OLTP,On-LineTransactionProcessing)如銀行系統、金融、股市等或大型數據庫的

處理提供了最佳的解決方案(solution),因爲這些應用的每一筆數據量小,磁盤輸出入頻繁而且必須容錯。

事實上RAID5的性能並無如此理想,因爲任何數據的修改,都要把同一parityblock的所有數據讀出來修改後,做完校驗計算再寫回去,也就是RMWcycle(Read-Modify-Write

cycle,這個cycle沒有包括校驗計算);正因爲牽一而動全身,所以:

R:N(可同時讀取所有磁盤)

W:1(可同時寫入磁盤數)

S:N-1(利用率)

RAID5的控制比較複雜,尤其是利用硬件對磁盤陣列的控制,因爲這種方式的應用比其他的RAIDlevel要掌握更多的事情,有更多的輸出入需求,既要速度快,又要處理數據,

計算校驗值,做錯誤校正等,所以價格較高;其應用最好是OLTP,至於用於圖像處理等,不見得有最佳的性能。

2.磁盤陣列的額外容錯功能:SpareorStandbydriver

事實上容錯功能已成爲磁盤陣列最受青睞的特性,爲了加強容錯的功能以及使系統在磁盤故障的情況下能迅速的重建數據,以維持系統的性能,一般的磁盤陣列系統都可使用

熱備份(hotspareorhotstandbydriver)的功能,所謂熱備份是在建立(configure)磁盤陣列系統的時候,將其中一磁盤指定爲後備磁盤,此一磁盤在平常並不操作,但若陣

列中某一磁盤發生故障時,磁盤陣列即以後備磁盤取代故障磁盤,並自動將故障磁盤的數據重建(rebuild)在後備磁盤之上,因爲反應快速,加上快取內存減少了磁盤的存取,

所以數據重建很快即可完成,對系統的性能影響很小。對於要求不停機的大型數據處理中心或控制中心而言,熱備份更是一項重要的功能,因爲可避免晚間或無人值守時發生

磁盤故障所引起的種種不便。

另一個額外的容錯功能是壞扇區轉移(badsectorreassignment)。壞扇區是磁盤故障的主要原因,通常磁盤在讀寫時發生壞扇區的情況即表示此磁盤故障,不能再作讀寫,甚

至有很多系統會因爲不能完成讀寫的動作而死機,但若因爲某一扇區的損壞而使工作不能完成或要更換磁盤,則使得系統性能大打折扣,而系統的維護成本也未免太高了。壞扇

區轉移是當磁盤陣列系統發現磁盤有壞扇區時,以另一空白且無故障的扇區取代該扇區,以延長磁盤的使用壽命,減少壞磁盤的發生率以及系統的維護成本。所以壞扇區轉移功

能使磁盤陣列具有更好的容錯性,同時使整個系統有最好的成本效益比。其他如可外接電池備援磁盤陣列的快取內存,以避免突然斷電時數據尚未寫回磁盤而損失;或在RAID

1時作寫入一致性的檢查等,雖是小技術,但亦不可忽視。

3.硬件磁盤陣列還是軟件磁盤陣列

市面上有所謂硬件磁盤陣列與軟件磁盤陣列之分,因爲軟件磁盤陣列是使用一塊SCSI卡與磁盤連接,一般用戶誤以爲是硬件磁盤陣列。以上所述主要是針對硬件磁盤陣列,

其與軟件磁盤陣列有幾個最大的區別:

l一個完整的磁盤陣列硬件與系統相接。

l內置CPU,與主機並行運作,所有的I/O都在磁盤陣列中完成,減輕主機的工作負載,增加系統整體性能。l有卓越的總線主控(busmastering)及DMA(DirectMemoryAccess)能力,加速數據的存取及傳輸性能。l與快取內存結合在一起,不但增加數據的存取及傳輸性能,更因減少對磁盤的存取而增加磁盤的壽命。l能充份利用硬件的特性,反應快速。

軟件磁盤陣列是一個程序,在主機執行,透過一塊SCSI卡與磁盤相接形成陣列,它最大的優點是便宜,因爲沒有硬件成本(包括研發、生產、維護等),而SCSI卡很便宜(亦有的軟件磁盤陣列使用指定的很貴的SCSI卡);它最大的缺點是使主機多了很多進程(process),增加了主機的負擔,尤其是輸出入需求量大的系統。目前市面上的磁盤陣列系統大部份是硬件磁盤陣列,軟件磁盤陣列較少。

4.磁盤陣列卡還是磁盤陣列控制器

磁盤陣列控制卡一般用於小系統,供單機使用。與主機共用電源,在關閉主機電源時存在丟失Cache中的數據的的危險。磁盤陣列控制卡只有常用總線方式的接口,其驅動程

序與主機、主機所用的操作系統都有關係,有軟、硬件兼容性問題並潛在地增加了系統的不安定因素。在更換磁盤陣列卡時要冒磁盤損壞,資料失落,隨時停機的風險數據恢復

獨立式磁盤陣列控制一般用於較大型系統,可分爲兩種:

單通道磁盤陣列和多通道式磁盤陣列,單通道磁盤陣列只能接一臺主機,有很大的擴充限制。多通道磁盤陣列可接多個系統同時使用,以羣集(cluster)的方式共用磁盤陣

列,這使內接式陣列控制及單接式磁盤陣列無用武之地。目前多數獨立形式的磁盤陣列子系統,其本身與主機系統的硬件及操作環境.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章