一種基于磁盤陣列的數(shù)據(jù)存儲(chǔ)及讀取方法
【專利摘要】本發(fā)明提供一種基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其中每個(gè)條帶包括空子條帶和糾刪碼子條帶;存儲(chǔ)方法包括下列步驟:1)確定需要寫入數(shù)據(jù)的條帶并將其作為當(dāng)前條帶;2)當(dāng)需要寫入的數(shù)據(jù)是全條帶數(shù)據(jù)時(shí),將所述全條帶數(shù)據(jù)寫入當(dāng)前條帶的空子條帶,寫入完畢后將該空子條帶轉(zhuǎn)換為糾刪碼子條帶;3)在新的糾刪碼子條帶生效后,將當(dāng)前條帶的原有糾刪碼子條帶轉(zhuǎn)換為空子條帶。所述條帶還可以進(jìn)一步包括鏡像子條帶。另外,本發(fā)明還提供了相應(yīng)的基于磁盤陣列的數(shù)據(jù)讀取方法。本發(fā)明能夠解決糾刪碼技術(shù)中的WriteHole問題;能夠提高基于糾刪碼的存儲(chǔ)系統(tǒng)的I/O性能;無論在寫入數(shù)據(jù)塊較多還是較少時(shí)均能達(dá)到較高的性能。
【專利說明】一種基于磁盤陣列的數(shù)據(jù)存儲(chǔ)及讀取方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲(chǔ)【技術(shù)領(lǐng)域】,具體地說,本發(fā)明涉及一種基于磁盤冗余陣列的數(shù)據(jù)存儲(chǔ)及讀取方法。
【背景技術(shù)】
[0002]副本和糾刪碼技術(shù)是目前常用的兩種高可靠技術(shù)。其中,副本技術(shù)就是將一份數(shù)據(jù)完整的拷貝多份存儲(chǔ),以η份副本為例,使用副本技術(shù)后,磁盤陣列能夠存儲(chǔ)數(shù)據(jù)的量只占原始儲(chǔ)存容量的1/η,這會(huì)導(dǎo)致硬件采購成本、降溫成本、空間占用成本大幅提高。而糾刪碼(erasure code)技術(shù)能夠以更小的數(shù)據(jù)冗余度獲得更高數(shù)據(jù)可靠性。它的基本原理如下:給定η個(gè)數(shù)據(jù)塊屯,d2,..., dn,RS技術(shù)中根據(jù)這η個(gè)數(shù)據(jù)塊生成m個(gè)校驗(yàn)塊Cl,c2,..., cm。對(duì)于任意的η和m,從原始數(shù)據(jù)塊及其校驗(yàn)塊中任取不少于η塊就能解碼出原始數(shù)據(jù),即糾刪碼技術(shù)中最多容忍m個(gè)數(shù)據(jù)塊或者校驗(yàn)塊同時(shí)丟失。
[0003]糾刪碼在存儲(chǔ)中的應(yīng)用典型代表就是RAID(Redundant Array of IndependentDisks,獨(dú)立磁盤冗余陣列)。RAID技術(shù)將多塊磁盤形成一個(gè)有機(jī)整體,能夠提供整體更高的可靠性、容量、性能。使用RAID技術(shù),高性能計(jì)算(HPC)使用的文件系統(tǒng)能夠以很小的存儲(chǔ)開銷(〈25% )保證數(shù)據(jù)高可用性。然而,目前的糾刪碼技術(shù)也存在自身的一些缺陷。
[0004]一方面,現(xiàn)存的RAID類型存儲(chǔ)技術(shù)存在WriteHole問題(又稱非一致性更新問題),其中包括廣為應(yīng)用的RAID5,RAID6等。RAID技術(shù)中,n+m個(gè)分布在不同磁盤上的數(shù)據(jù)塊構(gòu)成一個(gè)具有一致性的條帶,RAID條帶的一致性是指條帶中的數(shù)據(jù)塊和校驗(yàn)塊符合預(yù)設(shè)的不變式,這樣,條帶中任一數(shù)據(jù)塊丟失時(shí),只要從η個(gè)原始數(shù)據(jù)塊和m個(gè)校驗(yàn)塊中任取不少于η塊,就能根據(jù)預(yù)設(shè)的不變式解碼出原始數(shù)據(jù)。當(dāng)條帶中的某個(gè)或某些數(shù)據(jù)塊需要修改時(shí),系統(tǒng)通常需要讀出相應(yīng)的一個(gè)或多個(gè)校驗(yàn)塊,然后根據(jù)新的數(shù)據(jù)塊重新計(jì)算校驗(yàn)塊,最后再同時(shí)寫入新的數(shù)據(jù)塊和校驗(yàn)塊。如果在同時(shí)寫入的過程中突然發(fā)生RAID驅(qū)動(dòng)故障(如系統(tǒng)崩潰或斷電),就可能會(huì)出現(xiàn)部分?jǐn)?shù)據(jù)塊或校驗(yàn)塊已修改,而另一部分?jǐn)?shù)據(jù)塊或檢驗(yàn)塊尚未修改完成的現(xiàn)象,以及同一塊數(shù)據(jù)塊或校驗(yàn)塊只修改了一部分而另一部分未修改完成的現(xiàn)象,上述現(xiàn)象將導(dǎo)致條帶上的數(shù)據(jù)塊和校驗(yàn)塊不一致的問題,又稱為非一致性更新問題(Inconsistent Update Problem)。而當(dāng)需要同時(shí)更新的數(shù)據(jù)塊和校驗(yàn)塊的數(shù)目和超過m時(shí),上述非一致性更新問題會(huì)導(dǎo)致相應(yīng)條帶中的數(shù)據(jù),無論是故障前的老數(shù)據(jù)還是要寫入的新數(shù)據(jù),都無法利用糾刪碼技術(shù)恢復(fù)出來,此時(shí)就產(chǎn)生了 WriteHole。
[0005]另一方面,相對(duì)于副本技術(shù),基于糾刪碼技術(shù)的存儲(chǔ)系統(tǒng)I/O性能較弱。首先,糾刪碼技術(shù)中,寫入操作依賴對(duì)舊數(shù)據(jù)和舊校驗(yàn)的同步讀取操作,當(dāng)寫入數(shù)據(jù)塊較少時(shí),其性能相對(duì)較低。其次,糾刪碼比副本需要更多的緩存來優(yōu)化寫性能,難以適用于需要大量并發(fā)寫操作的應(yīng)用場(chǎng)合。再者,冗余副本可用來提供更多的讀數(shù)據(jù)帶寬和進(jìn)行負(fù)載平衡的空間,而現(xiàn)有的糾刪碼技術(shù)不具備上述優(yōu)點(diǎn)。
【發(fā)明內(nèi)容】
[0006]因此,本發(fā)明的任務(wù)是提供一種能夠克服上述缺陷的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)及讀取解決方案。
[0007]本發(fā)明提供了一種基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;其特征在于,每個(gè)所述條帶包括空子條帶和糾刪碼子條帶;所述基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法包括下列步驟:
[0008]I)確定需要寫入數(shù)據(jù)的條帶并將其作為當(dāng)前條帶;
[0009]2)當(dāng)需要寫入的數(shù)據(jù)是全條帶數(shù)據(jù)時(shí),將所述全條帶數(shù)據(jù)寫入當(dāng)前條帶的空子條帶,寫入完畢后將該空子條帶轉(zhuǎn)換為糾刪碼子條帶;所述全條帶數(shù)據(jù)是所述的滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;
[0010]3)在新的糾刪碼子條帶生效后,將當(dāng)前條帶的原有糾刪碼子條帶轉(zhuǎn)換為空子條帶。
[0011]其中,所述每個(gè)所述條帶還包括鏡像子條帶,所述邏輯卷還包括副本存儲(chǔ)區(qū);
[0012]所述基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法還包括步驟:
[0013]4)當(dāng)需要寫入的數(shù)據(jù)是非全條帶數(shù)據(jù)時(shí),將所述非全條帶數(shù)據(jù)寫入當(dāng)前條帶的鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。
[0014]其中,所述步驟3)還包括:在新的糾刪碼子條帶生效后,將當(dāng)前條帶的原有鏡像子條帶轉(zhuǎn)換為空子條帶;
[0015]所述步驟4)還包括:如果當(dāng)前條帶中沒有鏡像子條帶,則選擇任意一個(gè)空子條帶作為鏡像子條帶,將所述非全條帶數(shù)據(jù)寫入該鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。
[0016]其中,每個(gè)所述條帶包括η個(gè)數(shù)據(jù)塊存儲(chǔ)單元和m個(gè)校驗(yàn)塊存儲(chǔ)單元,對(duì)于空子條帶,糾刪碼子條帶和鏡像子條帶中的任意一種子條帶,每個(gè)子條帶均包括η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元和m個(gè)校驗(yàn)塊子存儲(chǔ)單元;
[0017]所述步驟4)中,所述鏡像子條帶中的每個(gè)數(shù)據(jù)塊子存儲(chǔ)單元均對(duì)應(yīng)于所述副本存儲(chǔ)區(qū)的m個(gè)用于存儲(chǔ)副本的子存儲(chǔ)單元。
[0018]其中,所述步驟4)中,每個(gè)所述鏡像子條帶對(duì)應(yīng)于m列豎條帶,這m列豎條帶作為該鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū),這m列豎條帶分別與該鏡像子條帶中的m個(gè)校驗(yàn)塊子存儲(chǔ)單元處于同一列(即在同一磁盤上);每列豎條帶包括η個(gè)副本子存儲(chǔ)單元,這η個(gè)副本子存儲(chǔ)單元分別對(duì)應(yīng)于所述鏡像子條帶中的η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元。
[0019]其中,所述邏輯卷中,相鄰條帶的校驗(yàn)塊存儲(chǔ)單元的位置順序輪轉(zhuǎn),這樣,相鄰條帶的鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū)的位置也順序輪轉(zhuǎn)。
[0020]本發(fā)明還提供了一種基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;每個(gè)所述條帶包括糾刪碼子條帶和鏡像子條帶,所述邏輯卷還包括副本存儲(chǔ)區(qū);所述基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法包括下列步驟:
[0021]10)確定需要寫入數(shù)據(jù)的條帶并將其作為當(dāng)前條帶;
[0022]20)當(dāng)需要寫入的數(shù)據(jù)是全條帶數(shù)據(jù)時(shí),將所述全條帶數(shù)據(jù)寫入當(dāng)前條帶的糾刪碼子條帶;所述全條帶數(shù)據(jù)是所述的滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;
[0023]30)當(dāng)需要寫入的數(shù)據(jù)是非全條帶數(shù)據(jù)時(shí),將所述非全條帶數(shù)據(jù)寫入當(dāng)前條帶的鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。
[0024]其中,每個(gè)所述條帶包括η個(gè)數(shù)據(jù)塊存儲(chǔ)單元和m個(gè)校驗(yàn)塊存儲(chǔ)單元,對(duì)于糾刪碼子條帶和鏡像子條帶中的任意一種子條帶,每個(gè)子條帶均包括η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元和m個(gè)校驗(yàn)塊子存儲(chǔ)單元;
[0025]其中,所述基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法還包括步驟:
[0026]40)當(dāng)需要寫入的數(shù)據(jù)是非全條帶數(shù)據(jù)時(shí),將所述非全條帶數(shù)據(jù)寫入當(dāng)前條帶的鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。
[0027]其中,所述步驟40)中,所述鏡像子條帶中的每個(gè)數(shù)據(jù)塊子存儲(chǔ)單元均對(duì)應(yīng)于所述副本存儲(chǔ)區(qū)的m個(gè)用于存儲(chǔ)副本的子存儲(chǔ)單元。
[0028]其中,所述步驟40)中,每個(gè)所述鏡像子條帶對(duì)應(yīng)于m列豎條帶,這m列豎條帶作為該鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū),這m列豎條帶分別與該鏡像子條帶中的m個(gè)校驗(yàn)塊子存儲(chǔ)單元處于同一列;每列豎條帶包括η個(gè)副本子存儲(chǔ)單元,這η個(gè)副本子存儲(chǔ)單元分別對(duì)應(yīng)于所述鏡像子條帶中的η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元;
[0029]所述邏輯卷中,相鄰條帶的校驗(yàn)塊存儲(chǔ)單元的位置順序輪轉(zhuǎn),這樣,相鄰條帶的鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū)的位置也順序輪轉(zhuǎn)。
[0030]本發(fā)明還提供了一種基于磁盤陣列的數(shù)據(jù)讀取方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;每個(gè)所述條帶包括空子條帶,糾刪碼子條帶和鏡像子條帶,所述邏輯卷還包括用于存儲(chǔ)寫入所述鏡像子條帶的數(shù)據(jù)塊的鏡像的副本存儲(chǔ)區(qū);其特征在于,包括下列步驟:
[0031]a)對(duì)于要讀取的任意一個(gè)條帶的任意存儲(chǔ)位置,優(yōu)先從該條帶的鏡像子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù);
[0032]b)如果所述鏡像子條帶中的相應(yīng)存儲(chǔ)位置為空,則從同一條帶的糾刪碼子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù)。
[0033]本發(fā)明還提供了一種基于磁盤陣列的數(shù)據(jù)讀取方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;每個(gè)所述條帶包括糾刪碼子條帶和鏡像子條帶,所述邏輯卷還包括用于存儲(chǔ)寫入所述鏡像子條帶的數(shù)據(jù)塊的鏡像的副本存儲(chǔ)區(qū);其特征在于,包括下列步驟:
[0034]a)對(duì)于要讀取的任意一個(gè)條帶的任意存儲(chǔ)位置,優(yōu)先從該條帶的鏡像子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù);
[0035]b)如果所述鏡像子條帶中的相應(yīng)存儲(chǔ)位置為空,則從同一條帶的糾刪碼子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù)。
[0036]相對(duì)于現(xiàn)有技術(shù),本發(fā)明具有下列技術(shù)效果:
[0037]1、本發(fā)明能夠解決糾刪碼技術(shù)中的WriteHole問題。
[0038]2、本發(fā)明能夠提尚基于糾刪碼的存儲(chǔ)系統(tǒng)的I/O性能。
[0039]3、本發(fā)明無論在寫入數(shù)據(jù)塊較多還是較少時(shí)均能達(dá)到較高的性能。
[0040]4、本發(fā)明允許糾刪碼存儲(chǔ)過程有較高延遲,并且減少糾刪碼同一數(shù)據(jù)塊上并發(fā)的重復(fù)I/o。
[0041]5、本發(fā)明能夠減少糾刪碼的緩存開銷。
[0042]6、本發(fā)明能夠提供更多的讀數(shù)據(jù)帶寬和進(jìn)行負(fù)載平衡的空間。
【專利附圖】
【附圖說明】
[0043]以下,結(jié)合附圖來詳細(xì)說明本發(fā)明的實(shí)施例,其中:
[0044]圖1示出了 RAID邏輯卷下的一個(gè)條帶;
[0045]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的條帶中的三個(gè)子條帶;
[0046]圖3示出了本發(fā)明一個(gè)實(shí)施例中具有副本存儲(chǔ)功能的一個(gè)條帶的存儲(chǔ)結(jié)構(gòu);
[0047]圖4示出了本發(fā)明一個(gè)實(shí)施例中一組條帶的一個(gè)輪轉(zhuǎn)周期的示意圖;
[0048]圖5示出了本發(fā)明一個(gè)實(shí)施例中增加了副本存儲(chǔ)區(qū)的由四個(gè)條帶組成的條帶組;
[0049]圖6示出了本發(fā)明一個(gè)實(shí)施例中一次不滿條帶寫中鏡像操作的示意圖;
[0050]圖7示出了本發(fā)明一個(gè)實(shí)施例中基于圖5所示的存儲(chǔ)結(jié)構(gòu)的寫流程;
[0051]圖8示出了本發(fā)明一個(gè)實(shí)施例中基于圖5所示的存儲(chǔ)結(jié)構(gòu)的讀流程。
【具體實(shí)施方式】
[0052]本發(fā)明提出了一種糾刪碼與鏡像結(jié)合的存儲(chǔ)方法,它兼具糾刪碼和副本技術(shù)的優(yōu)點(diǎn),下面結(jié)合實(shí)施例對(duì)本發(fā)明做進(jìn)一步的描述。其中,為便于理解,首先由淺入深地介紹本發(fā)明的存儲(chǔ)結(jié)構(gòu),然后再敘述基于此存儲(chǔ)結(jié)構(gòu)的讀寫流程及其相應(yīng)技術(shù)效果。
[0053]根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種基于RAID的數(shù)據(jù)存儲(chǔ)方法,其中,磁盤陣列的每一塊磁盤(例如硬盤)作為一個(gè)故障單元,直接被整體系統(tǒng)感知。假設(shè)磁盤陣列中η塊磁盤為普通的數(shù)據(jù)盤,而m塊磁盤為校驗(yàn)盤(parity盤),那么在邏輯卷層可確定系統(tǒng)可靠性級(jí)別n+m,即支持最多m塊磁盤故障而數(shù)據(jù)不丟失。下面以n = 12,m = 4(即12+4的可靠性)為例來敘述。
[0054]如前文所述,RAID中,邏輯卷下的條帶是貫穿磁盤陣列中所有磁盤上的存儲(chǔ)單元的一種數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)用于在n+m個(gè)磁盤上分布式地存儲(chǔ)η個(gè)數(shù)據(jù)塊和m個(gè)校驗(yàn)塊(各個(gè)數(shù)據(jù)塊和校驗(yàn)塊大小均相同),且這η個(gè)數(shù)據(jù)塊和m個(gè)校驗(yàn)塊具有一致性,即條帶中的數(shù)據(jù)塊和校驗(yàn)塊符合預(yù)設(shè)的不變式。本實(shí)施例中采用里所碼(Reed Solomon,縮寫為RS)作為糾刪碼,此時(shí),前述的預(yù)設(shè)的不變式就是基于RS技術(shù)的不變式。
[0055]圖1示出了 RAID邏輯卷下的一個(gè)條帶,其中每個(gè)方格表示一個(gè)存儲(chǔ)單元,該存儲(chǔ)單元用于存儲(chǔ)一個(gè)數(shù)據(jù)塊或者校驗(yàn)塊,并且,圖1所示的條帶中的存儲(chǔ)單元與磁盤陣列中的磁盤一一對(duì)應(yīng),這樣,該條帶就貫穿了磁盤陣列中所有磁盤。該條帶中,標(biāo)注了字母P的存儲(chǔ)單元表示用于存儲(chǔ)校驗(yàn)塊的存儲(chǔ)單元。
[0056]本實(shí)施例的數(shù)據(jù)存儲(chǔ)方法中,系統(tǒng)的邏輯卷下的每個(gè)條帶均包括三個(gè)邏輯子條帶。圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的條帶中的三個(gè)子條帶,其中每個(gè)方格表示一個(gè)子存儲(chǔ)單元(下文中有時(shí)將子存儲(chǔ)單元稱為chunk,它是本發(fā)明中進(jìn)行數(shù)據(jù)存儲(chǔ)和讀取操作的基本單元),圖2每一列共三個(gè)方格對(duì)應(yīng)于圖1中的一個(gè)方格,即三個(gè)子存儲(chǔ)單元對(duì)應(yīng)于圖1中的一個(gè)存儲(chǔ)單元。
[0057]本實(shí)施例中,每個(gè)子條帶均可以在三個(gè)狀態(tài)間轉(zhuǎn)換,這三個(gè)狀態(tài)分別是空(N),鏡像(M)和糾刪碼(RS)狀態(tài),M狀態(tài)也可以稱為副本狀態(tài),N狀態(tài)也可以稱為備用狀態(tài)。在一個(gè)條帶中,其三個(gè)子條帶中最多具有一個(gè)RS狀態(tài)的子條帶,最多具有一個(gè)Μ狀態(tài)的子條帶,最少具有一個(gè)Ν狀態(tài)的子條帶。
[0058]其中,子條帶進(jìn)入RS狀態(tài)的含義是:該子條帶受到RS校驗(yàn)的保護(hù)。本文中將進(jìn)入RS狀態(tài)的子條帶稱為RS子條帶。如前文所述,在同一條帶內(nèi),三個(gè)子條帶中最多只允許有一個(gè)有效的RS子條帶。當(dāng)某個(gè)時(shí)刻RS子條帶成功生效后,同一條帶中的原有的RS子條帶的數(shù)據(jù)都已經(jīng)沒有價(jià)值,空間可以回收。因此,當(dāng)某個(gè)時(shí)刻RS子條帶成功生效后,同一條帶中的原有RS子條帶轉(zhuǎn)換至Ν狀態(tài)。同理,當(dāng)下一個(gè)RS子條帶生效時(shí),當(dāng)前這個(gè)RS子條帶也會(huì)失效。通過這種方式,即可保持每個(gè)條帶中最多只有一個(gè)RS子條帶。另外,在一個(gè)實(shí)施例中,當(dāng)某個(gè)時(shí)刻RS子條帶成功生效后,該條帶的最新數(shù)據(jù)均全部存儲(chǔ)至新的RS子條帶中,所以同一條帶中的Μ子條帶的數(shù)據(jù)也都失去價(jià)值,其空間也可以回收,即此時(shí)同一條帶中的原有Μ子條帶也轉(zhuǎn)換至Ν狀態(tài)。也就是說,在本實(shí)施例中,當(dāng)某個(gè)時(shí)刻RS子條帶成功生效后,同一條帶中的其它原有子條帶均轉(zhuǎn)換至Ν狀態(tài)。
[0059]子條帶進(jìn)入Μ狀態(tài)的含義是:用戶向一個(gè)條帶寫入鏡像數(shù)據(jù)時(shí),該數(shù)據(jù)會(huì)被寫入至該條帶的Μ子條帶中,從而獲得鏡像保護(hù),本文中將進(jìn)入Μ狀態(tài)的子條帶可稱為Μ子條帶。當(dāng)前如果沒有Μ條帶,則將一個(gè)Ν條帶作為新的Μ條帶并寫入鏡像數(shù)據(jù)。在同一條帶中,最多只允許有1個(gè)Μ子條帶。
[0060]子條帶進(jìn)入Ν狀態(tài)的含義是:該子條帶中沒有數(shù)據(jù),可隨時(shí)存入新的數(shù)據(jù)塊,校驗(yàn)塊或者鏡像塊。本文中將進(jìn)入Ν狀態(tài)的子條帶稱為Ν子條帶。在同一條帶內(nèi),三個(gè)子條帶中至少有一個(gè)Ν子條帶。當(dāng)RS子條帶和Μ子條帶都最多只允許一條時(shí),顯然其中至少有一條Ν子條帶。在某一時(shí)刻,某個(gè)Ν子條帶上可能存放正在寫入但未寫入完成的數(shù)據(jù),這個(gè)正在寫入的數(shù)據(jù)可能是鏡像數(shù)據(jù),也可能是一條新的RS全條帶數(shù)據(jù)(RS全條帶數(shù)據(jù)是指具有一致性的η個(gè)數(shù)據(jù)塊和m個(gè)檢驗(yàn)塊);當(dāng)寫入成功之后,N子條帶根據(jù)成功寫入的是鏡像數(shù)據(jù)還是RS數(shù)據(jù)相應(yīng)地轉(zhuǎn)化為Μ子條帶或者RS子條帶。
[0061]本實(shí)施例中,對(duì)于每個(gè)條帶,還為其分配用于存儲(chǔ)副本(即用于實(shí)現(xiàn)鏡像保護(hù))的mXn個(gè)子存儲(chǔ)單元(用于存儲(chǔ)副本的子存儲(chǔ)單元大小與條帶中子存儲(chǔ)單元一致),Μ子條帶中的每個(gè)數(shù)據(jù)塊子存儲(chǔ)單元均對(duì)應(yīng)于m個(gè)用于存儲(chǔ)副本的子存儲(chǔ)單元。圖3示出了具有副本存儲(chǔ)功能的一個(gè)條帶的存儲(chǔ)結(jié)構(gòu),其中包括三個(gè)子條帶和四列副本存儲(chǔ)空間。每列副本存儲(chǔ)空間具有η個(gè)子存儲(chǔ)單元,且該列副本存儲(chǔ)空間位于用于存儲(chǔ)校驗(yàn)塊的子存儲(chǔ)單元正下方,為便于描述,下文中有時(shí)將用于存儲(chǔ)校驗(yàn)塊的子存儲(chǔ)單元稱為校驗(yàn)子單元,將前述副本存儲(chǔ)空間稱為豎條帶,四列副本存儲(chǔ)空間就是四個(gè)豎條帶。圖3中,標(biāo)記Ρ的方格代表用于存儲(chǔ)檢驗(yàn)塊的子存儲(chǔ)單元,標(biāo)記Μ的方格代表三個(gè)子條帶下方用于存儲(chǔ)副本的子存儲(chǔ)單元(為便于描述,下文稱為副本子單元或者鏡像子單元)。參考圖3,當(dāng)有數(shù)據(jù)塊存入該條帶的Μ子條帶時(shí),該數(shù)據(jù)塊會(huì)被同時(shí)存儲(chǔ)到與其對(duì)應(yīng)的m個(gè)副本子單元中,具體的對(duì)應(yīng)方式將在下文中進(jìn)一步地說明。
[0062]進(jìn)一步地,本實(shí)施例中,四個(gè)條帶組成一組,條帶組中將糾刪碼子條帶的校驗(yàn)子單元順序輪轉(zhuǎn),使得數(shù)據(jù),校驗(yàn)信息和鏡像均勻的分布在所有的磁盤上。圖4示出了一組條帶的一個(gè)輪轉(zhuǎn)周期的示意圖。圖5示出了增加了副本存儲(chǔ)區(qū)的由四個(gè)條帶組成的條帶組,其中用不同的灰度來區(qū)分不同的條帶及其所屬副本存儲(chǔ)區(qū),即相鄰條帶的鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū)也隨著糾刪碼子條帶的校驗(yàn)子單元順序輪轉(zhuǎn)。這樣,每個(gè)條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū)正好錯(cuò)開。在優(yōu)選實(shí)施例中,存儲(chǔ)系統(tǒng)以條帶組尺寸的整倍數(shù)來劃分存儲(chǔ)容量。
[0063]以上結(jié)合實(shí)施例介紹了本發(fā)明的條帶和條帶組的存儲(chǔ)單元布局,下面再進(jìn)一步地描述基于上述布局的數(shù)據(jù)讀寫方法及其技術(shù)效果。
[0064]在一個(gè)實(shí)施例中,寫數(shù)據(jù)的形式包括滿條帶寫和不滿條帶寫。當(dāng)磁盤陣列接收到以大小為全條帶數(shù)據(jù)量(即前文所述的η個(gè)數(shù)據(jù)塊大小)的寫請(qǐng)求時(shí),系統(tǒng)直接計(jì)算η個(gè)數(shù)據(jù)塊的m個(gè)校驗(yàn)塊,并將數(shù)據(jù)塊和校驗(yàn)塊寫為糾刪碼子條帶,以節(jié)省系統(tǒng)容量和帶寬方面的開銷。這種寫入方式可稱為滿條帶寫。當(dāng)寫入數(shù)據(jù)較小時(shí),例如需要寫入的數(shù)據(jù)量未達(dá)到全條帶數(shù)據(jù)量時(shí),系統(tǒng)采用副本方式放置數(shù)據(jù),即將數(shù)據(jù)存儲(chǔ)至M子條帶及其對(duì)應(yīng)的副本存儲(chǔ)區(qū)。本發(fā)明中將這種寫入方式可稱為不滿條帶寫。如前文所述,每個(gè)子條帶以一定的粒度分為n+m個(gè)chunk(即子單元)。圖6示出了一次不滿條帶寫中鏡像操作的示意圖,其中假設(shè)第一個(gè)子條帶為M子條帶,當(dāng)要寫第4個(gè)chunk時(shí),同時(shí)下發(fā)m個(gè)鏡像寫。如圖6所示,M子條帶上每個(gè)chunk對(duì)應(yīng)的鏡像數(shù)據(jù)必定在對(duì)應(yīng)于該條帶的校驗(yàn)所在磁盤上,即M子條帶上每個(gè)chunk對(duì)應(yīng)的鏡像數(shù)據(jù)均存儲(chǔ)于校驗(yàn)磁盤上。這是因?yàn)?如果鏡像數(shù)據(jù)存放在非校驗(yàn)磁盤上,那么一個(gè)M子條帶上的某chunk必定存在兩份副本在同一個(gè)磁盤上。這樣當(dāng)M-1個(gè)磁盤失效時(shí),該chunk的數(shù)據(jù)全部丟失,這樣就無法確保系統(tǒng)的可靠性為N+M。
[0065]圖7示出了本發(fā)明一個(gè)實(shí)施例的基于圖5所示的存儲(chǔ)結(jié)構(gòu)的寫流程,具體包括下列步驟:
[0066]步驟101:接收寫請(qǐng)求。本實(shí)施例中,寫請(qǐng)求既可以是寫入新數(shù)據(jù)的請(qǐng)求,也可以是對(duì)原有數(shù)據(jù)的修改請(qǐng)求。當(dāng)寫請(qǐng)求是對(duì)原有數(shù)據(jù)的修改請(qǐng)求時(shí),需要先找到原有數(shù)據(jù)的存儲(chǔ)位置,即存儲(chǔ)原有數(shù)據(jù)的條帶和相應(yīng)的存儲(chǔ)單元,所找到的條帶被作為當(dāng)前條帶。當(dāng)寫請(qǐng)求是寫入新數(shù)據(jù)的請(qǐng)求時(shí),則任取一個(gè)尚未存儲(chǔ)數(shù)據(jù)的條帶作為當(dāng)前條帶。
[0067]步驟102:判斷所述寫請(qǐng)求是否為滿條帶寫,如果是,進(jìn)入步驟103,否則,進(jìn)入步驟 108。
[0068]步驟103:基于需要寫入的η個(gè)原始數(shù)據(jù)塊,計(jì)算出額外的m個(gè)冗余校驗(yàn)塊,從而得到具有n+m可靠性的全條帶數(shù)據(jù)。
[0069]步驟104:對(duì)于當(dāng)前選定的將要寫入數(shù)據(jù)的條帶,根據(jù)該條帶的三個(gè)子條帶的當(dāng)前狀態(tài),確定該條帶的N子條帶位置。上述步驟103和104的順序可以互換。
[0070]步驟105:下發(fā)對(duì)N子條帶的N個(gè)原始數(shù)據(jù)塊以及M個(gè)冗余校驗(yàn)數(shù)據(jù)塊的寫請(qǐng)求。
[0071]步驟106:修改步驟104所選條帶中三個(gè)子條帶的狀態(tài)。被寫入新數(shù)據(jù)的N子條帶轉(zhuǎn)為RS子條帶,其余子條帶標(biāo)為N子條帶。例如,當(dāng)寫入數(shù)據(jù)前三個(gè)子條帶狀態(tài)分別為N,M,RS時(shí),寫成功后三個(gè)子條帶狀態(tài)分別變更為RS,N,N狀態(tài)。
[0072]步驟107:寫成功后,通過unmap操作清空步驟104所選條帶中的原M子條帶和RS子條帶上的數(shù)據(jù)。步驟106和107執(zhí)行完之后,執(zhí)行步驟112。另外,本步驟實(shí)際上是通過unmap操作將除了新RS子條帶外的其余子條帶都清空,如果原先只有N條帶,可以跳過本步驟,直接執(zhí)行步驟112。
[0073]上述步驟105至107可看作滿條帶寫的過程,該過程中,由于新的全條帶數(shù)據(jù)不覆蓋原RS子條帶上的數(shù)據(jù),因此能夠避免類RAID5系統(tǒng)中典型的WriteHole問題。
[0074]步驟108:判斷所選條帶中是否存在M子條帶,如果是,進(jìn)入步驟110,否則,進(jìn)入步驟 109。
[0075]步驟109:選擇一個(gè)N子條帶作為新的Μ子條帶,然后繼續(xù)執(zhí)行步驟110。
[0076]步驟110:下發(fā)對(duì)鏡像子條帶及對(duì)應(yīng)豎條帶上m個(gè)鏡像位置的寫請(qǐng)求。
[0077]步驟111:寫成功后,修改鏡像子條帶對(duì)應(yīng)的位圖(即bitmap),位圖表明Μ子條帶上哪些位置有數(shù)據(jù)。
[0078]上述步驟108至111可看作不滿條帶寫的過程,一方面,該過程中新的數(shù)據(jù)不覆蓋原RS子條帶上的數(shù)據(jù),因此能夠避免類RAID5系統(tǒng)中典型的WriteHole問題,另一方面,此時(shí)的寫操作不需要讀取數(shù)據(jù)和計(jì)算校驗(yàn)塊等過程,因此能夠提高系統(tǒng)的寫性能。
[0079]步驟112:向上返回成功,本次寫操作完畢。
[0080]圖8示出了本發(fā)明一個(gè)實(shí)施例中基于圖5所示的存儲(chǔ)結(jié)構(gòu)的讀流程,具體包括下列步驟:
[0081]步驟201:接收讀請(qǐng)求。本實(shí)施例中,假定要讀取數(shù)據(jù)的位置(地址)已知,即要讀取的條帶已知。
[0082]步驟202:對(duì)于要讀取的條帶,獲得該條帶的三個(gè)子條帶狀態(tài)。
[0083]步驟203:判斷要讀取的當(dāng)前條帶中是否存在Μ子條帶,如果判斷為是,進(jìn)入步驟204,否則,進(jìn)入步驟207。
[0084]步驟204:獲得Μ子條帶的位圖信息。
[0085]步驟205:判斷位圖中對(duì)應(yīng)的子單元位(chunk位)是否為1 (本實(shí)施例中,1表示有效,即相應(yīng)的子單元中有數(shù)據(jù)),如果是,進(jìn)入步驟206,否則,進(jìn)入步驟207。
[0086]步驟206:讀取Μ子條帶中對(duì)應(yīng)的子單元,然后執(zhí)行步驟208。本步驟中,可以從Μ子條帶中對(duì)應(yīng)的子單元的m個(gè)位于豎條帶的副本位置同步讀取數(shù)據(jù),從而提高讀速率。
[0087]步驟207:讀取RS子條帶中對(duì)應(yīng)的子單元,然后執(zhí)行步驟208。
[0088]步驟208:向上層返回?cái)?shù)據(jù),本次讀操作完畢。
[0089]可以看出,圖6所示的存儲(chǔ)結(jié)構(gòu)中,無論新寫入的數(shù)據(jù)是需要鏡像的小寫(不滿條帶寫)數(shù)據(jù),還是無需鏡像的滿條帶寫數(shù)據(jù),均有其存放的位置。對(duì)于一個(gè)條帶,在任一時(shí)亥IJ,其各個(gè)子條帶分別承擔(dān)著明確的角色,因此在任一時(shí)刻,3個(gè)子條帶的狀態(tài)是確定的。并且,基于三子條帶加豎條帶的設(shè)計(jì),對(duì)于每個(gè)條帶,除了三個(gè)連續(xù)的的子條帶(每個(gè)子條帶由n+m個(gè)子單元構(gòu)成)空間外,還為Μ子條帶預(yù)留了邏輯空間大小為mXn的副本空間(即豎條帶)。豎條帶正好分布在子條帶的P (即校驗(yàn)塊)所在的盤上。這種副本數(shù)據(jù)塊分布允許任意4個(gè)盤損壞后副本數(shù)據(jù)仍然是完整的,從而保障了不滿條帶寫數(shù)據(jù)的高可靠性。
[0090]另外,在系統(tǒng)運(yùn)行期間,當(dāng)條帶長時(shí)間未寫入新數(shù)據(jù)時(shí),將該條帶的Μ子條帶上的數(shù)據(jù)和RS子條帶上的數(shù)據(jù)進(jìn)行合并,合并后的數(shù)據(jù)作為一個(gè)滿條帶寫操作寫入空子條帶中,并將該空子條帶作為新的RS子條帶,原Μ子條帶和RS子條帶轉(zhuǎn)換為空子條帶。
[0091]對(duì)于(n+m)的糾刪碼設(shè)計(jì),本發(fā)明的一個(gè)輪轉(zhuǎn)所需的條帶個(gè)數(shù)為:最小公倍數(shù)(11+111,111)/111,對(duì)于每個(gè)糾刪碼條帶,需要3(11+111)的糾刪碼邏輯空間(即三個(gè)子條帶的邏輯空間)和nm的鏡像數(shù)據(jù)空間。這樣的存儲(chǔ)空間占用量遠(yuǎn)遠(yuǎn)小于副本技術(shù)的占用量。并且,隨著時(shí)間的推移,冷卻下來的條帶的Μ子條帶和RS子條帶的數(shù)據(jù)會(huì)自動(dòng)合并,使得存儲(chǔ)空間占用量進(jìn)一步降低。當(dāng)系統(tǒng)采用64位的地址空間時(shí),假設(shè)系統(tǒng)最多支持的校驗(yàn)塊數(shù)目m =5,那么需要的邏輯空間最多為原來的8倍,需要多占用3位地址空間,這對(duì)64位空間而言可以接受的。也就是說,本發(fā)明能夠利用較小的存儲(chǔ)空間開銷,實(shí)現(xiàn)較高的可靠性,同時(shí)顯著提升I/O性能。
[0092]另外,需要說明的是,本發(fā)明并不限于三個(gè)子條帶的存儲(chǔ)結(jié)構(gòu),在其它一些實(shí)施例中,每個(gè)條帶也可以僅包含兩個(gè)子條帶。例如,在一個(gè)實(shí)施例中,每個(gè)條帶由糾刪碼子條帶和空子條帶組成,在存儲(chǔ)數(shù)據(jù)時(shí),當(dāng)需要寫入的數(shù)據(jù)是全條帶數(shù)據(jù)時(shí),將所述全條帶數(shù)據(jù)寫入當(dāng)前條帶的空子條帶,寫入完畢后將該空子條帶轉(zhuǎn)換為糾刪碼子條帶;在新的糾刪碼子條帶生效后,將當(dāng)前條帶的原有糾刪碼子條帶轉(zhuǎn)換為空子條帶。該方案可以解決現(xiàn)有技術(shù)中所存在的WriteHole問題。又例如,在另一個(gè)實(shí)施例中,每個(gè)條帶由糾刪碼子條帶和鏡像子條帶(邏輯卷中具有與鏡像子條帶對(duì)應(yīng)的副本存儲(chǔ)區(qū))組成,在存儲(chǔ)數(shù)據(jù)時(shí),當(dāng)需要寫入的數(shù)據(jù)是全條帶數(shù)據(jù)時(shí),將所述全條帶數(shù)據(jù)寫入當(dāng)前條帶的糾刪碼子條帶;所述全條帶數(shù)據(jù)是所述的滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;當(dāng)需要寫入的數(shù)據(jù)是非全條帶數(shù)據(jù)時(shí),將所述非全條帶數(shù)據(jù)寫入當(dāng)前條帶的鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。該方案可以解決現(xiàn)有糾刪碼存儲(chǔ)技術(shù)中對(duì)原有糾刪碼條帶數(shù)據(jù)進(jìn)行部分修改時(shí)所存在的延遲較高的問題,同時(shí)還能幫助提高基于糾刪碼的存儲(chǔ)系統(tǒng)的I/O性能。
[0093]最后應(yīng)說明的是,以上實(shí)施例僅用以描述本發(fā)明的技術(shù)方案而不是對(duì)本技術(shù)方法進(jìn)行限制,本發(fā)明在應(yīng)用上可以延伸為其它的修改、變化、應(yīng)用和實(shí)施例,并且因此認(rèn)為所有這樣的修改、變化、應(yīng)用、實(shí)施例都在本發(fā)明的精神和教導(dǎo)范圍內(nèi)。
【權(quán)利要求】
1.一種基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;其特征在于,每個(gè)所述條帶包括空子條帶和糾刪碼子條帶;所述基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法包括下列步驟: 1)確定需要寫入數(shù)據(jù)的條帶并將其作為當(dāng)前條帶; 2)當(dāng)需要寫入的數(shù)據(jù)是全條帶數(shù)據(jù)時(shí),將所述全條帶數(shù)據(jù)寫入當(dāng)前條帶的空子條帶,寫入完畢后將該空子條帶轉(zhuǎn)換為糾刪碼子條帶;所述全條帶數(shù)據(jù)是所述的滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊; 3)在新的糾刪碼子條帶生效后,將當(dāng)前條帶的原有糾刪碼子條帶轉(zhuǎn)換為空子條帶。
2.根據(jù)權(quán)利要求1所述的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述每個(gè)所述條帶還包括鏡像子條帶,所述邏輯卷還包括副本存儲(chǔ)區(qū); 所述基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法還包括步驟: 4)當(dāng)需要寫入的數(shù)據(jù)是非全條帶數(shù)據(jù)時(shí),將所述非全條帶數(shù)據(jù)寫入當(dāng)前條帶的鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。
3.根據(jù)權(quán)利要求2所述的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述步驟3)還包括:在新的糾刪碼子條帶生效后,將當(dāng)前條帶的原有鏡像子條帶轉(zhuǎn)換為空子條帶; 所述步驟4)還包括:如果當(dāng)前條帶中沒有鏡像子條帶,則選擇任意一個(gè)空子條帶作為鏡像子條帶,將所述非全條帶數(shù)據(jù)寫入該鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。
4.根據(jù)權(quán)利要求3所述的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其特征在于,每個(gè)所述條帶包括η個(gè)數(shù)據(jù)塊存儲(chǔ)單元和m個(gè)校驗(yàn)塊存儲(chǔ)單元,對(duì)于空子條帶,糾刪碼子條帶和鏡像子條帶中的任意一種子條帶,每個(gè)子條帶均包括η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元和m個(gè)校驗(yàn)塊子存儲(chǔ)單元; 所述步驟4)中,所述鏡像子條帶中的每個(gè)數(shù)據(jù)塊子存儲(chǔ)單元均對(duì)應(yīng)于所述副本存儲(chǔ)區(qū)的m個(gè)用于存儲(chǔ)副本的子存儲(chǔ)單元。
5.根據(jù)權(quán)利要求4所述的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述步驟4)中,每個(gè)所述鏡像子條帶對(duì)應(yīng)于m列豎條帶,這m列豎條帶作為該鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū),這m列豎條帶分別與該鏡像子條帶中的m個(gè)校驗(yàn)塊子存儲(chǔ)單元處于同一列;每列豎條帶包括η個(gè)副本子存儲(chǔ)單元,這η個(gè)副本子存儲(chǔ)單元分別對(duì)應(yīng)于所述鏡像子條帶中的η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元。
6.根據(jù)權(quán)利要求5所述的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述邏輯卷中,相鄰條帶的校驗(yàn)塊存儲(chǔ)單元的位置順序輪轉(zhuǎn),這樣,相鄰條帶的鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū)的位置也順序輪轉(zhuǎn)。
7.一種基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;其特征在于,每個(gè)所述條帶包括糾刪碼子條帶和鏡像子條帶,所述邏輯卷還包括副本存儲(chǔ)區(qū);所述基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法包括下列步驟: 10)確定需要寫入數(shù)據(jù)的條帶并將其作為當(dāng)前條帶; 20)當(dāng)需要寫入的數(shù)據(jù)是全條帶數(shù)據(jù)時(shí),將所述全條帶數(shù)據(jù)寫入當(dāng)前條帶的糾刪碼子條帶;所述全條帶數(shù)據(jù)是所述的滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊; 30)當(dāng)需要寫入的數(shù)據(jù)是非全條帶數(shù)據(jù)時(shí),將所述非全條帶數(shù)據(jù)寫入當(dāng)前條帶的鏡像子條帶,寫入所述鏡像子條帶的數(shù)據(jù)塊被鏡像至對(duì)應(yīng)的副本存儲(chǔ)區(qū)。
8.根據(jù)權(quán)利要求7所述的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其特征在于,每個(gè)所述條帶包括η個(gè)數(shù)據(jù)塊存儲(chǔ)單元和m個(gè)校驗(yàn)塊存儲(chǔ)單元,對(duì)于空子條帶,糾刪碼子條帶和鏡像子條帶中的任意一種子條帶,每個(gè)子條帶均包括η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元和m個(gè)校驗(yàn)塊子存儲(chǔ)單元; 所述步驟4)中,所述鏡像子條帶中的每個(gè)數(shù)據(jù)塊子存儲(chǔ)單元均對(duì)應(yīng)于所述副本存儲(chǔ)區(qū)的m個(gè)用于存儲(chǔ)副本的子存儲(chǔ)單元。
9.根據(jù)權(quán)利要求8所述的基于磁盤陣列的數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述步驟4)中,每個(gè)所述鏡像子條帶對(duì)應(yīng)于m列豎條帶,這m列豎條帶作為該鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū),這m列豎條帶分別與該鏡像子條帶中的m個(gè)校驗(yàn)塊子存儲(chǔ)單元處于同一列;每列豎條帶包括η個(gè)副本子存儲(chǔ)單元,這η個(gè)副本子存儲(chǔ)單元分別對(duì)應(yīng)于所述鏡像子條帶中的η個(gè)數(shù)據(jù)塊子存儲(chǔ)單元; 所述邏輯卷中,相鄰條帶的校驗(yàn)塊存儲(chǔ)單元的位置順序輪轉(zhuǎn),這樣,相鄰條帶的鏡像子條帶所對(duì)應(yīng)的副本存儲(chǔ)區(qū)的位置也順序輪轉(zhuǎn)。
10.—種基于磁盤陣列的數(shù)據(jù)讀取方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;其特征在于,每個(gè)所述條帶包括空子條帶,糾刪碼子條帶和鏡像子條帶,所述邏輯卷還包括用于存儲(chǔ)寫入所述鏡像子條帶的數(shù)據(jù)塊的鏡像的副本存儲(chǔ)區(qū);其特征在于,包括下列步驟: a)對(duì)于要讀取的任意一個(gè)條帶的任意存儲(chǔ)位置,優(yōu)先從該條帶的鏡像子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù); b)如果所述鏡像子條帶中的相應(yīng)存儲(chǔ)位置為空,則從同一條帶的糾刪碼子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù)。
11.一種基于磁盤陣列的數(shù)據(jù)讀取方法,所述磁盤陣列包括至少一個(gè)邏輯卷,所述邏輯卷包括多個(gè)條帶,其中每個(gè)所述條帶能夠存儲(chǔ)滿足糾刪碼不變式的一組數(shù)據(jù)塊及其校驗(yàn)塊;其特征在于,每個(gè)所述條帶包括糾刪碼子條帶和鏡像子條帶,所述邏輯卷還包括用于存儲(chǔ)寫入所述鏡像子條帶的數(shù)據(jù)塊的鏡像的副本存儲(chǔ)區(qū);其特征在于,包括下列步驟: a)對(duì)于要讀取的任意一個(gè)條帶的任意存儲(chǔ)位置,優(yōu)先從該條帶的鏡像子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù); b)如果所述鏡像子條帶中的相應(yīng)存儲(chǔ)位置為空,則從同一條帶的糾刪碼子條帶的相應(yīng)存儲(chǔ)位置讀取數(shù)據(jù)。
【文檔編號(hào)】G06F3/06GK104503706SQ201410810681
【公開日】2015年4月8日 申請(qǐng)日期:2014年12月23日 優(yōu)先權(quán)日:2014年12月23日
【發(fā)明者】何文婷, 劉振軍, 劉瀏, 董歡慶, 張軍偉, 蔡杰明, 楊琳 申請(qǐng)人:中國科學(xué)院計(jì)算技術(shù)研究所, 天津中科藍(lán)鯨信息技術(shù)有限公司