溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

raid6磁盤陣列的Q校驗算法是什么

發(fā)布時間:2022-01-17 14:38:26 來源:億速云 閱讀:180 作者:iii 欄目:服務(wù)器

本文小編為大家詳細(xì)介紹“raid6磁盤陣列的Q校驗算法是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“raid6磁盤陣列的Q校驗算法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

   【前言】

    RAID為廉價磁盤冗余陣列(Redundant Array of Inexpensive Disks),RAID技術(shù)將一個個單獨(dú)的磁盤以不同的組合方式形成一個邏輯硬盤,從而提高了磁盤讀取的性能和數(shù)據(jù)的安全性。不同的組合方式用RAID級別來標(biāo)識,常見RAID的級別有0、1、01、10、5、6等等。具體實現(xiàn)的數(shù)據(jù)存儲的原理請參考相關(guān)文章。本章主要概述Linux環(huán)境下RAID 6級別的存儲原理。Linux環(huán)境下配置RAID的命令是“mdadm”。

   【RAID 6概述】

    RAID 6是指帶有兩種分布存儲的奇偶校驗碼(既P和Q)的獨(dú)立硬盤結(jié)構(gòu)。與RAID 5相比,RAID 6增加了第二個獨(dú)立校驗碼(Q)信息塊,兩個獨(dú)立的奇偶校驗系統(tǒng)使用不同的算法,數(shù)據(jù)的可靠性非常高,即使兩塊硬盤同時失效也不會影響數(shù)據(jù)的使用,主要是用于要求數(shù)據(jù)絕對安全的場合。如下圖:

raid6磁盤陣列的Q校驗算法是什么

    上圖中Q為RAID 6的第二個校驗信息塊,采用的是非常復(fù)雜的“伽羅華域”算法,稍后會講到。

   【RAID 6的P校驗概述】

    其實RAID 6的P校驗和RAID 5的校驗是一樣的,都是采用的“異或”運(yùn)算。異或運(yùn)算符的原則就是相同為0,不同為1的。在RAID 5的環(huán)境中只能掉一塊硬盤,但是RAID 6在RAID 5的基礎(chǔ)上添加了Q校驗,因此RAID 6支持同時掉兩塊盤。異或運(yùn)算如下:

       P = A + B + C = A xor B xor C
       A = P - B - C = P xor B xor C

注意:上述的加減法都是異或運(yùn)算。

   【RAID 6的Q校驗概述】

    是“0-255”的一個有限域GF(2^8),在GF(2^8)內(nèi)不管是是加、減、乘、除都不會超過這個范圍。并且,加減法可逆,乘除法可逆,而且計算的值在GF(2^8)內(nèi)是唯一的。注意:此處提到的加、減、乘、除法不是日常使用的加減乘除,而是“伽羅華域”內(nèi)的運(yùn)算。在GF(2^8)中,如果2的n次方大于某個值(本原多項式)就會對該值(本原多項式)取余,結(jié)果又會返回到GF(2^8)中。因此,保證了2^0到2^255的結(jié)果值在GF(2^8)內(nèi)是唯一的。

    在GF(2^8)中一共有16個本原多項式,分別如下:

       1     x8+x7+x6+x5+x4+x2+1              1 1111 0101 = 0x1F5  
       2     x8+x7+x6+x5+x2+x+1               1 1110 0111 = 0x1E7
       3     x8+x7+x6+x3+x2+x+1               1 1100 1111 = 0x1CF
       4     x8+x7+x6+x+1                     1 1100 0011 = 0x1C3
       5     x8+x7+x5+x3+1                    1 1010 1001 = 0x1A9
       6     x8+x7+x3+x2+1                    1 1000 1101 = 0x18D
       7     x8+x7+x2+x+1                     1 1000 0111 = 0x187
       8     x8+x6+x5+x4+1                    1 0111 0001 = 0x171
       9     x8+x6+x5+x3+1                    1 0110 1001 = 0x169
       10    x8+x6+x5+x2+1                    1 0110 0101 = 0x165
       11    x8+x6+x5+x+1                     1 0110 0011 = 0x163
       12    x8+x6+x4+x3+x2+x+1               1 0101 1111 = 0x15F
       13    x8+x6+x3+x2+1                    1 0100 1101 = 0x14D
       14    x8+x5+x3+x2+1                    1 0010 1101 = 0x12D
       15    x8+x5+x3+x+1                     1 0010 1011 = 0x12B
       16    x8+x4+x3+x2+1                    1 0001 1101 = 0x11D

    RAID 6常用的本原多項式為0X11D,既上列中最后一個。Linux 環(huán)境中的RAID 6也是如此。

    好了回到Q校驗上,Q校驗和P校驗結(jié)合正好組成了一個二元一次方程,K1、K2、K3為GF(2^8)中多項式的數(shù)值。

