工作原理
RAID 2是為大型機和超級計算機開發的帶漢明碼校驗磁碟陣列。它是將數據條帶化地分布於不同的硬碟上,條塊單位為位或者位元組,並使用“加重平均糾錯碼”的編碼技術來提供錯誤檢查及恢復,這種糾錯碼也被稱為“海明碼”。海明碼需要多個磁碟存放檢查及恢覆信息,使得RAID2技術實施更複雜,因此在商業環境中很少使用。
海明碼在磁碟陳列中被間隔寫入到磁碟上,而且地址都一樣,也就是在各個磁碟中,其數據都在相同的磁軌及扇區中。
RAID2的設計是使用共軸同步的技術,存取數據時整個磁碟陳列一起工作,在各個磁碟的相同位置做平行存取,所以有最短的存取時間,其匯流排是特別的設計,以大頻寬並行傳輸所存取的數據。在大型檔案的存取套用中,RAID2有最好的性能,但是如果檔案太小,將會影響其性能,因為磁碟的存取是以扇區為單位,而RAID2的存取是所以磁碟平行動作,而且是進行位的存取,所以小於一個扇區的數據量會使其性能大打折扣。
RAID2是設計給需要連續存取大量數據的計算機使用的,如進行影像處理或者CAD/CAM的工作站等,並不適用於一般的多用戶環境、網路伺服器和PC。
漢明碼原理
漢明碼是一個在原有數據中插入若干校驗碼來進行錯誤檢查和糾正的編碼技術。以典型的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。這其中就存在一個規律,即2≥P+D+1,其中P代表漢明碼的個數,D代表數據位的個數,比如4位數據,加上1就是5,而能大於5的2的冪數就是3(2=8,2=4)。這樣,我們就能算出任何數據位時所需要的漢明碼位數:7位數據時需要4位漢明碼(2>4+7+1),64位數據時就需要7位漢明碼(2>64+7+1),大家可以依此推算。此時,它們的編碼規也與4位時不一樣了。
另外,漢明碼加插的位置也是有規律的。以四位數據為例,第一個是漢明碼是第一位,第二個是第二位,第三個是第四位,1、2、4都是2的整數冪結果,而這個冪次數是從0開始的整數。這樣我們可以推斷出來,漢明碼的插入位置為1(2)、2(2)、4(2)、8(2)、16(2)、32(2)……
優缺點
在寫入時,RAID 2在寫入數據位同時還要計算出它們的漢明碼並寫入校驗陣列,讀取時也要對數據即時地進行校驗,最後再發向系統。通過上文的介紹,我們知道漢明碼只能糾正一個位的錯誤,所以RAID 2也只能允許一個硬碟出問題,如果兩個或以上的硬碟出問題,RAID 2的數據就將受到破壞。但由於數據是以位為單位並行傳輸,所以傳輸率也相當快。
RAID 2是早期為了能進行即時的數據校驗而研製的一種技術(這在當時的RAID 0、1等級中是無法做到的),從它的設計上看也是主要為了即時校驗以保證數據安全,針對了當時對數據即時安全性非常敏感的領域,如伺服器、金融服務等。但由於花費太大(其實,從上面的分析中可以看出如果數據位寬越大,用於校驗陣列的相對投資就會越小,就如上面的4:3與64:7),成本昂貴,目前已基本不再使用,轉而以更高級的即時檢驗RAID所代替,如RAID 3、5等。