RAID的初衷主要是為了大型服務器提供高端的存儲功能和冗余的數據安全。在系統中,RAID被看作是壹個邏輯分區,但是它是由多個硬盤組成的(最少兩塊)。它通過在多個硬盤上同時存儲和讀取數據來大幅提高存儲系統的數據吞吐量(Throughput),而且在很多RAID模式中都有較為完備的相互校驗/恢復的措施,甚至是直接相互的鏡像備份,從而大大提高了RAID系統的容錯度,提高了系統的穩定冗余性,這也是Redundant壹詞的由來。
RAID以前壹直是SCSI領域的獨有產品,因為它當時的技術與成本也限制了其在低端市場的發展。今天,隨著RAID技術的日益成熟與廠商的不斷努力,我們已經能夠享受到相對成本低廉得多的IDE-RAID系統,雖然穩定與可靠性還不可能與SCSI-RAID相比,但它相對於單個硬盤的性能優勢對廣大玩家是壹個不小的誘惑。事實上,對於日常的低強度操作,IDE-RAID已足能勝任了。
與Modem壹樣,RAID也有全軟、半軟半硬與全硬之分,全軟RAID就是指RAID的所有功能都是操作系統(OS)與CPU來完成,沒有第三方的控制/處理(業界稱其為RAID協處理器——RAID Co-Processor)與I/O芯片。這樣,有關RAID的所有任務的處理都由CPU來完成,可想而知這是效率最低的壹種RAID。半軟半硬RAID則主要缺乏自己的I/O處理芯片,所以這方面的工作仍要由CPU與驅動程序來完成。而且,半軟半硬RAID所采用的RAID控制/處理芯片的能力壹般都比較弱,不能支持高的RAID等級。全硬的RAID則全面具備了自己的RAID控制/處理與I/O處理芯片,甚至還有陣列緩沖(Array Buffer),對CPU的占用率以及整體性能是這三種類型中最優勢的,但設備成本也是三種類型中最高的。早期市場上所出現的使用HighPoint HPT 368、370以及PROMISE芯片的IDE RAID卡與集成它們的主板都是半軟半硬的RAID,並不是真正的硬RAID,因為它們沒有自己專用的I/O處理器。而且,這兩個公司的RAID控制/處理芯片的能力較弱,不能完成復雜的處理任務,因此還不支持RAID 5等級。著名的Adpatec公司所出品的AAA-UDMA RAID卡則是全硬RAID的代表之作,其上有專用的高級RAID Co-Processor和Intel 960專用I/O處理器,完全支持RAID 5等級,是目前最高級的IDE-RAID產品。表1 就是典型的軟件RAID與硬RAID在行業應用中的比較。
RAID發展至今***有10個主要的等級,下面我們就將依次介紹
RAID-0等級
Striped Disk Array without Fault Tolerance(沒有容錯設計的條帶磁盤陣列)
圖中壹個圓柱就是壹塊磁盤(以下均是),它們並聯在壹起。從圖中可以看出,RAID 0在存儲數據時由RAID控制器(硬件或軟件)分割成大小相同的數據條,同時寫入陣列中的磁盤。如果發揮壹下想象力,妳會覺得數據象壹條帶子橫跨過所有的陣列磁盤,每個磁盤上的條帶深度則是壹樣的。至於每個條帶的深度則要看所采用的RAID類型,在NT系統的軟RAID 0等級中,每個條帶深度只有64KB壹種選項,而在硬RAID 0等級,可以提供8、16、32、64以及128KB等多種深度參數。Striped是RAID的壹種典型方式,在很多RAID術語解釋中,都把Striped指向RAID 0。在讀取時,也是順序從陣列磁盤中讀取後再由RAID控制器進行組合再傳送給系統,這也是RAID的壹個最重要的特點。
RAID-0結構圖解
這樣,數據就等於並行的寫入和讀取,從而非常有助於提高存儲系統的性能。對於兩個硬盤的RAID 0系統,提高壹倍的讀寫性能可能有些誇張,畢竟要考慮到也同時繒加的數據分割與組合等與RAID相關的操作處理時間,但比單個硬盤提高50%的性能是完全可以的。
不過,RAID 0還不能算是真正的RAID,因為它沒有數據冗余能力。由於沒有備份或校驗恢復設計,在RAID 0陣列中任何壹個硬盤損壞就可導致整個陣列數據的損壞,因為數據都是分布存儲的。
RAID-2等級
Hamming Code ECC(漢明碼錯誤檢測與修正)
現在我們要接觸到RAID系統中最為復雜的等級之壹。RAID 2之所以復雜就是因為它采用了早期的錯誤檢測與修正技術——漢明碼(Hamming Code)校驗技術。因此在介紹RAID 2之前有必要講講漢明碼的原理。
漢明碼的原理:
針對4位數據的漢明碼編碼示意圖
漢明碼是壹個在原有數據中插入若幹校驗碼來進行錯誤檢查和糾正的編碼技術。以典型的4位數據編碼為例,漢明碼將加入3個校驗碼,從而使實際傳輸的數據位達到7個(位),它們的位置如果把上圖中的位置橫過來就是:
數據位
1
2
3
4
5
6
7
代碼
P1
P2
D8
P3
D4
D2
D1
說明
第1個漢明碼
第2個漢明碼
第1個數據碼
第3個漢明碼
第2個數據碼
第3個數據碼
第4個數據碼
註:Dx中的x是2的整數冪(下面的冪都是指整數冪)結果,多少冪取決於碼位,D1是0次冪,D8是3次冪,想想二進制編碼就知道了
現以數據碼1101為例講講漢明碼的編碼原理,此時D8=1、D4=1、D2=0、D1=1,在P1編碼時,先將D8、D4、D1的二進制碼相加,結果為奇數3,漢明碼對奇數結果編碼為1,偶數結果為0,因此P1值為1,D8+D2+D1=2,為偶數,那麽P2值為0,D4+D2+D1=2,為偶數,P3值為0。這樣,參照上文的位置表,漢明碼處理的結果就是1010101。在這個4位數據碼的例子中,我們可以發現每個漢明碼都是以三個數據碼為基準進行編碼的。下面就是它們的對應表:
漢明碼
編碼用的數據碼
P1
D8、D4、D1
P2
D8、D2、D1
P3
D4、D2、D1
從編碼形式上,我們可以發現漢明碼是壹個校驗很嚴謹的編碼方式。在這個例子中,通過對4個數據位的3個位的3次組合檢測來達到具體碼位的校驗與修正目的(不過只允許壹個位出錯,兩個出錯就無法檢查出來了,這從下面的糾錯例子中就能體現出來)。在校驗時則把每個漢明碼與各自對應的數據位值相加,如果結果為偶數(糾錯代碼為0)就是正確,如果為奇數(糾錯代碼為1)則說明當前漢明碼所對應的三個數據位中有錯誤,此時再通過其他兩個漢明碼各自的運算來確定具體是哪個位出了問題。
還是剛才的1101的例子,正確的編碼應該是1010101,如果第三個數據位在傳輸途中因幹擾而變成了1,就成了1010111。檢測時,P1+D8+D4+D1的結果是偶數4,第壹位糾錯代碼為0,正確。P1+D8+D2+D1的結果是奇數3,第二位糾錯代碼為1,有錯誤。P3+D4+D2+D1的結果是奇數3,第三但糾錯代碼代碼為1,有錯誤。那麽具體是哪個位有錯誤呢?三個糾錯代碼從高到低排列為二進制編碼110,換算成十進制就是6,也就是說第6位數據錯了,而數據第三位在漢明碼編碼後的位置正好是第6位。
那麽漢明碼的數量與數據位的數量之間有何比例呢?上面的例子中數據位是4位,加上3位漢明碼是7位,而2的3次冪是8。這其中就存在壹個規律,即2P≥P+D+1,其中P代表漢明碼的個數,D代表數據位的個數,比如4位數據,加上1就是5,而能大於5的2的冪數就是3(23=8,22=4)。這樣,我們就能算出任何數據位時所需要的漢明碼位數:7位數據時需要4位漢明碼(24>4+7+1),64位數據時就需要7位漢明碼(27>64+7+1),大家可以依此推算。此時,它們的編碼規也與4位時不壹樣了。
另外,漢明碼加插的位置也是有規律的。以四位數據為例,第壹個是漢明碼是第壹位,第二個是第二位,第三個是第四位,1、2、4都是2的整數冪結果,而這個冪次數是從0開始的整數。這樣我們可以推斷出來,漢明碼的插入位置為1(20)、2(21)、4(22)、8(23)、16(24)、32(25)……