專利名稱::磁盤陣列容錯處理方法和裝置及容錯系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)存儲
技術(shù)領(lǐng)域:
,具體涉及一種磁盤陣列容錯處理方法和裝置及容錯系統(tǒng)。
背景技術(shù):
:隨著網(wǎng)絡(luò)的發(fā)展和計算機(jī)的普及應(yīng)用,人們對存儲系統(tǒng)的性能要求越來越高,尤其是在關(guān)鍵事務(wù)的應(yīng)用。廉價冗余磁盤陣列(RAID,RedundantArrayofInd印endentDisks)采用分條和冗余的方法提高了存儲系統(tǒng)的容量、速度和可靠性,已成為高性能數(shù)據(jù)存儲的首選結(jié)構(gòu)。目前的大多數(shù)存儲系統(tǒng)被設(shè)計成能容忍單磁盤故障,但隨著磁盤陣列規(guī)模和磁盤容量不斷的增大、以及關(guān)聯(lián)因素的影響,短時間內(nèi)發(fā)生多個磁盤故障的概率大大增加了,使得在很多情況下單磁盤故障容錯已經(jīng)不能滿足實際的需要,于是業(yè)界提出的多磁盤容錯的思想。例如現(xiàn)有的RAID6是一種雙校驗?zāi)J降碾p磁盤容錯機(jī)制,與其它級別的RAID相比,RAID6增加兩個獨立的錯誤校驗區(qū)塊(PB,ParityBlock),即校驗塊P和校驗塊Q,又稱為P+Q編碼。RAID6是利用不同的校驗算法對相同的用戶數(shù)據(jù)進(jìn)行雙重保護(hù),每個分條包含兩個校驗單元P校驗單元和Q校驗單元,其中,P校驗單元采用奇偶校驗碼,Q校驗單元采用Reed-Solomon等其它校驗碼。當(dāng)出現(xiàn)單盤故障時,P+QRAID轉(zhuǎn)變?yōu)镹+l奇偶校驗的RAID5;當(dāng)出現(xiàn)雙盤故障時,P+QRAID轉(zhuǎn)變?yōu)闊o容錯能力的RAID0。在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn),在利用例如RAID6實現(xiàn)雙磁盤容錯的過程中,無論是寫數(shù)據(jù)塊、更新校驗塊Q、還是雙磁盤出錯的情況下進(jìn)行數(shù)據(jù)恢復(fù),都需要進(jìn)行伽羅瓦域(GaloisField)變換,而伽羅瓦域變換需要進(jìn)行復(fù)雜的乘加運算,計算復(fù)雜度非常的高。磁盤陣列的寫性能降低和復(fù)雜昂貴的實施代價使得RAID6在實際應(yīng)用中難以實施。
發(fā)明內(nèi)容本發(fā)明實施例提供一種磁盤陣列容錯處理方法和裝置及容錯系統(tǒng),能夠相對有效的降低磁盤容錯的計算復(fù)雜度,提高可實施性。為解決上述技術(shù)問題,本發(fā)明實施例提供以下技術(shù)方案—種磁盤陣列容錯處理方法,包括讀取磁盤陣列存儲的第一水平校驗分組的p個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和p個數(shù)據(jù)塊,p為正整數(shù);其中,通過將讀取的第一水平校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一水平校驗塊;讀取磁盤陣列存儲的第一斜向校驗分組的p個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊;其中,通過將第一水平校驗塊和讀取的第一斜向校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一斜向校驗塊;將獲得的所述第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元?!N容錯處理裝置,包括第一讀取模塊,用于讀取磁盤陣列存儲的第一水平校驗分組的p個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和P個數(shù)據(jù)塊,P為正整數(shù);第一運算模塊,用于通過將讀取的第一水平校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算,獲得所述第一水平校驗塊;第二讀取模塊,用于讀取磁盤陣列存儲的第一斜向校驗分組的p個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊;第二運算模塊,用于通過將第一水平校驗塊和讀取的第一斜向校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算,獲得所述第一斜向校驗塊;第一寫入模塊,用于將獲得的第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。—種容錯系統(tǒng),包括磁盤陣列和容錯處理裝置,其中,所述容錯處理裝置,用于讀取磁盤陣列存儲的第一水平校驗分組的p個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和P個數(shù)據(jù)塊,P為正整數(shù);其中,通過將讀取的第一水平校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一水平校驗塊;讀取磁盤陣列存儲的第一斜向校驗分組的P個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊;其中,通過將第一水平校驗塊和讀取的第一斜向校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一斜向校驗塊;將獲得的所述第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。由上可見,本發(fā)明實施例中,通過對數(shù)據(jù)塊進(jìn)行水平容錯編碼和斜向容錯編碼,可以實現(xiàn)磁盤陣列的雙磁盤容錯,較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例中無需進(jìn)行伽羅瓦域變換,可以極大的簡化容錯編碼和故障恢復(fù)的計算復(fù)雜度;且具有很低的數(shù)據(jù)塊更新代價。為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1-a是本發(fā)明實施例提供的圖1-b是本發(fā)明實施例提供的圖2是本發(fā)明實施例一提供的圖3是本發(fā)明實施例二提供的圖4是本發(fā)明實施例三提供的圖5是本發(fā)明實施例四提供的圖6_a是本發(fā)明實施例五提供的一種磁盤故障恢復(fù)的方法流程圖6_b是本發(fā)明實施例五提供的一種數(shù)據(jù)塊恢復(fù)的路徑示意種數(shù)據(jù)塊與復(fù)數(shù)平面的映射關(guān)系示意圖;種磁盤陣列容錯處理的方法流程圖;種磁盤故障恢復(fù)的方法流程圖;種磁盤故障恢復(fù)的方法流程圖;種磁盤故障恢復(fù)的方法流程圖;種磁盤故障恢復(fù)的方法流程圖7是本發(fā)明實施例六提供的一種磁盤故障恢復(fù)的方法流程圖;圖8是本發(fā)明實施例八提供的一種數(shù)據(jù)塊更新的方法流程圖;圖9_a是本發(fā)明實施例九提供的一種容錯處理裝置示意圖;圖9_b是本發(fā)明實施例九提供的另一種容錯處理裝置示意圖;圖9-C是本發(fā)明實施例九提供的另一種容錯處理裝置示意圖;圖10是本發(fā)明實施例十提供的一種數(shù)據(jù)塊恢復(fù)裝置示意圖;圖11是本發(fā)明實施例十一提供的一種數(shù)據(jù)塊更新裝置示意圖;圖12是本發(fā)明實施例十二提供的一種容錯系統(tǒng)示意圖。具體實施例方式本發(fā)明實施例提供一種磁盤陣列容錯處理方法和裝置及容錯系統(tǒng),能夠相對有效的降低磁盤容錯的計算復(fù)雜度,提高可實施性。為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而非全部實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍?!愣?,衡量多磁盤容錯方法的指標(biāo)主要有更新復(fù)雜度、計算復(fù)雜度、磁盤空間冗余度、負(fù)載均衡性和磁盤個數(shù)的適應(yīng)性等。其中,更新復(fù)雜度是衡量多磁盤容錯方法的首要指標(biāo),指的是更新一個磁盤數(shù)據(jù)塊時需要進(jìn)行磁盤操作的次數(shù),更新復(fù)雜度越高磁盤陣列的寫性能就越低;計算復(fù)雜度指的是根據(jù)磁盤數(shù)據(jù)塊計算校驗塊、以及根據(jù)校驗塊恢復(fù)數(shù)據(jù)塊的實現(xiàn)代價,是衡量多磁盤容錯方法的重要指標(biāo),計算復(fù)雜度越高實現(xiàn)代價越大,在實際應(yīng)用中實施的可能性越低;磁盤空間冗余度是指校驗塊占總磁盤空間的比率,冗余度越低,磁盤空間的有效數(shù)據(jù)利用率就越高;負(fù)載均衡是指在數(shù)據(jù)寫入、數(shù)據(jù)讀出、數(shù)據(jù)重建過程中各個磁盤的負(fù)載要盡量相同,避免產(chǎn)生系統(tǒng)瓶頸,使用負(fù)載均衡的多磁盤容錯方法能夠提高多磁盤容錯系統(tǒng)效率;磁盤個數(shù)的適應(yīng)性是指多磁盤容錯方法能夠適應(yīng)不同磁盤個數(shù)的磁盤陣列的適應(yīng)能力,良好的適應(yīng)性能夠適應(yīng)任意磁盤個數(shù)的磁盤陣列,較差的適應(yīng)性只能適應(yīng)特定要求的磁盤個數(shù)的磁盤陣列,磁盤個數(shù)的適應(yīng)性也決定著多磁盤容錯方法的實用性。本發(fā)明實施例的技術(shù)方案充分的考慮到了以上因素。下面通過具體實施例進(jìn)行詳細(xì)的介紹。首先說明的是,本發(fā)明實施例中,為便于描述,引入容錯編碼矩陣M(以下簡稱矩陣M),其中,將磁盤陣列(p-l)Xp個存儲單元存儲的數(shù)據(jù)塊映射為矩陣M中的(p-l)Xp個矩陣元素。其中,本發(fā)明實施例中提及的磁盤陣列可以為廉價冗余磁盤陣列,當(dāng)然也可以是其它結(jié)構(gòu)和工作方式類似的磁盤陣列。下面以基于矩陣M對磁盤陣列存儲的(p-l)Xp個數(shù)據(jù)塊進(jìn)行容錯編碼為例,進(jìn)行詳細(xì)說明。在實際應(yīng)用中,矩陣M可以包括p列數(shù)據(jù)塊和2列校驗塊,即包括pX(p+2)個矩陣元素(以下可簡稱元素)。其中,矩陣M的前p列為數(shù)據(jù)塊列(簡稱數(shù)據(jù)列),后兩列為校驗塊列(簡稱校驗列);矩陣M的第O行設(shè)為虛擬行,引入虛擬行是為了簡化容錯計算,虛擬行的數(shù)據(jù)塊可以全為0;即矩陣M的前p列的第l至p-l行的數(shù)據(jù)塊為磁盤陣列(p-l)Xp個存儲單元存儲的數(shù)據(jù)塊。其中,為便于表述,下面用C(i,j)表示矩陣M中第i行第j列的元素,用S(i,j)表示磁盤陣列中存儲矩陣M第i行第j列的元素C(i,j)的存儲單元。進(jìn)一步的,若C(i,j)為數(shù)據(jù)i央,則以下也可以用D(i,j)表示;若C(i,j)為校驗i央,則以下也可以用P(i,j)表示。其中,校驗塊是指用于對數(shù)據(jù)塊進(jìn)行校驗的校驗數(shù)據(jù)。在一種應(yīng)用場景下,為實現(xiàn)磁盤陣列的多磁盤容錯,矩陣M每l列的數(shù)據(jù)塊可以是分別存儲于不同的磁盤上的,其中,磁盤陣列某一磁盤故障也就關(guān)聯(lián)到矩陣M對應(yīng)數(shù)據(jù)列的數(shù)據(jù)塊損毀。為便于理解,下面以將磁盤陣列(5-1)X5個存儲單元存儲的數(shù)據(jù)塊映射為矩陣M中的(5-1)Xp個元素為例,此時,矩陣M包括5X(5+2)個矩陣元素,具體可以如表1所示,但不局限于此表1<table>tableseeoriginaldocumentpage8</column></row><table>在表1所示的矩陣M中,第0至4列為數(shù)據(jù)列,第5至6列為校驗列,第0行為虛擬行,第1至4列為非虛擬行。其中,矩陣M前5列的第1至4行的數(shù)據(jù)塊為磁盤陣列(5-1)X5個存儲單元存儲的數(shù)據(jù)塊。例如C(l,O)表示表1所示矩陣M中第1行第0列的元素,由于C(l,O)為數(shù)據(jù)塊,因而也可以用D(l,O)表示;C(1,5)表示表l所示矩陣M中第1行第5列的元素,由于C(l,5)為校驗塊,因而也可以用P(l,5)表示,以此類推。為便于直觀,還可以將矩陣M的數(shù)據(jù)塊映射為復(fù)數(shù)平面上的點,具體映射方法可以是將同一列的數(shù)據(jù)塊映射到一個同心圓上,同一行的數(shù)據(jù)塊映射到不同半徑同心圓的同一徑向上。例如矩陣M包括5X5個數(shù)據(jù)塊(其中包括五個虛擬行的數(shù)據(jù)塊),該5X5個數(shù)據(jù)塊與復(fù)數(shù)平面的映射關(guān)系可以如圖卜a所示。其中,復(fù)數(shù)平面的5個同心圓依次代表矩陣M的第0、1、2、3、4列的數(shù)據(jù)塊,矩陣M各行的數(shù)據(jù)塊分別映射到5個同心圓的同一徑向上。本發(fā)明實施例中,矩陣M包括兩列校驗列中,其中1列的校驗塊用于實現(xiàn)數(shù)據(jù)塊的水平校驗,因此可稱為水平校驗塊;其中1列的校驗塊用于實現(xiàn)數(shù)據(jù)塊的斜向校驗,因此可稱為斜向校驗塊。為引述方便,下面將矩陣M中包括水平校驗塊的校驗列稱為水平校驗列,將矩陣M中包括斜向校驗塊的校驗列稱為斜向校驗列。下面,以矩陣M的第p列為水平校驗列,第p+1列為斜向校驗列為例,進(jìn)行具體說明,當(dāng)然也不局限于此。矩陣M的一個校驗分組中包括參與校驗運算的校驗塊和p個數(shù)據(jù)塊,為描述方便,參與水平校驗的校驗分組可以稱為水平校驗分組,其中,一個水平校驗分組包括矩陣M的同一行的P個數(shù)據(jù)塊和一個水平校驗塊;參與斜向校驗的校驗分組可以稱為斜向校驗分組,其中,一個斜向校驗分組包括矩陣M的不同行的p個數(shù)據(jù)塊、一個水平校驗塊和一個斜向校驗塊。在一種應(yīng)用場景下,利用矩陣M前P列的數(shù)據(jù)塊可以編碼生成后兩列的校驗塊。其中,容錯編碼方法為分別以矩陣M第0列各行上數(shù)據(jù)塊n(l《n《p-l)為固定點,首先可在(p-l)Xp矩陣(矩陣M的子矩陣,即矩陣M前P列的第l至p-l行)中以斜率為0的方向進(jìn)行異或校驗,不旋轉(zhuǎn)徑向而直接校驗,生成的校驗塊依次為矩陣M第p列的p-1個元素,然后在pX(p+l)矩陣(矩陣M的子矩陣,可以是矩陣M前P+I列的第0至p-1行)中以斜率為負(fù)1的方向(或以其它斜率不為0的方向)進(jìn)行異或校驗,即順時針旋轉(zhuǎn)一次后的徑向校驗,生成的校驗塊依次為矩陣M第p+l列的p-l個元素。上述容錯編碼方法的代數(shù)描述可以如下在包括任意整數(shù)p列數(shù)據(jù)塊和2列校驗塊的矩陣M中,對應(yīng)第P列(水平校驗列)的各個校驗塊的容錯編碼如下<formula>formulaseeoriginaldocumentpage9</formula>第P+l列(斜向校驗列)的各個校驗塊的容錯編碼策略如下<formula>formulaseeoriginaldocumentpage9</formula>其中,公式2中的(i+nk)p表示對(i+nXk)取p的模,n為旋轉(zhuǎn)系數(shù),其中n可以是正整數(shù)或負(fù)整數(shù)。為簡化容錯計算過程,本發(fā)明實施例以旋轉(zhuǎn)系數(shù)n二l為例進(jìn)行說明。當(dāng)旋轉(zhuǎn)系數(shù)n=1時,斜向校驗列的各個校驗塊生成策略如下按照如公式l所示的容錯編碼策略,利用矩陣M每行的所有數(shù)據(jù)塊,可以簡單的生成與各行數(shù)據(jù)塊分別對應(yīng)的P-l個水平校驗塊;按照如公式3所示的容錯編碼策略,可以簡單的生成P-l個斜向校驗塊,并將生成的各個校驗塊寫入磁盤陣列的對應(yīng)存儲單元。其中,各個校驗塊寫入到磁盤陣列的存儲單元的位置可以是默認(rèn)的,或者也可以是根據(jù)預(yù)置的寫入策略計算獲得的。當(dāng)磁盤陣列中存儲矩陣M數(shù)據(jù)塊的一個或多個磁盤故障時,便可利用磁盤陣列中存儲的相應(yīng)校驗塊,恢復(fù)故障磁盤上被損毀的數(shù)據(jù)塊。進(jìn)一步的,為盡可能的提高磁盤陣列的磁盤空間冗余度,矩陣M的數(shù)據(jù)塊的列數(shù)p>3。參見圖l-b,本發(fā)明實施例提供一種磁盤陣列容錯處理方法,可以包括110、讀取磁盤陣列存儲的第一水平校驗分組的p個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和P個數(shù)據(jù)塊,P為正整數(shù);在一種應(yīng)用場景下,可以先獲取第一水平校驗分組的p個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,其中,第一水平校驗分組的p個數(shù)據(jù)塊Ci,k的行號為i,列號k的取值分別為0到p-l的p個整數(shù);然后再根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一水平校驗分組的P個數(shù)據(jù)塊。120、通過將讀取的第一水平校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得上述第一水平校驗塊;在一種應(yīng)用場景下,利用公式1獲得第一水平校驗塊。130、讀取磁盤陣列存儲的第一斜向校驗分組的p個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊;在一種應(yīng)用場景下,可以先獲取第一斜向校驗分組的p個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,其中,第一斜向校驗分組的p個數(shù)據(jù)塊CG+"^)pj的列號k的取值分別為0到p-l的p個整數(shù),行號為(i+nk)p,旋轉(zhuǎn)系數(shù)n可為正整數(shù)或負(fù)整數(shù);然后根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一斜向校驗分組的p個數(shù)據(jù)塊。140、通過將第一水平校驗塊和讀取的第一斜向校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得上述第一斜向校驗塊。在一種應(yīng)用場景下,利用公式2獲得第一水平校驗塊。150、將獲得的上述第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。由上可見,通過對數(shù)據(jù)塊進(jìn)行水平容錯編碼和斜向容錯編碼,可以實現(xiàn)磁盤陣列的雙磁盤容錯,較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例中無需進(jìn)行伽羅瓦域變換,可以極大的簡化容錯編碼和故障恢復(fù)的計算復(fù)雜度;且具有很低的數(shù)據(jù)塊更新代價。為便于理解,下面以如表1所示的矩陣M為例進(jìn)行說明,其中,矩陣M第p列的校驗塊基于公式1來生成、矩陣M第p+1列的校驗塊基于公式3來生成。其中,基于公式l所示的容錯編碼策略,生成的矩陣M第P列的各個校驗塊可以如下C(l,5)=C(l,O)C(l,l)C(l,2)@C(l,3)C(l,4)C(2,5)=C(2,0)C(2,l)C(2,2)C(2,3)C(2,4)C(3,5)=C(3,0)C(3,l)C(3,2)C(3,3)@C(3,4)C(4,5)=C(4,0)C(4,l)C(4,2)C(4,3)C(4,4)其中,基于公式3所示的容錯編碼策略,生成的矩陣M第p+1列的各個校驗塊可以如下C(1,6)=C(1,0)C(2,l)@C(3,2)C(4,3)@C(0,4)C(l,5)C(2,6)=C(2,0)C(3,l)C(4,2)C(0,3)C(l,4)C(2,5)C(3,6)=C(3,0)C(4,l)C(0,2)@C(l,3)十C(2,4)C(3,5)C(4,6)=C(4,0)C(O,l)④C(l,2)C(2,3)C(3,4)C(4,5)基于公式1和公式3的容錯編碼策略,在如圖1所示的矩陣M中,例如第1行的數(shù)據(jù)塊C(l,O)、C(l,1)、C(l,2)、C(l,3)、C(l,4)和水平校驗塊C(l,5)歸屬于同一個水平校驗分組;數(shù)據(jù)塊C(1,0)、C(2,1)、C(3,2)、C(4,3)、C(0,4)、以及水平校驗塊C(1,5)和斜向校驗塊C(1,6)歸屬于同一個斜向校驗分組,以此類推。將生成的水平校驗塊C(1,5)、C(2,5)、C(3,5)、C(4,5),以及斜向校驗塊C(1,6)、C(2,6)、C(3,6)、C(4,6)寫入磁盤陣列的對應(yīng)存儲單元。其中,虛擬行(第0行)的校驗塊可以不寫入磁盤陣列中。進(jìn)一步的,為降低故障風(fēng)險,歸屬同一校驗分組的各個數(shù)據(jù)塊和校驗塊可以存儲在不同的磁盤(或不同的扇區(qū))中,以降低同時被損毀的幾率。例如,若1個斜向校驗分組包括6個數(shù)據(jù)塊、1個水平校驗塊和1個斜向校驗塊,此時,可以利用8(6+1+1)個磁盤分別存儲6個數(shù)據(jù)塊和2個校驗塊。當(dāng)存儲6個數(shù)據(jù)塊的6個磁盤中的1個或2個磁盤故障時,利用剩余的幾個磁盤存儲的數(shù)據(jù)塊或校驗塊便可以簡單快速的恢復(fù)出損毀的數(shù)據(jù)塊;當(dāng)存儲2個校驗塊的兩個磁盤中的l個或2個磁盤故障時,按照公式1和公式3所示的容錯編碼策略也可以簡單的恢復(fù)出損毀的校驗塊。可見,采用本發(fā)明實施例的磁盤容錯編碼方法,通過對數(shù)據(jù)塊進(jìn)行水平容錯編碼和斜向容錯編碼,可以實現(xiàn)磁盤陣列的雙磁盤容錯,較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例的方案無需進(jìn)行伽羅瓦域變換,可以極大的簡化容錯編碼和故障恢復(fù)的計算復(fù)雜度。進(jìn)一步的,水平校驗塊也參與斜向校驗塊的容錯編碼,編碼力度相對較強(qiáng),容錯能力得到進(jìn)一步的提高。進(jìn)一步的,本發(fā)明實施例還提供一種基于上述容錯編碼方法的數(shù)據(jù)塊恢復(fù)的方法,可以包括根據(jù)待恢復(fù)的第一數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,確定第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,上述容錯編碼矩陣M包括p列數(shù)據(jù)塊和兩列校驗塊;根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊;將讀取出的數(shù)據(jù)塊和校驗塊進(jìn)行異或運算,獲得第一數(shù)據(jù)塊;將獲得的第一數(shù)據(jù)塊寫入磁盤陣列的對應(yīng)存儲單元?;谏鲜鋈蒎e編碼方法和不同的磁盤故障情況,本發(fā)明實施例提供不同的數(shù)據(jù)恢復(fù)方案。其中,本發(fā)明實施例一至三分別針對存儲矩陣M的單列矩陣元素的磁盤故障的恢復(fù);本發(fā)明實施例四至七分別針對存儲矩陣M的兩列矩陣元素的磁盤同時故障的恢復(fù)。實施例一、本實施例主要針對磁盤陣列中存儲矩陣M的單列數(shù)據(jù)塊的磁盤故障的恢復(fù)流程,其中,下面以損毀的數(shù)據(jù)塊為D(i,j)為例。參見圖2,本發(fā)明實施例一的一種磁盤故障恢復(fù)的方法,可以包括201、確定D(i,j)所屬斜向校驗分組中的斜向校驗塊在矩陣M中的行號y。在實際應(yīng)用中,確定行號y的方式可以是y二(i+(p-j))^p,當(dāng)然也可以采用其它數(shù)學(xué)方式來確定行號y,本發(fā)明不做限定。其中,斜向校驗塊位于矩陣M的斜向校驗列(第p+l列)上。202、讀取斜向校驗塊P(y,p+l)和水平校驗塊P(y,p)。其中,水平校驗塊P(y,p)和斜向校驗塊P(y,p+l)是歸屬于同一個斜向校驗分組的,且水平校驗塊P(y,P)和斜向校驗塊P(y,p+l)位于矩陣M的同一行上。在具體實現(xiàn)時,可以從磁盤陣列存儲斜向校驗塊P(y,p+l)和水平校驗塊P(y,p)的存儲單元,讀取斜向校驗塊P(y,P+l)和水平校驗塊P(y,P)。203、讀取斜向校驗塊P(y,p+l)所屬斜向校驗分組中除D(i,j)外的其它數(shù)據(jù)塊。其中,可以從磁盤陣列的相應(yīng)存儲單元,讀取斜向校驗塊P(y,p+l)所屬斜向校驗分組中除D(i,j)外的其它數(shù)據(jù)塊。204、將讀取出的所有數(shù)據(jù)塊與校驗塊進(jìn)行異或,獲得D(i,j)??梢岳斫獾氖?,根據(jù)上述容錯編碼規(guī)則,將上述讀取出的所有數(shù)據(jù)塊、斜向校驗塊P(y,P+l)和水平校驗塊P(y,P)進(jìn)行異或運算,其結(jié)果即為數(shù)據(jù)塊D(i,j)。205、將獲得的數(shù)據(jù)塊D(i,j)寫入磁盤陣列的對應(yīng)存儲單元。進(jìn)一步的,為便于更好的理解上述技術(shù)方案,下面以損毀數(shù)據(jù)塊為如表l所示的矩陣M中的D(2,1)為例,進(jìn)行進(jìn)一步的說明。首先,確定D(2,1)所屬斜向校驗分組中斜向校驗塊在矩陣M中的行號y,其中,y=(i+(P-j))%P=(2+(5-1))%5=1。根據(jù)公式3可以推知:D(2,1)所屬斜向校驗分組包括D(1,0)、D(2,1)、D(3,2)、D(4,3)、D(0,4)、P(1,5)、P(1,6)。然后,從磁盤陣列中讀取斜向校驗塊P(1,6)和水平校驗塊P(1,5)、以及該斜向校驗分組中除D(2,1)外的其它數(shù)據(jù)塊,其它包括D(1,0)、D(3,2)、D(4,3),其中,D(0,4)為虛擬行的數(shù)據(jù)塊,直接采用默認(rèn)值(通常為O),不需要讀取。將讀取出的數(shù)據(jù)塊和校驗塊一起進(jìn)行異或運算,獲得D(2,1)。其中,D(2,1)=D(1,0)D(3,2)D(4,3)D(0,4)P(1,5)P(1,6)。最后將獲得的數(shù)據(jù)塊D(2,1)寫入磁盤陣列的對應(yīng)存儲單元。上述流程為利用斜向校驗塊恢復(fù)單個數(shù)據(jù)塊的流程,同樣,利用水平校驗塊同樣可以恢復(fù)出單個數(shù)據(jù)塊,此處不再對此進(jìn)行贅述??梢岳斫猓凑丈鲜鰡蝹€數(shù)據(jù)塊的恢復(fù)方式以此類推,即可在磁盤陣列中存儲矩陣M單列數(shù)據(jù)塊的磁盤故障時,逐一的恢復(fù)出該列的各個損毀的數(shù)據(jù)塊,此處不再贅述。上述技術(shù)方案可見,采用本發(fā)明實施例的磁盤容錯編碼方法,可以快速實現(xiàn)磁盤陣列的單磁盤(存儲單列數(shù)塊的磁盤)容錯,較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例的方案無需進(jìn)行伽羅瓦域變換,可以極大的簡化故障恢復(fù)的計算復(fù)雜度。實施例二、本實施例主要針對磁盤陣列中存儲矩陣M的斜向校驗列的校驗塊的磁盤故障的恢復(fù)流程,其中,下面以損毀的斜向校驗塊為P(i,P+l)為例。參見圖3,本發(fā)明實施例二的一種磁盤故障恢復(fù)的方法可以包括301、令變量k二0;302、確定待恢復(fù)的斜向校驗塊P(i,p+1)所屬斜向校驗分組中矩陣M的第k列的元素的行號m;其中,行號m的確定方式為m=(i+k)%p。p(i,p+1)所屬校驗分組中矩陣M的第k列的元素可能為數(shù)據(jù)塊(當(dāng)k《p-1時),也可能為水平校驗塊(當(dāng)k=p時)。303、從磁盤陣列讀取矩陣元素C(m,k);304、計算讀取出的所有矩陣元素的異或值;305、令變量k=k+1;306、判斷變量k是否小于或等于p,若是,則返回步驟302;若否,則執(zhí)行步驟307。其中,此時當(dāng)變量k大于p時,說明該斜向校驗分組的水平校驗塊和所有數(shù)據(jù)塊都已讀取完畢,利用讀取出的所有矩陣元素計算出的異或值即為斜向校驗塊C(i,p+l)的值。307、將計算出的異或值作為待恢復(fù)的斜向校驗塊為C(i,p+l),并將其寫入磁盤陣列的相應(yīng)存儲單元??梢岳斫?,步驟304也可以在步驟306和步驟307之間執(zhí)行,即是先讀取歸屬于斜向校驗塊P(i,P+l)所屬斜向校驗分組的水平校驗塊P(i,P)和所有數(shù)據(jù)塊,然后再計算讀取出的水平校驗塊P(i,P)和所有數(shù)據(jù)塊的異或值,獲得待恢復(fù)的斜向校驗塊為C(i,p+l)。本實施例還提供一種磁盤故障恢復(fù)的方法,可以包括從磁盤陣列讀取歸屬于待恢復(fù)的斜向校驗塊P(i,p+l)所屬斜向校驗分組的水平校驗塊P(i,P)和所有數(shù)據(jù)塊;將讀取出的水平校驗塊P(i,p)和所有數(shù)據(jù)塊進(jìn)行異或計算;將計算結(jié)果作為斜向校驗塊P(i,p+l)寫入磁盤陣列的相應(yīng)存儲單元。進(jìn)一步的,為便于更好的理解上述技術(shù)方案,下面以損毀數(shù)據(jù)塊為如表l所示的矩陣M中的P(2,6)為例,進(jìn)行進(jìn)一步的說明。根據(jù)公式3可以推知:P(2,6)所屬斜向校驗分組包括D(2,0)、D(3,1)、D(4,2)、D(0,3)、D(1,4)、P(2,5)、P(2,6)。首先,從磁盤陣列讀取歸屬于待恢復(fù)的斜向校驗塊P(2,6)所屬斜向校驗分組的水平校驗塊P(2,5)和所有數(shù)據(jù)塊,包括D(2,0)、D(3,1)、D(4,2)、D(1,4),其中D(0,3)為虛擬行的數(shù)據(jù)塊,直接采用默認(rèn)值(通常為0),不需要讀取。將P(2,6)所屬斜向校驗分組的所有數(shù)據(jù)塊和校驗塊進(jìn)行異或運算,獲得P(2,6),并將P(2,6)寫入磁盤陣列向的對應(yīng)存儲單元。其中,P(2,6)=D(2,0)D(3,1)D(4,2)D(0,3)@D(1,4)P(2,5)。上述流程為恢復(fù)單個斜向校驗塊的流程,可以理解,按照上述單個斜向校驗塊的恢復(fù)方式以此類推,即可在磁盤陣列中存儲矩陣M斜向校驗列校驗塊的磁盤故障時,逐一的恢復(fù)出該列的各個損毀校驗塊,此處不再贅述。實施例三、本實施例主要針對磁盤陣列中存儲矩陣M的水平校驗列的校驗塊的磁盤故障的恢復(fù)流程,其中,下面以損毀的水平校驗塊為P(i,P)為例。參見圖4,本發(fā)明實施例三的一種磁盤故障恢復(fù)的方法,可以包括401、從磁盤陣列讀取歸屬于待恢復(fù)的水平校驗塊P(i,p)所屬水平校驗分組的所有數(shù)據(jù)塊;402、將讀取出的所有數(shù)據(jù)塊進(jìn)行異或計算;403、將計算結(jié)果作為待恢復(fù)的水平校驗塊P(i,p),寫入磁盤陣列的相應(yīng)存儲單元。進(jìn)一步的,為便于更好的理解上述技術(shù)方案,下面以損毀水平校驗塊為如表1所示的矩陣M中的P(1,5)為例,進(jìn)行進(jìn)一步的說明。根據(jù)公式l可以推知P(1,5)所屬水平校驗分組包括D(1,0)、D(1,1)、D(1,2)、D(1,3)、D(1,4)、P(1,5)。首先,從磁盤陣列讀取歸屬于待恢復(fù)的水平校驗塊P(1,5)所屬水平校驗分組所有數(shù)據(jù)塊,包括D(1,0)、D(1,1)、D(1,2)、D(1,3)、D(1,4);將讀取出的所有數(shù)據(jù)塊進(jìn)行異或運算,獲得水平校驗塊P(1,5),并將P(1,5)寫入磁盤陣列的相應(yīng)存儲單元。其中,p(l,5)=D(1,0)D(1,1)D(1,2)D(1,3)D(1,4)。上述流程為恢復(fù)單個水平校驗塊的流程,可以理解,按照上述單個水平校驗塊的恢復(fù)方式以此類推,即可在磁盤陣列中存儲矩陣M水平校驗列校驗塊的磁盤故障時,逐一的恢復(fù)出該列的各個損毀校驗塊,此處不再贅述。以上實施例一至三分別針對存儲矩陣M的單列數(shù)據(jù)塊或校驗塊的磁盤故障的恢復(fù),下面通過具體實施例具體說明針對存儲矩陣M的兩列矩陣元素的磁盤同時故障的恢復(fù)。其中,待恢復(fù)的兩列矩陣元素可以是水平校驗塊和一列數(shù)據(jù)塊、斜向校驗塊和一列數(shù)據(jù)塊、兩列數(shù)據(jù)塊或兩列校驗塊。實施例四、本實施例主要針對磁盤陣列中,存儲矩陣M的水平校驗列的校驗塊的磁盤和存儲單個數(shù)據(jù)列的數(shù)據(jù)塊磁盤同時故障的恢復(fù)。其中,下面以損毀的數(shù)據(jù)列為矩陣M的第j列為例。參見圖5,本發(fā)明實施例四的一種磁盤故障恢復(fù)的方法,可以包括501、確定虛擬數(shù)據(jù)塊D(0,j)所屬斜向校驗分組中的斜向校驗塊在矩陣M中的行號y;在實際應(yīng)用中,確定行號y的方式可以是y=(i+(p-j))%p,i=0。502、讀取斜向校驗塊P(y,p+l);503、讀取矩陣M中斜向校驗塊P(y,p+l)所在的y行上除D(y,j)以外的其它數(shù)據(jù)塊,以及P(y,P+l)所屬校驗分組的其它數(shù)據(jù)塊;504、將讀取的所有數(shù)據(jù)塊與斜向校驗塊P(y,p+l)進(jìn)行異或運算,獲得數(shù)據(jù)塊D(y,j);其中,上述異或運算的結(jié)果既是待恢復(fù)的數(shù)據(jù)塊D(y,j)。505、將獲得的數(shù)據(jù)塊D(y,j)寫入磁盤陣列的對應(yīng)存儲單元。506、確定D(y,j)所屬斜向校驗分組中的斜向校驗塊在矩陣M中的行號y,此時,確定行號y的方式可以是y=(y+(p-j))%p。507、判斷上述確定出的行號y是否為0,若否,則返回步驟502;若是,則執(zhí)行步驟508??梢岳斫猓?dāng)判斷上述確定出的行號y不為0時,說明矩陣M的第j列還有需要恢復(fù)的數(shù)據(jù)塊,故而返回步驟502繼續(xù)進(jìn)行數(shù)據(jù)塊的恢復(fù),若為0,說明矩陣M的第j列數(shù)據(jù)塊恢復(fù)完畢,故而進(jìn)入步驟508,進(jìn)一步進(jìn)行矩陣M水平校驗列的校驗塊的恢復(fù)。508、根據(jù)恢復(fù)的矩陣M的第j列的數(shù)據(jù)塊和其它數(shù)據(jù)列的數(shù)據(jù)塊,恢復(fù)水平校驗列的校驗塊,并將恢復(fù)的校驗塊寫入磁盤陣列的對應(yīng)存儲單元。其中,當(dāng)恢復(fù)矩陣M第j列的數(shù)據(jù)塊后,即可按照實施例三中的方法,逐個的恢復(fù)矩陣M水平校驗列的各個校驗塊??梢岳斫獾氖牵鲜隽鞒淌且韵然謴?fù)第j列的所有損毀的數(shù)據(jù)塊,再恢復(fù)水平校驗列的所有損毀的校驗塊為例,進(jìn)行說明的,當(dāng)然也可以選擇在恢復(fù)第j列的一個損毀的數(shù)據(jù)塊后,利用該恢復(fù)的數(shù)據(jù)塊,恢復(fù)歸屬于該數(shù)據(jù)塊所屬水平校驗分組的損毀的水平校驗塊,以此類推,逐個的恢復(fù)第j列的所有損毀的數(shù)據(jù)塊和水平校驗列的所有損毀的校驗塊。由上述技術(shù)方案可以看出,采用本發(fā)明實施例的磁盤容錯編碼方法,可以實現(xiàn)磁盤陣列的雙磁盤容錯(分別存儲單列數(shù)據(jù)塊和水平校驗塊的磁盤),較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例的方案無需進(jìn)行伽羅瓦域變換,可以極大的簡化故障恢復(fù)的計算復(fù)雜度。實施例五、本實施例主要針對磁盤陣列中,存儲矩陣M的兩列數(shù)據(jù)塊的磁盤同時故障的恢復(fù)。其中,下面以損毀的數(shù)據(jù)塊為矩陣M的第m列和第n列的數(shù)據(jù)塊,其中,m<n為例。參見圖6-a,本發(fā)明實施例五的一種磁盤故障恢復(fù)的方法,可以包括601、獲取對應(yīng)虛擬行的斜向校驗塊P(0,p+1)。具體可以是,讀取磁盤陣列存儲的所有校驗塊,并將讀取出的所有校驗塊進(jìn)行異或運算,獲得對應(yīng)虛擬行的斜向校驗塊P(O,p+1)。其中,磁盤陣列中只存儲矩陣M所有非虛擬行的數(shù)據(jù)塊和校驗塊,對于矩陣M虛擬行的數(shù)據(jù)塊和校驗塊并不存儲,因此,讀取出的磁盤陣列存儲的所有校驗塊不包括對應(yīng)虛擬行的水平校驗塊P(O,p)和斜向校驗塊P(O,p+1)。根據(jù)公式1和公式3可以推知P(0,p+l)等于矩陣M第p列和第p+1列的非虛擬行的所有校驗塊(共(p-l)X2個)的異或值,獲得P(O,p+1)是為后續(xù)的數(shù)據(jù)塊恢復(fù)做準(zhǔn)備。602、確定虛擬數(shù)據(jù)塊D(0,m)所屬斜向校驗分組中的斜向校驗塊在矩陣M中的行號y。在實際應(yīng)用中,確定行號y的方式可以是y=(i+(p-j))%p=(0+(p-m))%p。603、從磁盤陣列讀取水平校驗塊P(y,p)、斜向校驗塊P(y,p+1)和該斜向校驗分組中除D(y,n)外的其它數(shù)據(jù)塊。604、將P(y,p+l)、P(y,p)與讀取的所有數(shù)據(jù)塊進(jìn)行異或運算,獲得數(shù)據(jù)塊D(y,n),并將獲得的D(y,n)寫入磁盤陣列的相應(yīng)存儲單元。由公式1和公式3可以推知將P(y,p+1)、P(y,p)與讀取到的所有數(shù)據(jù)塊進(jìn)行異或運算的結(jié)果即是D(y,n)。其中,步驟603和604可以看作是斜向恢復(fù)數(shù)據(jù)。605、讀取校驗塊P(y,p)和y行上除D(y,m)外的其它數(shù)據(jù)塊。606、將P(y,p)與y行上除D(y,m)外的其它數(shù)據(jù)塊進(jìn)行異或運算,獲得D(y,m),并將獲得D(y,m)寫入磁盤陣列的相應(yīng)存儲單元。由公式l可以推知y行上除D(y,m)外的其它數(shù)據(jù)塊與P(y,p)進(jìn)行異或運算的結(jié)果即是D(y,m)。其中,步驟605和606可以看作是水平恢復(fù)數(shù)據(jù)。607、確定D(y,m)所屬斜向校驗分組中矩陣M第n列的數(shù)據(jù)塊的行號y。在實際應(yīng)用中,確定行號y的方式可以是y=(y+(n_m))%p,進(jìn)而確定D(y,m)所屬的斜向校驗分組中矩陣M第n列的數(shù)據(jù)塊的行號y。例如若D(y,m)具體為D(3,m),則確定D(3,m)所屬斜向校驗分組中矩陣M第n列的數(shù)據(jù)塊的行號y=(y+(n-m))%p=(3+(n-m))%p。608、判斷確定出的行號y是否為0,若否,返回步驟602,若是,則表明數(shù)據(jù)恢復(fù)完成,可結(jié)束流程。需要說明的是,本實例是以第O行中序號較小的數(shù)據(jù)列(第m列)的虛擬數(shù)據(jù)塊作為數(shù)據(jù)塊恢復(fù)的起點進(jìn)行數(shù)據(jù)塊恢復(fù)的,當(dāng)然也可以以序號較大的故障數(shù)據(jù)盤(第n列)虛擬數(shù)據(jù)塊作為數(shù)據(jù)塊恢復(fù)的起點進(jìn)行數(shù)據(jù)塊恢復(fù)。進(jìn)一步的,為提高損毀數(shù)據(jù)塊的恢復(fù)速度,還可以同時選擇兩個損毀數(shù)據(jù)列上的虛擬數(shù)據(jù)塊進(jìn)行并行恢復(fù)。為便于更好的理解,下面通過具體的實例,對本實施上述技術(shù)方案進(jìn)行進(jìn)一步詳細(xì)的描述。舉例來說,仍以表1所示的矩陣M為例,其中,以存儲第2列數(shù)據(jù)塊的磁盤和存儲第3列數(shù)據(jù)塊的磁盤同時故障為例進(jìn)行說明。在進(jìn)行數(shù)據(jù)塊恢復(fù)時,既可選擇C(O,2)作為數(shù)據(jù)塊恢復(fù)的起點,也可以選擇C(O,3)作為數(shù)據(jù)塊恢復(fù)的起點。當(dāng)然,也可以同時選擇這兩個數(shù)據(jù)塊進(jìn)行數(shù)據(jù)塊并行恢復(fù),從而提高數(shù)據(jù)塊恢復(fù)速度。下面以選擇C(0,2)為數(shù)據(jù)恢復(fù)的起點為例,具體說明恢復(fù)過程首先,獲取第6列上的對應(yīng)虛擬行的斜向校驗塊。其中,獲取方法可以是從磁盤陣列讀取水平校驗塊C(1,5)、C(2,5)、C(3,5)和C(4,5)、斜向校驗塊C(1,6)、C(2,6)、C(3,6)和C(4,6),將讀取出的上述校驗塊進(jìn)行異或運算,結(jié)果就為C(0,6)。然后,以C(0,2)為起點,利用C(3,6)可以斜向恢復(fù)數(shù)據(jù)塊C(l,3);利用C(1,5)可以水平恢復(fù)數(shù)據(jù)塊C(1,2)。然后,利用C(1,2)和C(4,6)斜向恢復(fù)數(shù)據(jù)塊C(2,3);利用C(2,3)和C(2,5)水平恢復(fù)數(shù)據(jù)塊C(2,2)。然后,利用數(shù)據(jù)塊C(2,2)和C(0,6)斜向恢復(fù)數(shù)據(jù)塊C(3,3);利用數(shù)據(jù)塊C(3,3)和C(3,5)水平恢復(fù)數(shù)據(jù)塊C(3,2)。然后,利用數(shù)據(jù)塊C(3,2)和C(1,6)斜向恢復(fù)數(shù)據(jù)塊C(4,3);利用數(shù)據(jù)塊C(4,3)和C(4,5)水平恢復(fù)數(shù)據(jù)塊C(4,2),由于第3列虛擬行的數(shù)據(jù)塊C(0,3)始終為O,且無需存儲,故而無需恢復(fù)。至此,所有的數(shù)據(jù)盤D2和數(shù)據(jù)盤D3上的所有數(shù)據(jù)塊回復(fù)完成。請參見圖6-b,上述數(shù)據(jù)塊的恢復(fù)路徑可以表示如下C(0,2)—C(l,3)—C(l,2)—C(2,3)—C(2,2)—C(3,3)—C(3,2)—C(4,3)—C(4,2)—C(0,3)上述數(shù)據(jù)塊的恢復(fù),是從虛擬行的數(shù)據(jù)塊開始利用斜向校驗列上的校驗塊進(jìn)行數(shù)據(jù)塊恢復(fù),然后交替使用水平校驗列和斜向校驗列上的校驗塊進(jìn)行數(shù)據(jù)塊恢復(fù),直至所有的數(shù)據(jù)塊都恢復(fù)為止。上述舉例是以兩列損的數(shù)據(jù)列相鄰為例進(jìn)行說明的,而兩列損的數(shù)據(jù)列不相鄰情況下的數(shù)據(jù)塊恢復(fù)也類似。由上述技術(shù)方案可以看出,采用本發(fā)明實施例的磁盤容錯編碼方法,可以實現(xiàn)磁盤陣列的雙磁盤(分別存儲兩列數(shù)據(jù)塊的磁盤)容錯,較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例的方案無需進(jìn)行伽羅瓦域變換,可以極大的簡化故障恢復(fù)的計算復(fù)雜度。實施例六、本實施例主要針對磁盤陣列中,存儲矩陣M的斜向校驗列的校驗塊的磁盤和存儲單個數(shù)據(jù)列的數(shù)據(jù)塊的磁盤同時故障的恢復(fù)。其中,下面以損毀的數(shù)據(jù)列為矩陣M的第j列為例。參見圖7,本發(fā)明實施例六的一種磁盤故障恢復(fù)的方法,可以包括701、令變量y=1;702、從磁盤陣列讀取P(y,p),以及第k行除D(y,j)外的其它數(shù)據(jù)塊。703、將讀取出的P(y,p)和第y行除D(y,j)外的其它數(shù)據(jù)塊進(jìn)行異或運算,獲得D(y,j);704、將獲得的D(y,j)寫入磁盤陣列的相應(yīng)存儲單元。705、令變量y=y+l,即令變量y自加1;706、判斷y是否大于p-l,若否,則返回步驟702;若是,執(zhí)行步驟707??梢岳斫?,當(dāng)判斷上述確定出的y不為O,說明矩陣M的第j列還有需要恢復(fù)的數(shù)據(jù)塊,故而返回步驟702繼續(xù)進(jìn)行數(shù)據(jù)塊的恢復(fù),若為0,說明矩陣M的第j列數(shù)據(jù)塊恢復(fù)完畢,故而執(zhí)行步驟707,進(jìn)一步進(jìn)行矩陣M斜向校驗列的校驗塊的恢復(fù)。707、根據(jù)矩陣M各個數(shù)據(jù)列的數(shù)據(jù)塊和水平校驗列的校驗塊,恢復(fù)斜向校驗列的斜向校驗塊,并將恢復(fù)的斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。其中,當(dāng)恢復(fù)矩陣M第j列的數(shù)據(jù)塊后,即可按照實施例二中的方法,逐個的恢復(fù)矩陣M斜向校驗列的各個校驗塊??梢岳斫獾氖?,上述流程是以先恢復(fù)第j列的所有損毀的數(shù)據(jù)塊,再恢復(fù)斜向校驗列的所有損毀的校驗塊為例,進(jìn)行說明的,當(dāng)然也可以選擇在恢復(fù)第j列的一個損毀的數(shù)據(jù)塊后,利用該恢復(fù)的數(shù)據(jù)塊,恢復(fù)歸屬于該數(shù)據(jù)塊所屬斜向校驗分組的損毀的斜向校驗塊,以此類推,逐個的恢復(fù)第j列的所有損毀的數(shù)據(jù)塊和斜向校驗列的所有損毀的校驗塊。由上述技術(shù)方案可見,采用本發(fā)明實施例的磁盤容錯編碼方法,可以實現(xiàn)磁盤陣列的雙磁盤(分別存儲單列數(shù)據(jù)塊和斜向校驗塊的磁盤)容錯,較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例的方案無需進(jìn)行伽羅瓦域變換,可以極大的簡化故障恢復(fù)的計算復(fù)雜度。實施例七、本實施例針對磁盤陣列中,存儲矩陣M的斜向校驗列的校驗塊的磁盤和存儲水平校驗列的校驗塊的磁盤同時故障的恢復(fù)。首先,可以按照實施例二中的方法先恢復(fù)出水平校驗列的各個校驗塊;然后,按照實施例三中的方法恢復(fù)出斜向校驗列的各個校驗塊。當(dāng)然,也可以選擇在恢復(fù)一個損毀的水平校驗塊后,利用該恢復(fù)的水平校驗塊,恢復(fù)損毀的歸屬于該水平校驗塊所屬斜向校驗分組的斜向校驗塊,以此類推,逐個的恢復(fù)所有損毀的水平校驗塊和斜向校驗塊,其具體恢復(fù)過程此處不再贅述。進(jìn)一步的,本發(fā)明實施例還提供一種基于上述容錯編碼方法的數(shù)據(jù)塊更新方法,可以包括從磁盤陣列讀取待更新的原數(shù)據(jù)塊、該原數(shù)據(jù)塊所屬水平校驗分組的原水平校驗塊、以及該原數(shù)據(jù)塊所屬斜向校驗分組的原斜向校驗塊;將上述原水平校驗塊、上述原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新水平校驗塊;將上述原斜向校驗塊、上述原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新斜向校驗塊;或者將上述原斜向校驗塊、上述原水平校驗塊和上述新水平校驗塊進(jìn)行異或運算,獲得新斜向校驗塊;利用新數(shù)據(jù)塊、新水平校驗塊、新斜向校驗塊更新原數(shù)據(jù)塊、原水平校驗塊和原斜向校驗塊。實施例八、本實施例主要針對磁盤陣列中,更新數(shù)據(jù)塊的方法,其中,下面以利用新數(shù)據(jù)塊D(i,j)更新的原數(shù)據(jù)塊D。(i,j)為例。參見圖8,本發(fā)明實施例八的一種數(shù)據(jù)塊更新的方法,可以包括801、獲取并判斷準(zhǔn)備寫入的新數(shù)據(jù)塊D(i,j)在矩陣M中的行號和列號是否相等,若相等,則執(zhí)行步驟802;若不相等,則執(zhí)行步驟807。802、從磁盤陣列讀取原數(shù)據(jù)塊D。(i,j);其中,原數(shù)據(jù)塊D。(i,j)也可稱為待更新數(shù)據(jù)塊D。(i,j)。803、從磁盤陣列讀取原校驗塊P。(i,p)和P。(i,p+l);804、利用D。(i,j)、P。(i,p)和D(i,j)獲取新校驗塊P(i,p);其中,新水平校驗塊P(i,p)=D。(i,j)④Po(i,p)D(i,j)。805、利用P(i,p)、P。(i,p+l)和P。(i,p)獲取新校驗塊P(i,p+l);其中,新斜向校驗塊P(i,p+l)=P(i,p)Po(i,p+l)@Po(i,p);806、將新數(shù)據(jù)塊D(i,j)、新校驗塊P(i,p)和P(i,p+l)寫入磁盤陣列的對應(yīng)存儲單元;至此,i=j情況下的數(shù)據(jù)塊更新過程結(jié)束。807、從磁盤陣列讀取原數(shù)據(jù)塊D。(i,j)和原校驗塊P。(i,p);808、確定D。(i,j)所歸屬斜向校驗分組中的原斜向校驗塊的行號y;其中,確定公式可以為y=(i+(p-j))%p;809、從磁盤陣列讀取原校驗塊P。(y,p+l);810、利用D。(i,j)、P。(i,p)和D(i,j)獲取新校驗塊P(i,p)。其中,P(i,p)=D0(i,j)P0(i,p)D(i,j)。811、利用D。(i,j)、P。(y,p+l)和D(i,j)獲取新校驗塊P(y,p+l)。其中,P(y,p+l)=D0(i,j)P0(y,p+l)D(i,j)。812、將新數(shù)據(jù)塊D(i,j)、新校驗塊P(i,p)和P(y,p+l)寫入磁盤陣列的對應(yīng)存儲單元。至此,i#j情況下的數(shù)據(jù)塊更新過程結(jié)束。為便于更好的理解,下面通過具體的實例,對本實施上述技術(shù)方案進(jìn)行進(jìn)一步詳細(xì)的描述。情況l,i二j:舉例來說,仍以表1所示的矩陣M為例,其中,以獲取的新數(shù)據(jù)塊為D(2,2),原數(shù)據(jù)塊為D。(2,2)為例進(jìn)行說明。首先,判斷出2=2,因此從磁盤陣列讀取原數(shù)據(jù)塊D。(2,2)、原水平校驗塊P。(2,5)和原斜向校驗塊P。(2,6);然后,利用D。(2,2)、P。(2,5)和D(3,2)獲取新水平校驗塊P(2,5),其中,新水平校驗土央P(2,5)=D0(2,2)P0(2,5)D(2,2);利用P(2,5)、P。(2,5)和P。(2,6)獲取新斜向校驗塊P(2,6),其中,新斜向校驗塊P(2,6)=P(2,5)P0(2,5)P0(2,6)。最后,將新數(shù)據(jù)塊D(3,2)、新校驗塊P(3,5)和P(1,6)寫入磁盤陣列的對應(yīng)存儲單元,更新結(jié)束。情況2,i^j:舉例來說,仍以表1所示的矩陣M為例,其中,以獲取的新數(shù)據(jù)塊為D(3,2),原數(shù)據(jù)塊為D。(3,2)為例進(jìn)行說明。首先,判斷出3#2,因此從磁盤陣列讀取原數(shù)據(jù)塊D。(3,2)和原校驗塊P。(3,5);并確定D。(3,2)所歸屬斜向校驗分組中的原斜向校驗塊的行號y,y=(i+(p-j))%p=(3+(5-2))%5=1;然后,從磁盤陣列讀取原斜向校驗塊P。(1,6),利用D。(3,2)、P。(3,5)和D(3,2)獲取新水平校驗塊P(3,5),其中,新水平校驗塊P(3,5)=D0(3,2)P0(3,5)D(3,2);利用D。(3,2)、P。(3,5)和D(3,2)獲取新斜向校驗塊P(1,6),其中,新斜向校驗塊P(1,6)=D0(3,2)P0(1,6)D(3,2)。最后,將新數(shù)據(jù)塊D(3,2)、新校驗塊P(3,5)和P(1,6)寫入磁盤陣列的對應(yīng)存儲單元,更新結(jié)束??梢岳斫?,上述方式也同樣適用多個數(shù)據(jù)塊的更新情況,例如可以將多個數(shù)據(jù)塊的更新分解為多次更新單個數(shù)據(jù)塊,在進(jìn)行多個數(shù)據(jù)塊的更新時,可以參照上述方式進(jìn)行,此處不再贅述??蛇x的,也可以選擇先直接更新原數(shù)據(jù)塊,然后讀取出新數(shù)據(jù)塊所歸屬水平校驗分組的其它數(shù)據(jù)塊,利用公式1獲得相應(yīng)的水平校驗塊;讀取出該新數(shù)據(jù)塊所歸屬斜向校驗分組的其它數(shù)據(jù)塊和水平校驗塊,利用公式3獲得相應(yīng)的斜向校驗塊。由上述技術(shù)方案可見,采用本發(fā)明實施例的磁盤容錯編碼方法,無需進(jìn)行伽羅瓦域變換,可以實現(xiàn)較低的數(shù)據(jù)塊更新代價,數(shù)據(jù)塊讀取寫入次數(shù)極少。本發(fā)明上述實施例中多是以雙磁盤容錯為例進(jìn)行說明,若需要實現(xiàn)3個以上磁盤的容錯,可以使用本發(fā)明實施例提供的容錯編碼方法通過增加矩陣M的校驗列,實現(xiàn)更多磁盤的損毀數(shù)據(jù)塊恢復(fù)。另外,本發(fā)明實施例中的一個磁盤也可以看作是存儲區(qū)域網(wǎng)絡(luò)(SAN,StorageAreaNetwork)中的一個存儲節(jié)點,即將本發(fā)明實施例中的多磁盤容錯的系統(tǒng)和方法應(yīng)用到SAN技術(shù)中,數(shù)據(jù)塊的容錯編碼和恢復(fù)方法與上述實施例相同。另外,對于分布式存儲系統(tǒng)容錯,將本發(fā)明實施例中的單個磁盤作為分布式存儲系統(tǒng)中的一個網(wǎng)絡(luò)節(jié)點,則可將本發(fā)明上述實施例中應(yīng)用到分布式存儲系統(tǒng)中,其數(shù)據(jù)塊的容錯編碼和恢復(fù)方法與上述實施例相同。為便于更好的實施本發(fā)明實施例的技術(shù)方案,本發(fā)明實施例中還提供一種容錯處理裝置。實施例九、參見圖9-a,本發(fā)明實施例九的一種容錯處理裝置900,可以包括第一讀取模塊910、第一運算模塊920、第二讀取模塊930、第二運算模塊940和第一寫入模塊950。第一讀取模塊910,用于讀取磁盤陣列存儲的第一水平校驗分組的p個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和p個數(shù)據(jù)塊,p為正整數(shù);第一運算模塊920,用于通過將讀取的第一水平校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算,獲得上述第一水平校驗塊。在一種應(yīng)用場景下,第一運算模塊920利用公式1獲得第一水平校驗塊。第二讀取模塊930,用于讀取磁盤陣列存儲的第一斜向校驗分組的p個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊。第二運算模塊940,用于通過將第一水平校驗塊和讀取的第一斜向校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算,獲得上述第一斜向校驗塊。在一種應(yīng)用場景下,第二運算模塊940利用公式2獲得第一水平校驗塊。第一寫入模塊950,用于將獲得的第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。在一種應(yīng)用場景下,第一讀取模塊910可以包括第一獲取子模塊,用于獲取第一水平校驗分組的p個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,其中,第一水平校驗分組的p個數(shù)據(jù)塊Ci,k的行號為i,列號k的取值分別為O至lJp-l的p個整數(shù);第一讀取子模塊,用于根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一水平校驗分組的P個數(shù)據(jù)塊。第二讀取模塊930可以包括第二獲取子模塊,用于獲取第一斜向校驗分組的p個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣1中的行號和列號,其中,第一斜向校驗分組的。個數(shù)據(jù)塊^(/+^)^乂的列號k的取值分別為O到p-l的p個整數(shù),行號為(i+nk)p,旋轉(zhuǎn)系數(shù)n可為正整數(shù)或負(fù)整數(shù);第二讀取子模塊,用于根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一斜向校驗分組的P個數(shù)據(jù)塊。在一種應(yīng)用場景下,旋轉(zhuǎn)系數(shù)n為1。參見圖9-b,在一種應(yīng)用場景下,容錯處理裝置900還可包括確定模塊960,用于根據(jù)待恢復(fù)的第一數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,確定第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,該容錯編碼矩陣M包括p列數(shù)據(jù)塊和兩列校驗塊;第三讀取模塊970,用于根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊;第三運算單元980,用于將第三讀取模塊970讀取出的數(shù)據(jù)塊和校驗塊進(jìn)行異或運算,獲得第一數(shù)據(jù)塊;第二寫入模塊990,用于將第三運算單元980獲得的第一數(shù)據(jù)塊寫入磁盤陣列的對應(yīng)存儲單元。參見圖9-c,在一種應(yīng)用場景下,容錯處理裝置900還可包括第四讀取模塊9010,用于從磁盤陣列讀取待更新的原數(shù)據(jù)塊、該原數(shù)據(jù)塊所屬水平校驗分組的原水平校驗塊、以及該原數(shù)據(jù)塊所屬斜向校驗分組的原斜向校驗塊;第四運算單元9020,用于將第四讀取模塊9010讀取的原水平校驗塊、原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新水平校驗塊;第五運算單元9030,用于將第四讀取模塊9010讀取的原斜向校驗塊、原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新斜向校驗塊;或者將上述新水平校驗塊和第四讀取模塊讀取的原斜向校驗塊和原水平校驗塊進(jìn)行異或運算,獲得新斜向校驗塊;更新模塊9040,用于利用新數(shù)據(jù)塊、新水平校驗塊、新斜向校驗塊更新原數(shù)據(jù)塊、原水平校驗塊和原斜向校驗塊??梢岳斫馐堑模緦嵤├娜蒎e處理裝置900各個功能模塊的功能可以根據(jù)上述方法實施例中的方法具體實現(xiàn),其具體實現(xiàn)過程可參照上述實施例中的相關(guān)描述,此處不再贅述。為便于更好的實施本發(fā)明實施例的技術(shù)方案,本發(fā)明實施例中還提供一種數(shù)據(jù)塊恢復(fù)裝置。實施例十、參見圖IO,本發(fā)明實施例十的一種數(shù)據(jù)塊恢復(fù)裝置IOOO,可以包括確定模塊1010、讀取模塊1020、運算模塊1030和寫入模塊1040。其中,確定模塊1010,用于根據(jù)待恢復(fù)的第一數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,確定第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,上述容錯編碼矩陣M包括p列數(shù)據(jù)塊和兩列校驗塊;讀取模塊1020,用于根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊;運算模塊1030,用于將讀取模塊1020讀取出的數(shù)據(jù)塊和校驗塊進(jìn)行異或運算,獲得第一數(shù)據(jù)塊;寫入模塊1040,用于將運算模塊1030獲得的第一數(shù)據(jù)塊寫入磁盤陣列的對應(yīng)存儲單元。可以理解是的,本實施例的數(shù)據(jù)塊恢復(fù)裝置1000各個功能模塊的功能可以根據(jù)上述方法實施例中的方法具體實現(xiàn),其具體實現(xiàn)過程可參照上述實施例中的相關(guān)描述,此處不再贅述。為便于更好的實施本發(fā)明實施例的技術(shù)方案,本發(fā)明實施例中還提供一種數(shù)據(jù)塊更新裝置。實施例i^一、參見圖ll,本發(fā)明實施例十一的一種數(shù)據(jù)塊更新裝置IIOO,可以包括獲取模塊1110、讀取模塊1120、第一運算模塊1130、第二運算模塊1140和更新模塊1150。其中,獲取模塊1110,用于獲取新數(shù)據(jù)塊。讀取模塊1120,用于從磁盤陣列讀取待更新的原數(shù)據(jù)塊、該原數(shù)據(jù)塊所屬水平校驗分組的原水平校驗塊,該原數(shù)據(jù)塊所屬斜向校驗分組的原斜向校驗塊。第一運算模塊1130,用于將上述原水平校驗塊、上述原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新水平校驗塊。第二運算模塊1140,用于將上述原斜向校驗塊、上述原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新斜向校驗塊;或者將上述原斜向校驗塊、上述原水平校驗塊和上述新水平校驗塊進(jìn)行異或運算,獲得新斜向校驗塊。更新模塊1150,用于利用上述新數(shù)據(jù)塊、新水平校驗塊、新斜向校驗塊更新上述原數(shù)據(jù)塊、原水平校驗塊和原斜向校驗塊。可以理解是的,本實施例的數(shù)據(jù)塊更新裝置1100各個功能模塊的功能可以根據(jù)上述方法實施例中的方法具體實現(xiàn),其具體實現(xiàn)過程可參照上述實施例中的相關(guān)描述,此處不再贅述。為便于更好的實施本發(fā)明實施例的技術(shù)方案,本發(fā)明實施例中還提供一種數(shù)據(jù)塊更新裝置。實施例十二、參見圖12,本發(fā)明實施例十二的一種容錯系統(tǒng),可以包括磁盤陣列1210和容錯處理裝置1220。其中,容錯處理裝置1220,用于讀取磁盤陣列1210存儲的第一水平校驗分組的p個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和P個數(shù)據(jù)塊,P為正整數(shù);其中,通過將讀取的第一水平校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算獲得上述第一水平校驗塊;讀取磁盤陣列1210存儲的第一斜向校驗分組的p個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊;其中,通過將第一水平校驗塊和讀取的第一斜向校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算獲得上述第一斜向校驗塊;將獲得的第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列1210的對應(yīng)存儲單元。在一種應(yīng)用場景下,容錯處理裝置1220可以基于公式1獲得第一水平校驗塊,基于公式2獲得第一斜向校驗塊??梢岳斫馐堑?,本實施例容錯處理裝置1220可以包括如實施例九中的容錯處理裝置900,容錯系統(tǒng)的各個實體的功能可以根據(jù)上述方法實施例中的方法具體實現(xiàn),其具體實現(xiàn)過程可參照上述實施例中的相關(guān)描述,此處不再贅述。需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據(jù)本發(fā)明,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本發(fā)明所必須的。在上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。綜上,本發(fā)明實施例中,通過對數(shù)據(jù)塊進(jìn)行水平容錯編碼和斜向容錯編碼,可以實現(xiàn)磁盤陣列的雙磁盤容錯,較現(xiàn)有RAID6等磁盤容錯編碼方法相比,本發(fā)明實施例中無需進(jìn)行伽羅瓦域變換,可以極大的簡化容錯編碼和故障恢復(fù)的計算復(fù)雜度;且具有很低的數(shù)據(jù)塊更新代價。本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機(jī)可讀存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,存儲介質(zhì)可為磁碟、光盤、只讀存f諸i己十乙亍本(Read—OnlyMemory,ROM)或P道豐幾存f諸i己十乙亍本(RandomAccessMemory,RAM)等。以上對本發(fā)明實施例所提供的磁盤陣列容錯處理方法和裝置及容錯系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。權(quán)利要求一種磁盤陣列容錯處理方法,其特征在于,包括讀取磁盤陣列存儲的第一水平校驗分組的p個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和p個數(shù)據(jù)塊,p為正整數(shù);其中,通過將讀取的第一水平校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一水平校驗塊;讀取磁盤陣列存儲的第一斜向校驗分組的p個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和p個數(shù)據(jù)塊;其中,通過將第一水平校驗塊和讀取的第一斜向校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一斜向校驗塊;將獲得的所述第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述讀取磁盤陣列存儲的第一水平校驗分組的P個數(shù)據(jù)塊,包括獲取第一水平校驗分組的P個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,其中,第一水平校驗分組的P個數(shù)據(jù)塊Ci,k的行號為i,列號k的取值分別為0到p-1的p個整數(shù);根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一水平校驗分組的P個數(shù)據(jù)塊;所述讀取磁盤陣列存儲的第一斜向校驗分組的P個數(shù)據(jù)塊,包括獲取第一斜向校驗分組的P個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,其中,第一斜向校驗分組的P個數(shù)據(jù)塊C(i+rik)p,k的列號k的取值分別為0到p-1的p個整數(shù),行號為(i+nk)p,旋轉(zhuǎn)系數(shù)n為正整數(shù)或負(fù)整數(shù);根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一斜向校驗分組的P個數(shù)據(jù)塊。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述旋轉(zhuǎn)系數(shù)n取值為1。4.根據(jù)權(quán)利要求1至3任一項所述的方法,其特征在于,所述方法還包括根據(jù)待恢復(fù)的第一數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,確定第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,所述容錯編碼矩陣M包括p列數(shù)據(jù)塊和兩列校驗塊;根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊;將讀取出的數(shù)據(jù)塊和校驗塊進(jìn)行異或運算,獲得第一數(shù)據(jù)塊;將獲得的第一數(shù)據(jù)塊寫入磁盤陣列的對應(yīng)存儲單元。5.根據(jù)權(quán)利要求1至3任一項所述的方法,其特征在于,所述方法還包括從磁盤陣列讀取待更新的原數(shù)據(jù)塊、該原數(shù)據(jù)塊所屬水平校驗分組的原水平校驗塊、以及該原數(shù)據(jù)塊所屬斜向校驗分組的原斜向校驗塊;將所述原水平校驗塊、所述原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新水平校驗塊;將所述原斜向校驗塊、所述原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新斜向校驗塊;或者將所述原斜向校驗塊、所述原水平校驗塊和所述新水平校驗塊進(jìn)行異或運算,獲得新斜向校驗塊;利用新數(shù)據(jù)塊、新水平校驗塊、新斜向校驗塊更新原數(shù)據(jù)塊、原水平校驗塊和原斜向校驗塊。6.—種容錯處理裝置,其特征在于,包括第一讀取模塊,用于讀取磁盤陣列存儲的第一水平校驗分組的P個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和P個數(shù)據(jù)塊,P為正整數(shù);第一運算模塊,用于通過將讀取的第一水平校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算,獲得所述第一水平校驗塊;第二讀取模塊,用于讀取磁盤陣列存儲的第一斜向校驗分組的P個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊;第二運算模塊,用于通過將第一水平校驗塊和讀取的第一斜向校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算,獲得所述第一斜向校驗塊;第一寫入模塊,用于將獲得的所述第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,第一讀取模塊包括第一獲取子模塊,用于獲取第一水平校驗分組的P個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,其中,第一水平校驗分組的P個數(shù)據(jù)塊Cu的行號為i,列號k的取值分別為0到p-l的p個整數(shù);第一讀取子模塊,用于根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一水平校驗分組的P個數(shù)據(jù)塊;第二讀取模塊包括第二獲取子模塊,用于獲取第一斜向校驗分組的P個數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,其中,第一斜向校驗分組的P個數(shù)據(jù)塊C(i+nk)p,k的列號k的取值分別為0到p-l的p個整數(shù),行號為(i+nk)p,旋轉(zhuǎn)系數(shù)n為正整數(shù)或負(fù)整數(shù);第二讀取子模塊,用于根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一斜向校驗分組的P個數(shù)據(jù)塊。8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述裝置還包括確定模塊,用于根據(jù)待恢復(fù)的第一數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,確定第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊對應(yīng)在容錯編碼矩陣M中的行號和列號,所述容錯編碼矩陣M包括p列數(shù)據(jù)塊和兩列校驗塊;第三讀取模塊,用于根據(jù)容錯編碼矩陣M各行列的矩陣元素與磁盤陣列的存儲單元的對應(yīng)關(guān)系,從磁盤陣列的對應(yīng)存儲單元讀取第一數(shù)據(jù)塊所屬斜向校驗分組的斜向校驗塊、水平校驗塊以及其它數(shù)據(jù)塊;第三運算單元,用于將第三讀取模塊讀取出的數(shù)據(jù)塊和校驗塊進(jìn)行異或運算,獲得第一數(shù)據(jù)塊;第二寫入模塊,用于將第三運算單元獲得的第一數(shù)據(jù)塊寫入磁盤陣列的對應(yīng)存儲單元。9.根據(jù)權(quán)利要求7或8所述的裝置,其特征在于,所述裝置還包括第四讀取模塊,用于從磁盤陣列讀取待更新的原數(shù)據(jù)塊、該原數(shù)據(jù)塊所屬水平校驗分組的原水平校驗塊、以及該原數(shù)據(jù)塊所屬斜向校驗分組的原斜向校驗塊;第四運算單元,用于將第四讀取模塊讀取的原水平校驗塊、原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新水平校驗塊;第五運算單元,用于將第四讀取模塊讀取的原斜向校驗塊、原數(shù)據(jù)塊和對應(yīng)的新數(shù)據(jù)塊進(jìn)行異或運算,獲得新斜向校驗塊;或者將所述新水平校驗塊和第四讀取模塊讀取的原斜向校驗塊和原水平校驗塊進(jìn)行異或運算,獲得新斜向校驗塊;更新模塊,用于利用新數(shù)據(jù)塊、新水平校驗塊、新斜向校驗塊更新原數(shù)據(jù)塊、原水平校驗塊和原斜向校驗塊。10.—種容錯系統(tǒng),特征在于,包括磁盤陣列和容錯處理裝置,其中,所述容錯處理裝置,用于讀取磁盤陣列存儲的第一水平校驗分組的P個數(shù)據(jù)塊,其中,第一水平校驗分組包括第一水平校驗塊和p個數(shù)據(jù)塊,p為正整數(shù);其中,通過將讀取的第一水平校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一水平校驗塊;讀取磁盤陣列存儲的第一斜向校驗分組的P個數(shù)據(jù)塊,其中,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和P個數(shù)據(jù)塊;其中,通過將第一水平校驗塊和讀取的第一斜向校驗分組的P個數(shù)據(jù)塊進(jìn)行異或運算獲得所述第一斜向校驗塊;將獲得的所述第一水平校驗塊和第一斜向校驗塊寫入磁盤陣列的對應(yīng)存儲單元。全文摘要本發(fā)明實施例公開了一種磁盤陣列容錯處理方法和裝置及容錯系統(tǒng)。一種磁盤陣列容錯處理方法包括讀取磁盤陣列存儲的第一水平校驗分組的p個數(shù)據(jù)塊,第一水平校驗分組包括第一水平校驗塊和p個數(shù)據(jù)塊,p為正整數(shù);通過將讀取的第一水平校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得該第一水平校驗塊;讀取磁盤陣列存儲的第一斜向校驗分組的p個數(shù)據(jù)塊,第一斜向校驗分組包括第一水平校驗塊、第一斜向校驗塊和p個數(shù)據(jù)塊;通過將第一水平校驗塊和讀取的第一斜向校驗分組的p個數(shù)據(jù)塊進(jìn)行異或運算獲得該第一斜向校驗塊;將獲得的第一水平校驗塊和第一斜向校驗塊寫入對應(yīng)存儲單元。本發(fā)明實施例技術(shù)方案能夠相對降低磁盤容錯的計算復(fù)雜度,提高可實施性。文檔編號G06F11/10GK101719086SQ200910222688公開日2010年6月2日申請日期2009年11月30日優(yōu)先權(quán)日2009年11月30日發(fā)明者姚建業(yè),王玉林申請人:成都市華為賽門鐵克科技有限公司;電子科技大學(xué)