RAID 6磁盤組有很多值得學習的地方,這里我們主要介紹RAID 6磁盤組,包括介紹RAID 6和Reed-Solomon編碼等方面。既然是講原理,那些“為什么需要RAID 6磁盤組”、“RAID 6的優勢”等內容就都省去了。直接進入枯燥無趣的理論。
一.RAID 5和XOR運算
為了照顧初學者,還是先把相關基本概念介紹一下,老手可以跳過這部分直接看下面。(別低頭!是看本帖下面,想些什么吶~)XOR運算是數理邏輯的基本運算之一,在課本上的符號是一個圓圈里面一個加號。實在懶得用插入符號功能,大家就湊合著看吧。
兩個數字之間的XOR運算定義是:
1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0
(忽然想起試行新車牌的時候,有些深圳人用三位二進制數標記性別。010是男的,101是女的。Sorry,扯遠了。)
多個數字XOR的時候,有兩個特點:
A)結果與運算順序無關。也就是 (a XOR b) XOR c = a XOR (b XOR c)。
B)各個參與運算的數字與結果循環對稱。如果 a XOR b XOR c = d,那么a = b XOR c XOR d;b = a XOR c XOR d;c = a XOR b XOR d。
磁盤陣列中的RAID 5之所以能夠容錯,就是利用了XOR運算的這些特點。上面例子中的a、b、c、d就可以看作是四顆磁盤上的數據,其中三個是應用數據,剩下一個是校驗。碰到故障的時候,甭管哪個找不到了,都可以用剩下的三個數字XOR一下算出來。
在實際應用中,陣列控制器一般要先把磁盤分成很多條帶(英文叫Stripe,注意不是Stripper),然后再對每組條帶做XOR。
P1 = 數據a XOR 數據b XOR 數據c
P2 = 數據d XOR 數據e XOR 數據f
P3 = 數據g XOR 數據h XOR 數據i
P4 = 數據j XOR 數據k XOR 數據l
掃盲部分就講這么多,再不懂就google吧,滿山遍野都是RAID 5算法的介紹。
二.RAID 6和Reed-Solomon編碼
本來想寫成“李德-所羅門編碼”,但那樣就不方便大家一邊看帖子一邊google了。Reed-Solomon編碼是通訊領域中經常碰到的一個算法,已經有15年以上的歷史了。(靠!講存儲嘛,跟通訊有個鳥關系?)其實很多校驗算法都是通訊領域最先研究出來,然后才應用到其他領域的。前面說到的XOR算法對一組數據只能產生一個校驗,搞通訊的工程師們覺得不夠可靠,于是就研究出很多能對一組數據產生多個校驗的算法。Reed-Solomon編碼是其中應用最廣泛的一個,咱們以前經常用的ADSL、xDSL、高速 Modem都有采用。后來手機、衛星電視、數字電視、CD唱片、DVD、條碼系統、還有……(有完沒完!說存儲呢!)連高級點兒的服務器內存也用這個算法做校驗和糾錯。(總算跟存儲沾上點兒邊~)
現在存儲的工程師也覺得RAID 5中只能容忍一顆磁盤離線不夠理想,需要一種容忍多顆磁盤離線的技術,自然就會想到Reed-Solomon編碼啦。把這種算法應用到存儲中,就可以讓N顆磁盤的空間裝應用數據,M顆磁盤的空間裝校驗碼(對一組N個數據生成M個校驗,但實際上校驗碼是分散在所有磁盤上的),這樣只要離線的磁盤不大于M顆,數據就不會丟失。
Reed-Solomon編碼理論中有一個公式:N + M + 1 = 2的b次方(在電腦里寫公式真是麻煩!)其中b是校驗字的位數。(校驗字是生成校驗過程需要用的一個東東,不是最后的校驗碼。)舉例來說,如果用8位的字節做校驗字,那么M + N = 255,而RAID 6是特指M = 2,這樣N = 253。就是說,用8位字節做校驗字的話,理論上一個RAID 6磁盤組可以容下253顆磁盤。當然啦,實際應用中,太多的磁盤一起做運算會嚴重影響性能,所以陣列控制器和芯片的設計者都會把磁盤組的容量限制在16顆左右。(做了這么多無聊算術題,還是沒提RAID 6到底是啥!)
三.RAID 6磁盤組實現
RAID 6這個概念所指的意義太混亂。從功能上講,能實現兩顆磁盤掉線容錯的,都叫RAID 6。(至少我認識的銷售們都這么認為。)但是實行這一功能的方式卻有很多很多。Intel的P+Q RAID 6,NetApp的RAID-DP,HP的RAID 5-DP,還要很多實驗室中的原型機都能實行這個功能。但是由于機制不同,各種所謂的RAID 6,其性能表現、磁盤負載分布、錯誤恢復方式都完全不同。你讓我從哪說起好哩?