專利名稱:一種數(shù)據(jù)重組方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)處理方法,具體涉及一種獨(dú)立冗余磁盤陣列(RAID)的數(shù)據(jù)重組方法。
背景技術(shù):
隨著科學(xué)技術(shù)的飛速發(fā)展與計算機(jī)技術(shù)的普遍應(yīng)用,人們對存儲設(shè)備的性能要求越來越高,RAID技術(shù)已作為一項成熟的技術(shù)廣泛的應(yīng)用于磁盤陣列中。
簡單地說,RAID是把多塊獨(dú)立的物理硬盤按不同方式組合起來形成一個邏輯硬盤組,從而提供了比單個硬盤更高的存儲性能和提供數(shù)據(jù)冗余的技術(shù)。數(shù)據(jù)冗余技術(shù)是指在用戶數(shù)據(jù)一旦發(fā)生損壞后,利用冗余信息可以使損壞數(shù)據(jù)得以恢復(fù),從而保障了用戶數(shù)據(jù)的安全。磁盤陣列因其組成方式不同形成了不同的RAID級別,現(xiàn)在的RAID包括從RAID0到RAID6的七種不同基本級別。另外,還有一些基本RAID級別的組合形式,如RAID0+1為RAID0與RAID1的組合,RAID0+5為RAID0與RAID5的組合。不同RAID級別代表不同的存儲性能、數(shù)據(jù)安全性和存儲成本。比如RAID0將數(shù)據(jù)分成許多塊,然后并行地將它們寫到磁盤陣列中的各個硬盤上;讀出數(shù)據(jù)時,RAID控制器從各個硬盤上讀取數(shù)據(jù),把這些數(shù)據(jù)恢復(fù)為原來順序后傳給主機(jī)。這種方法的優(yōu)點(diǎn)是采用數(shù)據(jù)分塊、并行傳送方式,能夠提高主機(jī)讀寫速度,并且磁盤陣列中存儲空間沒有冗余。但它對系統(tǒng)的可靠性沒有任何提高,任一個硬盤介質(zhì)出現(xiàn)故障時,系統(tǒng)無法恢復(fù)。為了保證數(shù)據(jù)重組過程的安全性,現(xiàn)今的數(shù)據(jù)重組一般采用雙控制器共同工作的方式,即其中一個控制器為正在重組控制器,對數(shù)據(jù)的重組進(jìn)程及主機(jī)讀寫請求等進(jìn)行控制;另一個控制器則為正在重組控制器的備份,當(dāng)正在重組控制器出現(xiàn)錯誤或失效時,此備份控制器可立即接替其工作。
RAID1把磁盤陣列中的硬盤分成相同的兩組,互為鏡像,當(dāng)任一磁盤介質(zhì)出現(xiàn)故障時,可以利用其鏡像上的數(shù)據(jù)恢復(fù),從而提高系統(tǒng)的容錯能力。它對數(shù)據(jù)仍采用分塊后并行傳輸?shù)姆绞?,不僅提高了讀寫速度,也加強(qiáng)了系統(tǒng)的可靠性,但對硬盤的利用率低,冗余度為50%。
RAID3同RAID0一樣,也采用數(shù)據(jù)分塊并行傳送的方法,不同的是它在數(shù)據(jù)分塊之后計算分塊數(shù)據(jù)的奇偶校驗和,然后把分塊數(shù)據(jù)和奇偶校驗信息一并寫到硬盤陣列中。該方法對數(shù)據(jù)的存取速度和可靠性都有所改善,可利用未損壞數(shù)據(jù)盤和奇偶校驗盤上的信息重構(gòu)被損壞的數(shù)據(jù)。RAID3的硬盤利用率比RAID1要高,例如由5個硬盤組成的陣列,冗余度只有20%。不過,由于RAID3的奇偶校驗信息固定存儲在一個硬盤上,使該硬盤負(fù)擔(dān)較重,從而產(chǎn)生新的瓶頸。
RAID5與RAID3所采用的數(shù)據(jù)處理方法相似,所不同的是它把奇偶校驗信息交叉寫到陣列中的每個硬盤上,從而克服了RAID3中的瓶頸問題。
所以對一個RAID來說,它將源于主機(jī)的讀寫請求分散到各個組成該RAID的成員磁盤上,以提高主機(jī)的讀寫性能,并且利用RAID中的校驗數(shù)據(jù)或鏡像數(shù)據(jù)提高系統(tǒng)的冗余性,以便在組成RAID的一個或多個成員磁盤失效后,能通過校驗數(shù)據(jù)或鏡像數(shù)據(jù),恢復(fù)失效成員磁盤上的數(shù)據(jù)。同時一個RAID的讀寫性能及有效存儲大小,與其RAID類型及組成該RAID的成員磁盤數(shù)量也有關(guān)。比如RAID5的寫性能比RAID0+1差,這是因為RAID5寫數(shù)據(jù)時,需要異或重新生成校驗數(shù)據(jù),而RAID0+1只需寫鏡像數(shù)據(jù)。又如RAID 3D+1P和RAID 7D+1P,其中D代表磁盤,D前的數(shù)字代表磁盤數(shù)量;P為校驗數(shù)據(jù),P前的數(shù)字為每分條的校驗數(shù)據(jù)量,由于后者讀寫請求被分散到了更多的RAID成員磁盤上,提高了讀寫的并行性,RAID 7D+1P的讀寫性能相比RAID 3D+1P更好。但是,隨著RAID的性能提高,其成本也隨之增加。比如RAID 7D+1P相比RAID 3D+1P的性能有所提高,但其成員磁盤數(shù)量則由RAID 3D+1P的4個增加到了8個。因此,配置何種RAID類型取決于用戶的應(yīng)用場合、性能及成本要求。并且,在使用過程中,用戶時常根據(jù)需求的變更來動態(tài)調(diào)整原有的RAID類型。比如隨著用戶存儲信息的增加,原有的RAID 3D+1P已無法滿足用戶的需求,用戶可增加一個或多個磁盤到原有的3D+1P系統(tǒng)中,即3D+1P將變成(3+r)D+1P,其中r為新增的磁盤數(shù)量。這樣,既動態(tài)增加了RAID系統(tǒng)的容量,同時也提高了系統(tǒng)的性能。這種操作改變了RAID的級別,與此同時,就需要將原來磁盤陣列上的數(shù)據(jù)重新整理到作為一個整體的新的磁盤陣列上,而這種對數(shù)據(jù)進(jìn)行重新整理的過程就叫做數(shù)據(jù)重組。
一般情況下,在動態(tài)擴(kuò)展或修改RAID類型時,需要重點(diǎn)考慮兩個問題一個是要高效地將原RAID類型的數(shù)據(jù)重組成新RAID類型。另一個就是要保證在數(shù)據(jù)重組過程中,數(shù)據(jù)始終能保持一致性及安全性。
在現(xiàn)有技術(shù)中,有很多專利涉及動態(tài)擴(kuò)展RAID類型時的數(shù)據(jù)重組問題,其中一個有代表性的就是日立公司的專利EP0654736A2,如圖1所示。其數(shù)據(jù)重組的方向為從低地址向高地址逐區(qū)域進(jìn)行。重組過程中,先將原類型數(shù)據(jù)以原類型模式讀到高速緩沖存儲器(Cache)中,然后根據(jù)擴(kuò)展后的模式重新生成新校驗數(shù)據(jù),最后將重組后的數(shù)據(jù)按新模式寫入磁盤陣列。具體而言,該方法將所有數(shù)據(jù)按存儲地址分成三個區(qū)域和兩個點(diǎn),其中區(qū)域6040為尚未重組區(qū)域,該區(qū)域仍為原RAID類型,對其訪問必須按照原RAID類型進(jìn)行;區(qū)域6020則為已完成重組區(qū)域,該區(qū)域已為新RAID類型,對其訪問必須按照新RAID類型進(jìn)行;而區(qū)域6030則為正在重組區(qū)域,該區(qū)域RAID類型混亂,對其訪問必須在Cache中進(jìn)行。
兩個點(diǎn)則為6011與6012,其中6011為尚未重組起始點(diǎn),即尚未重組區(qū)域6040的邏輯起始地址;6012為已完成重組結(jié)束點(diǎn),即已完成重組區(qū)域6020的邏輯結(jié)束地址。重組過程中,這兩個點(diǎn)在Cache中保存并動態(tài)更新。
于是,當(dāng)主機(jī)需要讀寫陣列時,對已完成重組部分6020、尚未重組部分6040,分別按照擴(kuò)展前與擴(kuò)展后的模式訪問陣列即可,但對正在重組的部分6030,則在Cache中完成讀寫請求。
這種方法重組效率較高,也能通過重構(gòu)恢復(fù)失效磁盤數(shù)據(jù)的方法,解決重組過程中磁盤失效問題。但是,對數(shù)據(jù)重組操作正在執(zhí)行的區(qū)域而言,如果正按照新RAID類型重組數(shù)據(jù)時RAID控制器突然出現(xiàn)故障,由于原RAID類型區(qū)域中的數(shù)據(jù)已被覆蓋,而該區(qū)域中新RAID類型數(shù)據(jù)的重組操作尚未完成,則該區(qū)域內(nèi)的數(shù)據(jù)將失去原來的完整性與一致性。
另一個同樣具有代表性的數(shù)據(jù)重組技術(shù)就是MYLEX公司的專利WO98/15895。為了防止出現(xiàn)重組過程中原RAID類型數(shù)據(jù)被覆蓋,新RAID類型數(shù)據(jù)尚未完全寫入而造成數(shù)據(jù)無法恢復(fù)的問題,原RAID類型中需要重組的數(shù)據(jù)將被先拷貝到RAID系統(tǒng)的空閑空間,之后再開始重組。圖2說明了其重組思路,圖2中,D1至D3為原RAID類型磁盤陣列,D4為新增磁盤,圖2a至2d分別為數(shù)據(jù)重組過程中不同存儲狀態(tài)的示意圖。
首先,在原RAID類型磁盤中確定一個區(qū)域,一般稱之為破壞區(qū)(Destructive Zone),Destructive Zone的大?。絅×M=2×3=6,即原RAID類型從0至5的區(qū)域,如圖2a所示。
然后,根據(jù)Destructive Zone大小,將D3最后6塊分條數(shù)據(jù)單元(DB)DB1至DB6中的數(shù)據(jù)從下向上拷貝到新增磁盤D4的對應(yīng)位置中,以便在D3中空出一個與Destructive Zone大小相同的空間,如圖2b所示。
接著,將需要重組的Destructive Zone大小的數(shù)據(jù)0至5從下向上拷貝到D3空出的最后6塊數(shù)據(jù)空間中,同時,再將此數(shù)據(jù)拷貝到D4中DB6上方緊鄰的一塊區(qū)域中??截愲p份的目的,主要是為了防止重組過程中出現(xiàn)磁盤失效而丟失數(shù)據(jù),如圖2c所示。
最后,將Destructive Zone中的原RAID類型數(shù)據(jù)重組為新RAID類型數(shù)據(jù),如圖2d所示。
以上操作就是對一定量數(shù)據(jù)進(jìn)行完整重組的過程。其余的重組,全部重復(fù)上述過程,即每次先拷貝雙份將要重組數(shù)據(jù)分別放到D3最后6塊數(shù)據(jù)空間及D4中DB6之上的相同大小數(shù)據(jù)空間中,再將原類型數(shù)據(jù)進(jìn)行重組,如此循環(huán),直至重組完成。
這種數(shù)據(jù)重組方法,有效地解決了數(shù)據(jù)重組過程中可能出現(xiàn)的數(shù)據(jù)不一致問題,提高了數(shù)據(jù)重組的安全性。但因該方法是將原RAID類型的數(shù)據(jù)備份到別處,在原位置進(jìn)行重組。這樣,對將要重組的數(shù)據(jù)必須經(jīng)過數(shù)次讀寫操作之后,才能進(jìn)行重組,以至于重組的效率被大大降低了。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種獨(dú)立冗余磁盤陣列中的數(shù)據(jù)重組方法,在簡化數(shù)據(jù)重組過程的同時,既保證有較高的安全性又能提高重組效率。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的本發(fā)明公開了一種獨(dú)立冗余磁盤陣列中的數(shù)據(jù)重組方法,在原獨(dú)立冗余磁盤陣列系統(tǒng)高地址側(cè)尾部預(yù)留一塊磁盤空間作為重組區(qū)域,將該預(yù)留重組區(qū)域的高地址作為寫入數(shù)據(jù)的起始地址,并將原獨(dú)立冗余磁盤陣列系統(tǒng)中存有數(shù)據(jù)的高地址作為重組數(shù)據(jù)的起始高地址,該數(shù)據(jù)重組方法還包含以下步驟a.確定當(dāng)前要重組數(shù)據(jù)的低地址,并將當(dāng)前要重組數(shù)據(jù)高地址到低地址之間的數(shù)據(jù)重組為新獨(dú)立冗余磁盤陣列類型數(shù)據(jù);b.將重組后的數(shù)據(jù)從寫入數(shù)據(jù)的起始地址向低地址方向,順序?qū)懭胄陋?dú)立冗余磁盤陣列系統(tǒng)中;c.判斷是否還有數(shù)據(jù)需要重組,如果有,則將當(dāng)前要重組數(shù)據(jù)低地址的鄰接低地址作為下次要重組數(shù)據(jù)的高地址,當(dāng)前寫入數(shù)據(jù)低地址的鄰接低地址作為下次寫入數(shù)據(jù)的起始地址,返回步驟a;否則結(jié)束當(dāng)前重組流程。
所述預(yù)留重組區(qū)域包括至少一塊大小為新獨(dú)立冗余磁盤陣列系統(tǒng)的成員磁盤數(shù)量與原獨(dú)立冗余磁盤陣列系統(tǒng)的成員磁盤數(shù)量的比值向上取整的區(qū)域。
上述方案中,每次進(jìn)行重組的數(shù)據(jù)區(qū)域的大小與預(yù)留重組區(qū)域的大小相同。
步驟a中所述確定要重組數(shù)據(jù)低地址為用當(dāng)前要重組數(shù)據(jù)的高地址減去預(yù)留重組區(qū)域的大小再加1,得到當(dāng)前要重組數(shù)據(jù)的低地址。當(dāng)?shù)玫降囊亟M數(shù)據(jù)的低地址小于0時,將當(dāng)前要重組數(shù)據(jù)的低地址設(shè)置為0。
步驟a還進(jìn)一步包括將當(dāng)前要重組數(shù)據(jù)高地址到低地址之間的數(shù)據(jù)拷貝至高速緩存器,在高速緩存器中重組為新獨(dú)立冗余磁盤陣列類型數(shù)據(jù)。
上述方案中,用指針標(biāo)識每次拷貝到高速緩存器中的數(shù)據(jù)在原獨(dú)立冗余磁盤陣列中的地址,并將此指針鏡像到備份控制器中。用指針標(biāo)識每次完成重組數(shù)據(jù)寫入新獨(dú)立冗余磁盤陣列中的地址。
與現(xiàn)有技術(shù)相比,本發(fā)明所提供的數(shù)據(jù)重組方法將數(shù)據(jù)重組順序改為從高地址向低地址進(jìn)行,將原類型數(shù)據(jù)的拷貝進(jìn)行重組,寫到另外的特定區(qū)域中,大大提高了數(shù)據(jù)重組速度,避免了數(shù)據(jù)重組過程中可能出現(xiàn)的數(shù)據(jù)一致性及完整性因重組過程中控制器出現(xiàn)故障而遭到破壞的情況,保證了數(shù)據(jù)重組過程的安全性。
圖1為現(xiàn)有技術(shù)日立公司的專利EP0654736A2數(shù)據(jù)重組區(qū)域示意圖;圖2為現(xiàn)有技術(shù)MYLEX公司專利WO98/15895數(shù)據(jù)重組方法示意圖;圖3為本發(fā)明數(shù)據(jù)重組方法示意圖;圖4為本發(fā)明數(shù)據(jù)重組流程圖。
具體實施例方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更清楚,下面結(jié)合具體實施方式
對本發(fā)明作進(jìn)一步描述。
如圖3所示,本發(fā)明中需要重組的原RAID系統(tǒng)高地址側(cè)的尾部必須預(yù)留出至少一塊大于等于K個分條的區(qū)域,作為預(yù)留的重組區(qū)域,用來寫入第一次被重組成新類型的數(shù)據(jù);第二次重組完成的數(shù)據(jù)則寫入第一次被重組成新類型的數(shù)據(jù)之上,即相對于上次寫入地址的低地址。
預(yù)留的重組區(qū)域的大小是這樣確定的假定原RAID系統(tǒng)的成員磁盤數(shù)量等于M,新RAID系統(tǒng)的成員磁盤數(shù)量等于N,則預(yù)留重組區(qū)域 ,這里K的單位為分條,符號“ ”表示向上取整。比如原RAID類型是3D+1P,新RAID類型是7D+1P,則 。該區(qū)域最初為一個無數(shù)據(jù)區(qū)域,即沒任何用戶數(shù)據(jù)存在于其中。對常見的RAID系統(tǒng)而言,數(shù)據(jù)成員磁盤數(shù)量最大為7,最小為2,則K最大為4;而分條單元大小最大一般是64K,那么,用戶最大可能預(yù)留大小就等于4×7×64K=1792K。這個空間大小用戶是完全可以接受的,且因為RAID具有冗余性,所以K分條大小的預(yù)留重組區(qū)域中做到無數(shù)據(jù)是沒有問題的。
確定了預(yù)留重組區(qū)域后,即可開始重組。但為了讓數(shù)據(jù)在重組時具有一定的方向性和位置性,還需要有指針的配合設(shè)一指針X。若當(dāng)前正在重組區(qū)域的分條號為從y到y(tǒng)+K-1,那么將y值賦給X,X就指向正在重組區(qū)域的分條號,則在重組過程中,小于X的區(qū)域,都是尚未重組的區(qū)域;大于等于X+K的區(qū)域,都是已經(jīng)完成重組的區(qū)域。
數(shù)據(jù)重組時,其重組方向為從高地址向低地址進(jìn)行,即從原RAID類型最后一個正在使用的分條開始,一直向上重組。每次重組K個分條大小的數(shù)據(jù),直至重組完原RAID類型數(shù)據(jù)的第0號分條,重組既告結(jié)束。
具體過程為重組開始時,首先從原RAID類型中拷貝相當(dāng)于重組區(qū)域大小的數(shù)據(jù)到Cache中,按照新RAID類型進(jìn)行數(shù)據(jù)重組,并重新生成校驗數(shù)據(jù),之后將重組后的新類型數(shù)據(jù)寫入預(yù)留的重組區(qū)域及新增的磁盤空間中,即寫入新RAID中從最高地址到低地址的K個分條大小的數(shù)據(jù)空間中。第二次重組時,首先將鄰接上次重組時拷貝數(shù)據(jù)低地址的相當(dāng)于重組區(qū)域大小的數(shù)據(jù)拷貝到Cache中,按照新RAID類型進(jìn)行數(shù)據(jù)重組,并重新生成校驗數(shù)據(jù),之后將重組后的新類型數(shù)據(jù)寫入上次寫入的數(shù)據(jù)之上,即寫入上次寫入地址的鄰接低地址的相當(dāng)于重組區(qū)域大小的空間中。以后每次對K分條大小的數(shù)據(jù)進(jìn)行重組,均分別由上次拷貝及寫入的鄰接低地址拷貝及寫入,直至重組完原RAID類型數(shù)據(jù)的第0號分條,重組即告結(jié)束。
伴隨重組進(jìn)程,當(dāng)預(yù)留重組區(qū)域及新增磁盤空間與已使用空間中的新、原類型數(shù)據(jù)發(fā)生位置沖突時,已使用空間中的原類型數(shù)據(jù)則被重組后的新類型數(shù)據(jù)所覆蓋,而此時處于被覆蓋位置的這部分原類型數(shù)據(jù)早已被重組為新類型數(shù)據(jù),因而不會影響數(shù)據(jù)重組的安全性。
重組過程中會實時存在主機(jī)請求,即RAID數(shù)據(jù)處理的讀寫請求。對尚未重組的區(qū)域而言,要按照原RAID類型處理讀寫請求;而已經(jīng)重組的區(qū)域,則需按新RAID類型及新分條的位置處理讀寫請求;對于正在重組的區(qū)域,若為讀請求,則按原RAID類型處理;若為寫請求,則只能等待被請求處理數(shù)據(jù)重組完成后,按照新RAID類型及新分條位置進(jìn)行。重組時,若遇到該區(qū)域數(shù)據(jù)正在回寫或透寫,則要等待回寫或透寫完成后才能繼續(xù)進(jìn)行。
另外,為防止重組過程中,正在重組控制器失效造成指針X丟失其指示地址,則每次更新X后,都將其鏡像到另外一個備份控制器中,以便本地RAID控制器失效后,鏡像端RAID控制器能接管操作,從而繼續(xù)完成數(shù)據(jù)重組。
為了能更明確地了解數(shù)據(jù)重組過程,下面以流程圖的方式進(jìn)行介紹,如圖4所示,其中步驟401到403為數(shù)據(jù)重組的準(zhǔn)備工作。數(shù)據(jù)重組的具體流程包括以下步驟步驟401首先在原類型磁盤中確定預(yù)留重組區(qū)域的大??;步驟402確定原類型磁盤中要被重組數(shù)據(jù)的高地址,再根據(jù)預(yù)留重組區(qū)域的大小進(jìn)一步確定原類型磁盤中要被重組數(shù)據(jù)的低地址;步驟403確定第一次被重組之后的數(shù)據(jù)寫入的最高地址,此時的最高地址就是磁盤陣列的最高地址。
步驟404~406確定重組數(shù)據(jù)起始地址以及寫入地址后,對當(dāng)前要被重組數(shù)據(jù)的地址進(jìn)行判斷。一般,每次重組的數(shù)據(jù)大小都是K個分條,每完成一次重組都把要被重組數(shù)據(jù)的地址減K,但由于原類型磁盤中需要重組的數(shù)據(jù)大小不一定均為K的整數(shù)倍,所以每次重組前都要判斷當(dāng)前要重組數(shù)據(jù)的低地址是否小于0。如果當(dāng)前要重組數(shù)據(jù)的低地址不小于0,則表示剩余未被重組數(shù)據(jù)量不小于K個分條,可繼續(xù)重組,那么就進(jìn)入步驟405查詢要被重組數(shù)據(jù)的回寫、透寫狀態(tài),此時要重組數(shù)據(jù)的地址為y~(y+K-1);如果當(dāng)前要重組數(shù)據(jù)的低地址小于0,則進(jìn)入步驟406判斷當(dāng)前要重組數(shù)據(jù)的高地址是否小于0,如果當(dāng)前要重組數(shù)據(jù)的高地址小于0,就表示數(shù)據(jù)已重組完畢,則結(jié)束本次重組流程;否則,就進(jìn)入步驟405查詢要被重組數(shù)據(jù)的回寫、透寫狀態(tài),此時要重組數(shù)據(jù)的地址為0~(y+K-1)。
步驟407判斷要進(jìn)行重組區(qū)域內(nèi)是否有數(shù)據(jù)在回寫或透寫,如果有數(shù)據(jù)在回寫或透寫,則返回步驟405重新查詢;如果沒有數(shù)據(jù)在回寫或透寫,則進(jìn)入步驟408。
步驟408禁止對要被重組數(shù)據(jù)區(qū)域內(nèi)數(shù)據(jù)的回寫、透寫請求,為后續(xù)的數(shù)據(jù)重組操作提供安全的數(shù)據(jù)環(huán)境。實際上步驟404~408的目的就是區(qū)別兩種情況禁止將要重組數(shù)據(jù)的回寫、透寫請求一種情況是,當(dāng)發(fā)現(xiàn)沒有數(shù)據(jù)在回寫、透寫時,立即禁止數(shù)據(jù)的回寫、透寫;另一種情況是,當(dāng)發(fā)現(xiàn)有數(shù)據(jù)正在回寫、透寫時,則需等待數(shù)據(jù)回寫、透寫完畢才能禁止數(shù)據(jù)的回寫、透寫請求。
步驟409把要被重組數(shù)據(jù)拷貝到Cache中按照新RAID類型進(jìn)行重組,并重新生成校驗數(shù)據(jù)。
步驟410Cache對數(shù)據(jù)重組結(jié)束后,將完成重組的數(shù)據(jù)寫到步驟403所確定的磁盤空間中,即從新類型磁盤最高地址到相對低地址的K個分條大小的數(shù)據(jù)空間中;之后把寫入完成重組數(shù)據(jù)的指針地址減K,將新得地址賦值給寫入完成重組數(shù)據(jù)的指針地址,作為下一次寫入完成重組數(shù)據(jù)的指針地址。
至此,對數(shù)據(jù)的一次重組處理已經(jīng)完成,可以取消對數(shù)據(jù)回寫、透寫的禁止,即進(jìn)入步驟411。
步驟412將要被重組數(shù)據(jù)區(qū)域的指針值減K,使指針指向下一次要重組的K分條大小的原類型數(shù)據(jù),并把這個新的指針值保存到備份控制器中,返回步驟404。
此時,一次數(shù)據(jù)重組的完整操作就完成了。如果還留有原類型數(shù)據(jù)需要重組,那么下一次的數(shù)據(jù)重組操作將再次進(jìn)入步驟404判斷當(dāng)前要重組數(shù)據(jù)的低地址是否小于0,如果不小于0,則其后續(xù)操作與上次數(shù)據(jù)重組操作相同;如果當(dāng)前要重組數(shù)據(jù)的低地址小于0,則要進(jìn)入步驟406判斷當(dāng)前要重組數(shù)據(jù)的高地址是否小于0,如果不小于0,就進(jìn)入步驟405查詢要被重組的數(shù)據(jù)的回寫、透寫狀態(tài),之后進(jìn)入步驟407判斷是否有數(shù)據(jù)在回寫或透寫,此后的操作與每次數(shù)據(jù)重組的操作相同。如果在步驟406中的判斷結(jié)果是當(dāng)前要重組數(shù)據(jù)的高地址小于0,那就說明已經(jīng)沒有原類型數(shù)據(jù)需要重組,重組操作既告結(jié)束。
在上述數(shù)據(jù)重組流程中,步驟410與步驟411順序可以互換;指針X也不是必須指向y,只要指針X在每次數(shù)據(jù)重組時能標(biāo)識出原類型磁盤中將要重組數(shù)據(jù)的地址范圍即可。
由本發(fā)明方法可知,本發(fā)明所提供的技術(shù)方法使數(shù)據(jù)在重組過程中保持了其完整性、統(tǒng)一性及安全性。以上所述僅為本發(fā)明的過程及方法實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種獨(dú)立冗余磁盤陣列中的數(shù)據(jù)重組方法,其特征在于,在原獨(dú)立冗余磁盤陣列系統(tǒng)高地址側(cè)尾部預(yù)留一塊磁盤空間作為重組區(qū)域,將該預(yù)留重組區(qū)域的高地址作為寫入數(shù)據(jù)的起始地址,并將原獨(dú)立冗余磁盤陣列系統(tǒng)中存有數(shù)據(jù)的高地址作為重組數(shù)據(jù)的起始高地址,該數(shù)據(jù)重組方法還包含以下步驟a.確定當(dāng)前要重組數(shù)據(jù)的低地址,并將當(dāng)前要重組數(shù)據(jù)高地址到低地址之間的數(shù)據(jù)重組為新獨(dú)立冗余磁盤陣列類型數(shù)據(jù);b.將重組后的數(shù)據(jù)從寫入數(shù)據(jù)的起始地址向低地址方向,順序?qū)懭胄陋?dú)立冗余磁盤陣列系統(tǒng)中;c.判斷是否還有數(shù)據(jù)需要重組,如果有,則將當(dāng)前要重組數(shù)據(jù)低地址的鄰接低地址作為下次要重組數(shù)據(jù)的高地址,當(dāng)前寫入數(shù)據(jù)低地址的鄰接低地址作為下次寫入數(shù)據(jù)的起始地址,返回步驟a;否則結(jié)束當(dāng)前重組流程。
2.如權(quán)利要求1所述的數(shù)據(jù)重組方法,其特征在于,所述預(yù)留重組區(qū)域包括至少一塊大小為新獨(dú)立冗余磁盤陣列系統(tǒng)的成員磁盤數(shù)量與原獨(dú)立冗余磁盤陣列系統(tǒng)的成員磁盤數(shù)量的比值向上取整的區(qū)域。
3.如權(quán)利要求1所述的數(shù)據(jù)重組方法,其特征在于,每次進(jìn)行重組的數(shù)據(jù)區(qū)域的大小與預(yù)留重組區(qū)域的大小相同。
4.如權(quán)利要求1、2或3所述的數(shù)據(jù)重組方法,其特征在于,步驟a中所述確定要重組數(shù)據(jù)低地址為用當(dāng)前要重組數(shù)據(jù)的高地址減去預(yù)留重組區(qū)域的大小再加1,得到當(dāng)前要重組數(shù)據(jù)的低地址。
5.如權(quán)利要求4所述的數(shù)據(jù)重組方法,其特征在于,所得到的要重組數(shù)據(jù)的低地址小于0時,將當(dāng)前要重組數(shù)據(jù)的低地址設(shè)置為0。
6.如權(quán)利要求1、2或3所述的數(shù)據(jù)重組方法,其特征在于,步驟a進(jìn)一步包括將當(dāng)前要重組數(shù)據(jù)高地址到低地址之間的數(shù)據(jù)拷貝至高速緩存器,在高速緩存器中重組為新獨(dú)立冗余磁盤陣列類型數(shù)據(jù)。
7.如權(quán)利要求1所述的數(shù)據(jù)重組方法,其特征在于,該方法進(jìn)一步包括用指針標(biāo)識每次拷貝到高速緩存器中的數(shù)據(jù)在原獨(dú)立冗余磁盤陣列中的地址。
8.如權(quán)利要求7所述的數(shù)據(jù)重組方法,其特征在于,該方法進(jìn)一步包括每次進(jìn)行數(shù)據(jù)重組前,將標(biāo)識要重組數(shù)據(jù)在原獨(dú)立冗余磁盤陣列中地址的指針鏡像到備份控制器中。
9.如權(quán)利要求1所述的數(shù)據(jù)重組方法,其特征在于,該方法進(jìn)一步包括用指針標(biāo)識每次完成重組數(shù)據(jù)寫入新獨(dú)立冗余磁盤陣列中的地址。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)重組方法,在原獨(dú)立冗余磁盤陣列(RAID)系統(tǒng)高地址側(cè)尾部預(yù)留一塊磁盤空間作為重組區(qū)域,將該預(yù)留重組區(qū)域的高地址作為寫入數(shù)據(jù)的起始地址,并將原RAID系統(tǒng)中存有數(shù)據(jù)的高地址作為重組數(shù)據(jù)的起始高地址;數(shù)據(jù)重組完之前重復(fù)執(zhí)行以下步驟確定當(dāng)前要重組數(shù)據(jù)的低地址,并將當(dāng)前要重組數(shù)據(jù)高地址到低地址之間的數(shù)據(jù)重組為新RAID類型數(shù)據(jù);將重組后的數(shù)據(jù)從寫入數(shù)據(jù)的起始地址向低地址方向,順序?qū)懭胄翿AID系統(tǒng)中;當(dāng)前要重組數(shù)據(jù)低地址的鄰接低地址作為下次要重組數(shù)據(jù)的高地址,當(dāng)前寫入數(shù)據(jù)低地址的鄰接低地址作為下次寫入數(shù)據(jù)的起始地址。用戶使用本發(fā)明可保證數(shù)據(jù)重組過程中的安全性,并且重組過程的簡便性也提高了數(shù)據(jù)重組效率。
文檔編號G06F3/06GK1670682SQ20041000894
公開日2005年9月21日 申請日期2004年3月15日 優(yōu)先權(quán)日2004年3月15日
發(fā)明者張巍, 黃玉環(huán), 張國彬, 張粵 申請人:華為技術(shù)有限公司