P = A + B + C
Q = A*K1 + B*K2 + C*K3

   【伽羅華域的乘除法運(yùn)算】

    伽羅華域中的加減法也是異或運(yùn)算,所以就不做詳細(xì)解釋了,重點(diǎn)解釋一下乘除法。通過上面的Q校驗知道Q校驗的生成需要伽羅華域中的乘法運(yùn)算,計算乘法運(yùn)算是一件非常復(fù)雜的事情,最好的解決辦法就是將GF(2^8)中所有多項式的值生成表格,通過查表得知乘法運(yùn)算的值。

    1、生成正表GFILOG

    通過下表的方法生成正表GFILOG,注意:此表的本原多項式為0X11D。

raid6磁盤陣列的Q校驗算法是什么

raid6磁盤陣列的Q校驗算法是什么

    2、生成反表GFLOG

    有了正向變換表,要得到逆向表就很簡單了,把正向中的表變換值做為索引,在把正向表中的索引作為值就OK了。如下表:

raid6磁盤陣列的Q校驗算法是什么

    3、計算乘除法運(yùn)算(查表法)

     乘法:A * K1 = GFILOG[(GFLOG[A]+GFLOG[K1]) mod 255];
     除法:A / K1 = GFILOG[(GFLOG[A]-GFLOG[K1]+255) mod 255];

    現(xiàn)在知道了伽羅華域的乘除法,那么我們計算Q校驗就方便了許多。

   【根據(jù)Q校驗生成丟失的數(shù)據(jù)】

    當(dāng)RAID 6中壞掉兩塊磁盤,那該如何生成丟失的數(shù)據(jù)呢?用RAID 6的一個條帶舉例說明。

    1、如果某個條帶中丟失的兩塊數(shù)據(jù)是P和Q,那么正好,數(shù)據(jù)沒有丟失,正常提取即可。

    2、如果某個條帶中丟失的兩塊數(shù)據(jù)是P和A,那么可以根據(jù)Q校驗計算出A的數(shù)據(jù)。

       P = A*K1 + B*K2 + C*K3
       A*K1 = P + B*K2 + C*K3
       A = (P + B*K2 + C*K3)/ K1   //注:K1可以同過查表獲取

    3、如果某個條帶中丟失的兩塊數(shù)據(jù)是Q和A,那么可以根據(jù)校驗P計算出A的數(shù)據(jù)。

       P = A + B + C
       A = P + B + C

    4、如果某個條帶中丟失的兩塊數(shù)據(jù)是A和B,那么可以根據(jù)校驗P和Q計算出A和B的數(shù)據(jù)。

       P = A + B + C
       Q =  A*K1 + B*K2 + C*K3
       A = P + B + C
       Q = (P + B + C)*K1 + B*K2 +C*K3
       Q = P*K1 + B*K1 + C*K1 + B*K2 + C*K3
       Q = P*K1 + C*K1 + C*K3 + B*K1 + B*K2
       Q + P*K1 + C*K1 + C*K3 = (K1+K2) * B
       B = ( Q + P*K1 + C*K1 + C*K3) / (K1+K2)

    計算出B的值以后,再根據(jù)P校驗和計算出A的值就容易很多了。

       A = P + B + C

   【Linux環(huán)境下的RAID 6】

    根據(jù)前的內(nèi)容已經(jīng)知道RAID 6的大致原理了。因為伽羅華域的本原多項式有16種,因此RAID 6的種類有很多,再加上K值的不固定。因此計算某個RAID 6的Q校驗值會變的很復(fù)雜。不過Linux環(huán)境下的RAID 6的K值經(jīng)過測試,其值根據(jù)夠成RAID 6陣列的磁盤數(shù),從本原多項式0X11D的開始?。≧AID 6總磁盤數(shù) -2)個多項式的值作為K的值。

讀到這里,這篇“raid6磁盤陣列的Q校驗算法是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI