一種基于分組編碼的磁盤(pán)陣列構(gòu)建方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)磁盤(pán)陣列技術(shù)領(lǐng)域,具體涉及通過(guò)分組編碼來(lái)加快單盤(pán)修復(fù)的磁盤(pán)陣列構(gòu)建方法。
【背景技術(shù)】
[0002]在分布式存儲(chǔ)系統(tǒng)中,數(shù)據(jù)可靠性是一個(gè)重要指標(biāo),存儲(chǔ)系統(tǒng)往往采用基于復(fù)制或糾刪碼的策略生成冗余來(lái)保證數(shù)據(jù)可靠性。在現(xiàn)代存儲(chǔ)領(lǐng)域中,由于數(shù)據(jù)量急劇增加,存儲(chǔ)系統(tǒng)的磁盤(pán)數(shù)也急劇增加,為了保證數(shù)據(jù)可靠性,需要能同時(shí)容多個(gè)磁盤(pán)錯(cuò)。此時(shí),基于復(fù)制的策略存儲(chǔ)開(kāi)銷過(guò)大,因此往往采用基于糾刪碼的策略。美國(guó)約翰-韋利(JohnWiley&Sons)公司出版的《里德所羅門(mén)碼及其應(yīng)用》(Reed-Solomon codes and theirapplicat1ns,1999年第I版,第60?105頁(yè))所介紹的里德所羅門(mén)碼(Reed - Solomoncodes)是目前最常用的能同時(shí)容多磁盤(pán)錯(cuò)的糾刪碼。但里德所羅門(mén)碼是基于有限域運(yùn)算,編碼開(kāi)銷和數(shù)據(jù)更新開(kāi)銷較大;當(dāng)進(jìn)行單盤(pán)修復(fù)時(shí),需要讀取的數(shù)據(jù)總量較大,因此網(wǎng)絡(luò)開(kāi)銷較大,修復(fù)速度較慢。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是提出一種基于分組編碼的磁盤(pán)陣列構(gòu)建方法,以克服現(xiàn)有技術(shù)的上述缺陷,在能容任意四個(gè)磁盤(pán)錯(cuò)的前提下減小單盤(pán)修復(fù)時(shí)所需讀取的數(shù)據(jù)總量和各磁盤(pán)讀取量,節(jié)省網(wǎng)絡(luò)帶寬,加快修復(fù)速度。
[0004]本發(fā)明基于分組編碼的磁盤(pán)陣列構(gòu)建方法,其特征在于包括以下步驟:
[0005]第一步:磁盤(pán)分區(qū)步驟
[0006]首先將每個(gè)容量為C MB的磁盤(pán)切分成大小為H MB的C/Η個(gè)邏輯塊(Chunk),其中C的范圍是256GB?4TB (通常采用2TB或4TB),H的范圍是64MB?IGB (通常采用64MB);然后將所有磁盤(pán)劃分為N組,每組G個(gè)磁盤(pán),其中G為素?cái)?shù),N〈 = G,共G*N個(gè)磁盤(pán);在各組中,從每個(gè)磁盤(pán)中取G個(gè)邏輯塊組成一個(gè)G*G的邏輯塊矩陣,構(gòu)成一個(gè)分區(qū);
[0007]第二步:組內(nèi)編碼步驟
[0008]設(shè)Pu為某個(gè)分區(qū)第i行第j列的邏輯塊,<j-1> e表示j_i對(duì)G求模;取<j_i> G相同的邏輯塊來(lái)構(gòu)建組內(nèi)子陣列(RAID),每個(gè)組內(nèi)子陣列由G個(gè)邏輯塊構(gòu)成;組內(nèi)子陣列采用RAID-5編碼,即G-1個(gè)數(shù)據(jù)塊產(chǎn)生I個(gè)校驗(yàn)塊;
[0009]第三步:組間編碼步驟
[0010]在第O組的分區(qū)中,對(duì)每個(gè)邏輯塊進(jìn)行編號(hào),從左到右、從上到下依次為O到G*G-1 ;定義一個(gè)右移操作:在一個(gè)分區(qū)中,第i行的編號(hào)循環(huán)右移i個(gè)邏輯位置;對(duì)第O組的分區(qū)進(jìn)行該右移操作,得到第I組分區(qū)的邏輯編號(hào);對(duì)第I組的分區(qū)進(jìn)行該右移操作,得到第2組分區(qū)的邏輯編號(hào),以此類推;組間編碼的方法為,從各分區(qū)取出相同編號(hào)的邏輯塊構(gòu)建組間子陣列,組間子陣列共由N個(gè)邏輯塊構(gòu)成;組間子陣列采用RAID-5編碼,即N-1個(gè)數(shù)據(jù)塊產(chǎn)生I個(gè)校驗(yàn)塊;選擇非組內(nèi)編碼校驗(yàn)塊的邏輯塊作為組間編碼校驗(yàn)塊;
[0011]第四步:制定容錯(cuò)策略步驟
[0012]當(dāng)發(fā)生單磁盤(pán)錯(cuò)誤時(shí),記錄壞盤(pán)所包含的組間子陣列的編號(hào),并發(fā)地從其它分區(qū)讀取相同編號(hào)的邏輯塊進(jìn)行異或運(yùn)算,并發(fā)地將恢復(fù)的數(shù)據(jù)臨時(shí)寫(xiě)入空閑磁盤(pán),最后將恢復(fù)的數(shù)據(jù)寫(xiě)入熱備盤(pán);當(dāng)發(fā)生多磁盤(pán)錯(cuò)誤時(shí),首先采用組內(nèi)編碼修復(fù)損壞的邏輯塊,再采用組間編碼修復(fù)剩余的邏輯塊。
[0013]上述本發(fā)明基于分組編碼的磁盤(pán)陣列構(gòu)建方法包括了磁盤(pán)分區(qū)步驟,組內(nèi)編碼步驟,組間編碼步驟和制定容錯(cuò)策略步驟;采用此構(gòu)建方法的磁盤(pán)陣列能容任意四個(gè)磁盤(pán)錯(cuò);當(dāng)發(fā)生單磁盤(pán)錯(cuò)時(shí),采用組間編碼進(jìn)行修復(fù);當(dāng)發(fā)生多磁盤(pán)錯(cuò)時(shí),采用組內(nèi)編碼和組間編碼的混合修復(fù)。單盤(pán)修復(fù)時(shí),修復(fù)一個(gè)邏輯塊僅需讀取N-1個(gè)邏輯塊。本發(fā)明方法與傳統(tǒng)磁盤(pán)陣列構(gòu)建方法相比,在相同的容錯(cuò)能力和冗余率的前提下,修復(fù)單磁盤(pán)錯(cuò)時(shí)所讀取的數(shù)據(jù)總量以及各磁盤(pán)的數(shù)據(jù)讀取量都明顯減少,節(jié)省了網(wǎng)絡(luò)帶寬,加快了修復(fù)速度,提高了系統(tǒng)可靠性。
[0014]本發(fā)明基于分組編碼的磁盤(pán)陣列構(gòu)建方法與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):
[0015]1.由于本發(fā)明僅采用基于異或運(yùn)算的編碼就達(dá)到了容任意四個(gè)磁盤(pán)錯(cuò)的目的,與里德所羅門(mén)碼(Reed - Solomon codes)相比,本發(fā)明方法的編碼速度更快,數(shù)據(jù)更新開(kāi)銷更小。
[0016]2.在相同的容錯(cuò)能力和冗余率的前提下,本發(fā)明方法與里德所羅門(mén)碼(Reed-Solomon codes)相比,進(jìn)行單盤(pán)修復(fù)所需讀取的數(shù)據(jù)總量明顯減少,節(jié)省了網(wǎng)絡(luò)帶寬;各磁盤(pán)的數(shù)據(jù)讀取量減少數(shù)倍,加快了修復(fù)速度,提高了系統(tǒng)可靠性。
【附圖說(shuō)明】
[0017]圖1為按照本發(fā)明方法構(gòu)建的一個(gè)具體磁盤(pán)陣列的總體結(jié)構(gòu)示意圖。
[0018]圖2為組內(nèi)編碼方法示意圖;
[0019]圖3為組間編碼方法示意圖。
[0020]圖4為單盤(pán)修復(fù)方法示意圖;
[0021 ] 圖5為多盤(pán)修復(fù)方法示意圖。
【具體實(shí)施方式】
[0022]下面結(jié)合附圖通過(guò)具體實(shí)施例對(duì)本發(fā)明基于分組編碼的磁盤(pán)陣列構(gòu)建方法作進(jìn)一步的詳細(xì)說(shuō)明。
[0023]實(shí)施例1:
[0024]本實(shí)施例基于分組編碼的磁盤(pán)陣列構(gòu)建方法,具體包括以下步驟:
[0025]第一步:磁盤(pán)分區(qū)步驟
[0026]附圖1給出了按照本發(fā)明方法構(gòu)建的一個(gè)具體實(shí)施例磁盤(pán)陣列的總體結(jié)構(gòu)示意圖。該圖中,每一列代表一個(gè)磁盤(pán),共有編號(hào)為DO?D14的15個(gè)磁盤(pán),本實(shí)施例中設(shè)每個(gè)磁盤(pán)容量都為2TB ;每一個(gè)方格代表一個(gè)64MB的邏輯塊(Chunk),所有磁盤(pán)都被切分成32768個(gè)邏輯塊(圖中每個(gè)磁盤(pán)僅列出了 5個(gè)邏輯塊)。將所有磁盤(pán)劃分為3組,每組5個(gè)磁盤(pán)。在各組中,從各個(gè)磁盤(pán)取出5個(gè)邏輯塊組成5*5的邏輯塊矩陣,稱為一個(gè)分區(qū),最終形成第O號(hào)磁盤(pán)分區(qū)R0、第I號(hào)磁盤(pán)分區(qū)Rl和第2號(hào)磁盤(pán)分區(qū)R2三個(gè)分區(qū)。在每個(gè)分區(qū)內(nèi)進(jìn)行組內(nèi)編碼,在分區(qū)之間進(jìn)行組間編碼。圖中小方格內(nèi)采用空白表示的邏輯塊為數(shù)據(jù)塊;圖中小方格內(nèi)采用右斜線表示的邏輯塊為組內(nèi)編碼校驗(yàn)塊;小方格內(nèi)采用水平直線表示的邏輯塊為組間編碼校驗(yàn)塊。
[0027]第二步:組內(nèi)編碼步驟
[0028]形成分區(qū)之后進(jìn)行組內(nèi)編碼。圖2為組內(nèi)編碼方法示意圖。在圖2中,每個(gè)邏輯塊由2個(gè)數(shù)字進(jìn)行標(biāo)記,第一個(gè)數(shù)字表示所在行數(shù),設(shè)為i ;第二個(gè)數(shù)字表示所在列數(shù),設(shè)為j ;設(shè)表示j_i對(duì)5求模。取<j-1> 5相同的邏輯塊構(gòu)建組內(nèi)子陣列,采用RAID-5編碼,即4個(gè)數(shù)據(jù)塊異或產(chǎn)生一個(gè)校驗(yàn)塊。附圖2中共有編號(hào)為①?⑤的五條連線,每條連線上包含5個(gè)邏輯塊,且這5個(gè)邏輯塊滿足相同。因此每一條連線上的邏輯塊均組成一個(gè)組內(nèi)子陣列,其中小方格內(nèi)采用左斜線表示的邏輯塊為校驗(yàn)塊。
[0029]第三步:組間編碼步驟
[0030]進(jìn)行組間編碼前,需要對(duì)各分區(qū)中的邏輯塊進(jìn)行編號(hào)。
[0031]圖3為組間編碼方法示意圖。如附圖3中所示:在第O號(hào)分區(qū)RO中,從左到右、從上到下依次編號(hào)為O?24?,F(xiàn)定義一個(gè)右移操作:在一個(gè)分區(qū)中,第i行的編號(hào)循環(huán)右移i個(gè)邏輯位置。對(duì)第O號(hào)磁盤(pán)分區(qū)RO中的編號(hào)進(jìn)行