專利名稱:利用附加和自發(fā)保護在存儲設(shè)備陣列中存儲數(shù)據(jù)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在計算系統(tǒng)中存儲數(shù)據(jù)。更具體而言,本發(fā)明的一些示例涉及以提供防止數(shù)據(jù)丟失的正確保護的方式在存儲設(shè)備陣列中存儲數(shù)據(jù)。
背景技術(shù):
重要數(shù)據(jù)經(jīng)常存儲在計算系統(tǒng)的存儲設(shè)備中。因為存儲設(shè)備會發(fā)生故障并且在發(fā)生故障的存儲設(shè)備中的數(shù)據(jù)會丟失,因此已經(jīng)開發(fā)了用于防止數(shù)據(jù)丟失并且當(dāng)一個或多個存儲設(shè)備發(fā)生故障時恢復(fù)數(shù)據(jù)的技術(shù)。
用于防止數(shù)據(jù)丟失的一種技術(shù)包括在作為存儲陣列的一員的存儲設(shè)備(諸如盤驅(qū)動器)上存儲奇偶校驗信息,并且在所述陣列中的一個或多個其它剩余的存儲設(shè)備上存儲客戶數(shù)據(jù)。(在此可以將盤驅(qū)動器稱為“盤”,它是通常使用中的簡化)。利用這種技術(shù),如果存儲設(shè)備發(fā)生故障,則可以使用奇偶校驗信息來重建在發(fā)生故障的存儲設(shè)備上的數(shù)據(jù)。此外,如果向其它存儲設(shè)備添加了足夠的奇偶校驗信息,則可以使用另外的奇偶校驗信息來重建超過一個發(fā)生故障的存儲設(shè)備中的數(shù)據(jù)。用于防止數(shù)據(jù)丟失的、稱為數(shù)據(jù)鏡像的另一種技術(shù)包括在分離的存儲設(shè)備上進行數(shù)據(jù)的重復(fù)復(fù)制。如果存儲設(shè)備發(fā)生故障,則可以根據(jù)該數(shù)據(jù)副本恢復(fù)數(shù)據(jù)。
可以使用便宜(或獨立)盤的冗余陣列(RAID)來提供具有增強的性能和容量的數(shù)據(jù)存儲系統(tǒng),可以在RAID陣列上實現(xiàn)數(shù)據(jù)鏡像和奇偶校驗信息存儲、或兩者的組合以提供數(shù)據(jù)保護。此外,可以使用被稱為帶化(striping)的技術(shù),其中,將數(shù)據(jù)記錄和奇偶校驗信息劃分為帶(strip)以便帶的數(shù)量等于陣列中盤的數(shù)量。每個帶被寫入或“帶化”到RAID陣列中的每個不同的盤中以平衡在所述盤上的負荷以及改善性能。組成跨越RAID中的所有驅(qū)動器的一條道的一組帶被稱為一個帶幅(stride)。已經(jīng)設(shè)計了幾個RAID協(xié)議,其中采用了不同的鏡像、奇偶校驗和帶化布置。作為示例,在包括6個盤的RAID 5陣列中,在所述6個盤上帶化5個數(shù)據(jù)帶和一個奇偶校驗帶,并且讓奇偶校驗信息在所述盤上循環(huán)。奇偶校驗信息在盤上的循環(huán)確保在這些盤上共享對陣列的奇偶校驗更新。RAID 5提供了冗余度一,這意指如果在該陣列中有且僅有一個盤發(fā)生了故障的話,則可以恢復(fù)所有的數(shù)據(jù)。
雖然已知有用于提供更大的存儲設(shè)備冗余度以允許在超過一個存儲設(shè)備發(fā)生故障后進行數(shù)據(jù)恢復(fù)的多種技術(shù),但是這些技術(shù)一般要求在另外的存儲設(shè)備上存儲另外的奇偶校驗信息(例如通過使用較高的漢明碼),或要求在另外的存儲設(shè)備上的另外鏡像。RAID 6具有類似于RAID 5的布置,但是要求在每個帶幅中有兩個奇偶校驗帶。以提供冗余度二。對于相同的數(shù)據(jù)存儲容量,RAID 6陣列的存儲效率低于RAID 5陣列的效率,這是因為RAID 6需要另外的盤。此外,根據(jù)奇偶校驗信息重建丟失數(shù)據(jù)會是耗時的。因此,已知技術(shù)具有相對于增加容錯和快速數(shù)據(jù)恢復(fù)的需要而必須權(quán)衡的、所不期望的容量和性能折中。
發(fā)明內(nèi)容
按照一個方面,提供了一種用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的方法,所述方法包括步驟將第一帶寫入到第一存儲設(shè)備和第二存儲設(shè)備中;將第二帶寫入到第二存儲設(shè)備和第三存儲設(shè)備中;并且將第三帶寫入到第三存儲設(shè)備和第四存儲設(shè)備中。
優(yōu)選為,至少一個帶是奇偶校驗帶。在一個優(yōu)選實施例中,所述方法還包括步驟設(shè)置參數(shù)N的值,其中,在所述存儲設(shè)備陣列中的每個存儲設(shè)備具有至少N個帶LBA;識別要存儲的帶幅的編號j;確定3j是否小于N-1;并且如果是的話,則將帶s1j寫入到在所述陣列中的第一存儲設(shè)備中的LBA、在所述陣列中的第二存儲設(shè)備中的LBA和在所述陣列中的第三存儲設(shè)備中的LBA中;將帶s2j寫入到所述第二存儲設(shè)備中的LBA、所述第三存儲設(shè)備中的LBA和在所述陣列中的第四存儲設(shè)備中的LBA中;并且將帶s3j寫入到所述第三存儲設(shè)備中的LBA、所述第四存儲設(shè)備中的LBA和在所述陣列中的第五存儲設(shè)備中的LBA中。優(yōu)選為,如果確定3j不小于N-1,則所述操作還包括將帶s1j寫入到所述第一存儲設(shè)備中的LBA中;將帶s2j寫入到所述第二存儲設(shè)備中的LBA中;并且將帶s3j寫入到所述第三存儲設(shè)備中的LBA中。更為優(yōu)選的是,所述操作還包括對于所述存儲設(shè)備陣列中的每個存儲設(shè)備,確定所述存儲設(shè)備中的帶LBA的總數(shù);并且識別帶LBA的最小總數(shù);而且其中,設(shè)置參數(shù)N的值的操作包括將N設(shè)置為等于帶LBA的所述最小總數(shù)。
優(yōu)選為,如果確定3j小于N-1,則所述操作還包括將帶s4j寫入到所述第四存儲設(shè)備中的LBA、所述第五存儲設(shè)備中的LBA和所述陣列中的第六存儲設(shè)備中的LBA中;將帶s5j寫入到所述第五存儲設(shè)備中的LBA、所述第六存儲設(shè)備中的LBA和所述第一存儲設(shè)備中的LBA中;并且將帶s6j寫入到所述第六存儲設(shè)備中的LBA、所述第一存儲設(shè)備中的LBA和所述第二存儲設(shè)備中的LBA中。更為優(yōu)選的是,如果確定3j不小于N-1,則所述操作還包括將帶s4j寫入到所述第四存儲設(shè)備中的LBA中;將帶s5j寫入到所述第五存儲設(shè)備中的LBA中;將帶s6j寫入到所述第六存儲設(shè)備中的LBA中。
在一個優(yōu)選實施例中,所述方法還包括步驟設(shè)置參數(shù)N的值,其中,在所述存儲設(shè)備陣列中的每個存儲設(shè)備具有至少N個帶LBA;識別要存儲的帶幅的編號j;確定3j是否小于N-1;并且如果是的話,則將帶s1j寫入到所述陣列中的第一存儲設(shè)備中的LBAj、在所述陣列中的第二存儲設(shè)備中的LBAj+2和在所述陣列中的第三存儲設(shè)備中的LBAj+1中;將帶s2j寫入到所述第二存儲設(shè)備中的LBAj、所述第三存儲設(shè)備中的LBAj+2和在所述陣列中的第四存儲設(shè)備中的LBAj+1中;并且將帶s3j寫入到所述第三存儲設(shè)備中的LBAj、所述第四存儲設(shè)備中的LBAj+2和在所述陣列中的第五存儲設(shè)備中的LBAj+1中。
優(yōu)選為,如果確定3j不小于N-1,則所述操作還包括將帶s1j寫入到所述第一存儲設(shè)備中的LBA(3j-N+2)中;將帶s2j寫入到所述第二存儲設(shè)備中的LBA(3j-N+2)中;并且將帶s3j寫入到所述第三存儲設(shè)備中的LBA(3j-N+2)中。更為優(yōu)選的是,所述操作還包括對于所述存儲設(shè)備陣列中的每個存儲設(shè)備,確定在所述存儲設(shè)備中的帶LBA的總數(shù);并且識別帶LBA的最小總數(shù);以及其中,設(shè)置參數(shù)N的值的操作包括將N設(shè)置為等于帶LBA的所述最小總數(shù)。
優(yōu)選為,如果確定3j小于N-1,則所述操作還包括將帶s4j寫入到所述第四存儲設(shè)備中的LBAj、所述第五存儲設(shè)備中的LBAj+2、和在所述陣列中的第六存儲設(shè)備中的LBAj+1中;將帶s5j寫入到所述第五存儲設(shè)備中的LBAj、所述第六存儲設(shè)備中的LBAj+2、和在所述陣列的所述第一存儲設(shè)備中的LBAj+1中;并且將帶s6j寫入到所述第六存儲設(shè)備中的LBAj、所述第一存儲設(shè)備中的LBAj+2、和所述第二存儲設(shè)備中的LBAj+1寫入帶s6j。更為優(yōu)選的是,如果確定3j不小于N-1,則所述操作還包括將帶s4j寫入到所述第四存儲設(shè)備中的LBA(3j-N+2)中;將帶s5j寫入到在所述第五存儲設(shè)備中的LBA(3j-N+2)中;將帶s6j寫入到第六存儲設(shè)備中的LBA(3j-N+2)中。
按照第二方面,提供了一種在存儲設(shè)備陣列中存儲數(shù)據(jù)的存儲系統(tǒng),所述系統(tǒng)包括用于向第一存儲設(shè)備和第二存儲設(shè)備寫入第一帶的裝置;用于向所述第二存儲設(shè)備和第三存儲設(shè)備寫入第二帶的裝置;以及,用于向第三存儲設(shè)備和第四存儲設(shè)備寫入第三帶的裝置。
按照第三方面,提供了一種包括程序代碼裝置的計算機程序,該程序代碼裝置適于當(dāng)在計算機上運行所述程序時、執(zhí)行上述方法的所有步驟。
本發(fā)明的一個方面是一種用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的方法。所述方法的一個示例包括向第一存儲設(shè)備和第二存儲設(shè)備寫入第一帶。這個示例還包括向所述第二存儲設(shè)備和第三存儲設(shè)備寫入第二帶。這個示例還包括向第三存儲設(shè)備和第四存儲設(shè)備寫入第三帶。
本發(fā)明的所述方法方面的一些替代示例包括在盤陣列上將數(shù)據(jù)帶幅帶化,在所述陣列的第一盤上寫入或更新帶幅中的第一帶,在第二盤上寫入或更新第二帶,并且對于另外的帶或盤執(zhí)行諸如此類的處理。所述方法另外包括建立由一個盤循環(huán)的每個帶的副本,以便第一個盤具有所述陣列中的最后一個盤中的帶的副本,并且第二盤具有第一盤上的所述帶的副本等。
在下面的部分中描述了本發(fā)明的其它方面,并且所述本發(fā)明的所述其它方面包括例如存儲系統(tǒng)和信號承載介質(zhì),所述信號承載介質(zhì)有形地包括了機器可讀指令程序,該指令程序可由數(shù)字處理裝置執(zhí)行以便執(zhí)行用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的操作。
本發(fā)明的一些示例在不使用除了在基本RAID配置中的存儲設(shè)備之外的存儲設(shè)備的情況下,有益地提供了比由基本RAID配置提供的容錯性更高的存儲設(shè)備容錯性。因此,本發(fā)明的一些示例通過僅僅使用RAID中的可用盤空間而在給定數(shù)量的盤的基本RAID碼之上增加了另外的冗余。另外,本發(fā)明的一些示例有益地在作為以高故障率為特征的使用時段的、存儲設(shè)備的早期使用期間提供了較高的容錯性。此外,本發(fā)明的一些示例允許迅速恢復(fù)數(shù)據(jù)。本發(fā)明也提供了多個其它優(yōu)點和益處,它們通過下面的說明而變得顯而易見。
圖1是根據(jù)本發(fā)明的一個示例的存儲系統(tǒng)的硬件裝置和互連的框圖。
圖2是根據(jù)本發(fā)明的一個示例的計算裝置的硬件裝置和互連的框圖。
圖3是根據(jù)本發(fā)明的一個示例的信號承載介質(zhì)的示例。
圖4是根據(jù)本發(fā)明的一個示例的、用于備份數(shù)據(jù)的操作序列的流程圖。
圖5是根據(jù)本發(fā)明的一個示例、用于在帶幅內(nèi)提供帶的一個循環(huán)副本的映射算法。
圖6是根據(jù)本發(fā)明的一個示例、用于在帶幅內(nèi)提供帶的一個循環(huán)副本的映射表。
圖7是根據(jù)本發(fā)明的一個示例、用于在帶幅內(nèi)提供帶的兩個循環(huán)副本的映射算法。
圖8是根據(jù)本發(fā)明的一個示例、用于在帶幅內(nèi)提供帶的兩個循環(huán)副本的映射表。
圖9是根據(jù)本發(fā)明的一個示例的保留LBA區(qū)映射的示例。
圖10是根據(jù)本發(fā)明的一個示例、使用保留區(qū)和用于在帶幅內(nèi)提供帶的一個循環(huán)副本的先入先出(FIFO)算法的映射表。
圖11A-11B是根據(jù)本發(fā)明的一個示例、用于備份數(shù)據(jù)的操作序列的流程圖。
圖12是根據(jù)本發(fā)明的一個示例、在盤陣列中存儲數(shù)據(jù)和數(shù)據(jù)副本的表示。
圖13是根據(jù)本發(fā)明的一個示例、重建盤陣列中的數(shù)據(jù)的表示。
圖14是根據(jù)本發(fā)明的一個示例、重建盤陣列中的數(shù)據(jù)的表示。
圖15是根據(jù)本發(fā)明的一個示例、重建盤陣列中的數(shù)據(jù)的表示。
圖16是示出在具有一個循環(huán)副本的情況下,根據(jù)本發(fā)明的一個示例、受保護以防止任何兩個硬盤驅(qū)動器出故障的數(shù)據(jù)百分比的圖。
圖17是示出在具有兩個循環(huán)副本的情況下,根據(jù)本發(fā)明的一個示例、受保護防止任何三個硬盤驅(qū)動器出故障的數(shù)據(jù)百分比的圖。
具體實施例方式
在結(jié)合附圖考慮了下面的詳細說明之后,對于本領(lǐng)域的技術(shù)人員而言,本發(fā)明的特性、目的和優(yōu)點將變得更清楚。
I.硬件裝置和互連本發(fā)明的一個方面是一種用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的存儲系統(tǒng)。作為示例,所述存儲系統(tǒng)可以由圖1中所示的存儲系統(tǒng)100的全部或者一部分實現(xiàn)。作為示例,可以主要使用由國際商業(yè)機器公司制造的型號800的企業(yè)存儲服務(wù)器(Enterprise Storage Server,ESS)來實現(xiàn)存儲系統(tǒng)100。
所述存儲系統(tǒng)100包括第一集群102和第二集群104。在替代實施例中,存儲系統(tǒng)100可以具有單個集群或者兩個以上的集群。每個集群具有至少一個處理器。作為示例,每個集群可以具有四個或六個處理器。在圖1所示的示例中,第一集群102具有6個處理器106a、106b、106c、106d、106e和106f,而第二集群104也具有6個處理器108a、108b、108c、108d、108e和108f。可以使用任何具有足夠計算能力的處理器。作為示例,每個處理器106a-f、108a-f可以是由國際商業(yè)機器公司制造的PowerPC RISC處理器。第一集群102還包括第一存儲器110,并且類似地,第二集群104包括第二存儲器112。作為示例,存儲器110、112可以是RAM。可以使用存儲器110、112來存儲例如數(shù)據(jù),以及由處理器106a-f、108a-f執(zhí)行的應(yīng)用程序和其它編程指令。這兩個集群102、104可以位于單個外殼中或分離的外殼中。在替代實施例中,每個集群102、104可以被替代為超級計算機、大型計算機、計算機工作站和/或個人計算機。
第一集群102耦接到NVRAM 114(非易失性隨機存取存儲器),NVRAM114包括第一組設(shè)備適配器DA1、DA3、DA5、DA7(如下文所述)。類似地,第二集群104耦接到NVRAM 116,NVRAM 116包括第二組設(shè)備適配器DA2、DA4、DA6、DA8(如下文所述)。另外,第一集群102耦接到NVRAM 116,且第二集群104耦接到NVRAM 114。作為示例,由集群102操作的數(shù)據(jù)存儲在存儲器110中,并且也存儲在NVRAM 116中,以便如果集群102變得不可操作,則數(shù)據(jù)將不會丟失并且可以由集群104操作。類似地,作為示例,由集群104操作的數(shù)據(jù)存儲在存儲器112中,并且也存儲在NVRAM 114中,以便如果集群104變得不可操作,則數(shù)據(jù)將不會丟失并且可以由集群102操作。NVRAM 114、116可以例如能夠在沒有電的情況下保留數(shù)據(jù)長達大約48小時。
在第一集群102中,處理器106a-f中的兩個或多個處理器可以匯集在一起以便在相同的任務(wù)上工作。但是,可以在處理器106a-f之間劃分任務(wù)。類似地,在第二集群104中,處理器108a-f中的兩個或多個處理器可以匯集在一起以便在相同的任務(wù)工作。作為選擇,可以在處理器108a-f之間劃分任務(wù)。對于兩個集群102、104之間的交互,集群102、104可以獨立地對任務(wù)起作用。但是,可以由不同集群102、104中的處理器106a-f共享任務(wù)。
第一集群102耦接到第一引導(dǎo)(boot)設(shè)備如第一硬盤驅(qū)動器118。類似地,第二集群104耦接到第二引導(dǎo)設(shè)備如第二硬盤驅(qū)動器120。
每個集群102、104都耦接到共享適配器122,共享適配器122由集群102、104共享。所述共享適配器122也可以稱為主機適配器。所述共享適配器122可以是例如PCI插槽以及鉤聯(lián)到PCI插槽的機架,它們可以由集群102、104中的任何一個進行操作。作為示例,共享適配器122可以是SCSI、ESCON、FICON或光纖信道適配器,并且可以便于與一個或多個PC和/或諸如主機124之類的其它主機的通信。作為示例,主機124可以是可從IBM公司獲得的zSeries服務(wù)器或Netfinity服務(wù)器。
另外,第一集群102耦接到第一組設(shè)備適配器DA1、DA3、DA5、DA7(它們也可以稱為專用適配器),且第二集群104耦接到第二組設(shè)備適配器DA2、DA4、DA6、DA8。設(shè)備適配器DA1、DA3、DA5、DA7中的每一個是在第一集群102和存儲設(shè)備組126a、126b、126c、126d之一之間的接口,并且類似地,設(shè)備適配器DA2、DA4、DA6、DA8中的每一個都是在第二集群104和存儲設(shè)備組126a、126b、126c、126d之一之間的接口。更具體而言,設(shè)備適配器DA1和DA2耦接到存儲設(shè)備組126a,設(shè)備適配器DA3和DA4耦接到存儲設(shè)備組126b,設(shè)備適配器DA5和DA6耦接到存儲設(shè)備組126c,而且設(shè)備適配器DA7和DA8耦接到存儲設(shè)備組126d。在其它實施例中,可以使用或多或少數(shù)量的設(shè)備適配器DA1-8和存儲設(shè)備組126a-d。存儲設(shè)備組126a-d由集群102、104共享。在一個替代實施例中,一個或多個存儲設(shè)備組可以位于與第一集群102和第二集群104不同的位置處。
作為示例,每個(存儲)設(shè)備適配器DA1-8可以是串行存儲體系結(jié)構(gòu)(SSA)適配器。作為選擇,可以使用其它類型的適配器、例如SCSI或光纖信道適配器來實現(xiàn)設(shè)備適配器DA1-8中的一個或多個。每個適配器DA1-8可以包括用于執(zhí)行本發(fā)明的一個或多個示例或本發(fā)明中的部分的軟件、固件和/或微碼。作為示例,可以使用公共裝置互連(CPI)來將每個設(shè)備適配器DA1-8耦接到相應(yīng)的集群102、104。
每對設(shè)備適配器(DA1和DA2、DA3和DA4、DA5和DA6、DA7和DA8)耦接到存儲設(shè)備的兩個回路。例如,設(shè)備適配器DA1和DA2耦接到存儲設(shè)備的第一回路,該第一回路包括第一串存儲設(shè)備A1、A2、A3、A4、A5、A6、A7、A8和第二串存儲設(shè)備B1、B2、B3、B4、B5、B6、B7、B8。在回路中的第一和第二串存儲設(shè)備通常具有相同數(shù)量的存儲設(shè)備,以保持所述回路平衡。類似地,設(shè)備適配器DA1和DA2還耦接到存儲設(shè)備的第二回路,該第二回路包括第一串存儲設(shè)備C1、C2、C3、C4、C5、C6、C7、C8和第二串存儲設(shè)備D1、D2、D3、D4、D5、D6、D7、D8。諸如存儲設(shè)備A1、A2、A3、A4、A5、A6、A7、A8之類的8個存儲設(shè)備的集合可以稱為8盤組(8-pack)。雖然未要求,但是一個回路通常將具有最少16個存儲設(shè)備。在替代實施例中,可以在每個回路中包括更多或更少數(shù)目的存儲設(shè)備。例如,可以在每個回路中包括32個、48個或其它數(shù)量的存儲設(shè)備。通常,在回路中的存儲設(shè)備串具有相同數(shù)量的存儲設(shè)備。每個存儲設(shè)備回路與該存儲設(shè)備回路所耦接到的每個設(shè)備適配器形成串行回路。例如,包括存儲設(shè)備A1、A2、A3、A4、A5、A6、A7、A8和B1、B2、B3、B4、B5、B6、B7、B8在內(nèi)的存儲設(shè)備回路與設(shè)備適配器DA1形成串行回路,并且還與設(shè)備適配器DA2形成串行回路。這種布置提高了可靠性,這是因為每個串行回路在該回路中的每個存儲設(shè)備和耦接到該回路的每個設(shè)備適配器之間提供了冗余的通信路徑。
在每組存儲設(shè)備126a、126b1、26c、126d內(nèi)的存儲設(shè)備可以分組為一個或多個存儲設(shè)備陣列,其中的每個陣列可以是例如便宜(或獨立)盤冗余陣列(RAID)。RAID陣列也可被稱為RAID排列(rank)。響應(yīng)于從第一和第二集群102、104(或從主機124)接收的讀取和寫入請求,(存儲)設(shè)備適配器DA1-8能夠單獨地尋址在它們所耦接到的RAID陣列中的每個存儲設(shè)備。在特定RAID陣列中的存儲設(shè)備可以處于一對設(shè)備適配器之間的同一回路中或在不同回路中。作為其中RAID陣列由處于單個回路中的存儲設(shè)備構(gòu)成的示例,第一RAID陣列可以包括存儲設(shè)備A1、A2、A3、A4、B1、B2和B3,而第二RAID陣列可以包括存儲設(shè)備A6、A7、A8、B5、B6、B7和B8,并將存儲設(shè)備B4和A5指定為可以由任何一個RAID陣列使用的備用裝置。在這個示例中,每個RAID陣列包括來自A1、A2、A3、A4、A5、A6、A7、A8這個8盤組和來自B1、B2、B3、B4、B5、B6、B7、B8這個8盤組的存儲設(shè)備,以便每個RAID陣列接近設(shè)備適配器DA1、DA2之一。作為其中RAID由在不同回路中的存儲設(shè)備構(gòu)成的示例,第一RAID陣列可以包括存儲設(shè)備A1、A2、B1、B2、C1、C2和D1,第二RAID陣列可以包括存儲設(shè)備A3、A4、B3、B4、C3、D3和D4,第三RAID陣列可以包括存儲設(shè)備A5、A6、B6、C5、C6、D5和D6,第四RAID陣列可以包括存儲設(shè)備A8、B7、B8、C7、C8、D7和D8,并且將存儲設(shè)備D2、C4、B5和A7指定為可以由這四個RAID陣列的任何一個使用的備用裝置。在這些示例中,RAID陣列和這些RAID陣列可獲得的備用存儲設(shè)備耦接到同一對設(shè)備適配器。但是,RAID陣列、以及該RAID陣列可獲得的備用存儲設(shè)備可耦接到不同對設(shè)備適配器。此外,RAID陣列和該RAID陣列可獲得的備用存儲設(shè)備可以處于單個回路中或處于不同的回路中。
數(shù)據(jù)和根據(jù)需要的奇偶校驗信息可以任何期望的布置存儲在RAID陣列中的存儲設(shè)備上,所述布置可以包括在RAID陣列中的存儲設(shè)備的全部或一些上的帶化和/或鏡像。作為示例,RAID陣列中的6個存儲設(shè)備可以用于存儲數(shù)據(jù),而在該RAID陣列中的第七個存儲設(shè)備可以用于存儲奇偶校驗信息。在另一個示例中,RAID陣列中的7個存儲設(shè)備可以用于存儲數(shù)據(jù),而在該RAID陣列中的第八個存儲設(shè)備可以用于存儲奇偶校驗信息。作為另一個示例,數(shù)據(jù)和奇偶校驗信息二者可以存儲在RAID陣列中的所有存儲設(shè)備上。在其它實施例中,RAID陣列可以具有少于7個或多個8個的存儲設(shè)備。例如,RAID陣列可以包括5個或6個存儲設(shè)備,每個存儲設(shè)備都用于存儲數(shù)據(jù)和奇偶校驗信息。此外,可以存儲雙奇偶校驗信息以便可以在第一存儲設(shè)備出故障后完成重建之前發(fā)生的第二存儲設(shè)備故障中恢復(fù)。例如,RAID陣列可以包括用于存儲數(shù)據(jù)的6個存儲設(shè)備和用于存儲奇偶校驗信息的2個存儲設(shè)備。作為另一個示例,可以使用7個存儲設(shè)備用于數(shù)據(jù),可以使用另外7個存儲設(shè)備來鏡像在前7個存儲設(shè)備上的數(shù)據(jù),并且可以使用另外2個存儲設(shè)備來存儲奇偶校驗信息,它們?nèi)恳黄鹂梢蕴峁?個存儲設(shè)備故障中的恢復(fù)(故障容錯度9)。
在存儲設(shè)備組126a-d中的存儲設(shè)備一般可以是用于存儲數(shù)據(jù)的任何適當(dāng)設(shè)備,并且可以使用磁、光、磁光、電或用于存儲數(shù)據(jù)的任何其它適當(dāng)技術(shù)。例如,該存儲設(shè)備可以是硬盤驅(qū)動器、光盤或盤(例如CD-R、CD-RW、WORM、DVD-R、DVD+R、DVD-RW或DVD+RW)、軟盤、磁數(shù)據(jù)存儲盤或磁盤、磁帶、數(shù)字光帶、EPROM、EEPROM或閃速存儲器。這些存儲設(shè)備不是每個都必需具有相同的設(shè)備類型或使用相同類型的技術(shù)。作為示例,每個存儲設(shè)備可以是具有例如146千兆字節(jié)容量的硬盤驅(qū)動器。在一個示例中,每個存儲設(shè)備組126a-d可以是在由國際商業(yè)機器公司制造的型號2105的企業(yè)存儲服務(wù)器中的存儲外殼。
第一集群102和/或第二集群104以及至少一個設(shè)備適配器DA1-8和至少一個存儲設(shè)備組126a-d中的至少一部分可以被稱為存儲系統(tǒng)或存儲裝置。具有或不具有至少一個存儲設(shè)備組126a-d的一部分的一個或多個設(shè)備適配器DA1-8也可以被稱為存儲系統(tǒng)或存儲裝置。
在圖2中示出了示范計算裝置200。作為示例,可以使用計算裝置200的一個實施例來實現(xiàn)主機124、(以及在替代實施例中的)集群102和/或集群104。計算裝置200包括處理器202(它可以被稱為處理設(shè)備),并且在一些示例中可以具有超過一個處理器202。作為示例,該處理器可以是可從國際商業(yè)機器公司獲得的PowerPC RISC處理器或由英特爾公司制造的處理器。處理器202可以運行任何適當(dāng)?shù)牟僮飨到y(tǒng),如Windows 2000、AIX、SolarisTM、Linux、UNIX或HP-UXTM。計算裝置200可以在任何適當(dāng)計算機如個人計算機、工作站、大型計算機或超級計算機實現(xiàn)。計算裝置200還包括存儲設(shè)備204、網(wǎng)絡(luò)接口206和輸入/輸出208,它們都耦接到處理器202。存儲設(shè)備204可以包括例如可以是RAM的主存儲器210和非易失性存儲器212。該非易失性存儲器212可以是例如硬盤驅(qū)動器、用于對光或磁光介質(zhì)讀取和寫入的驅(qū)動器、磁帶驅(qū)動器、非易失性RAM(NVRAM)、或任何其它適當(dāng)類型的存儲設(shè)備。存儲設(shè)備204可以用于存儲數(shù)據(jù)和由處理器執(zhí)行的應(yīng)用程序和/或其它編程指令。網(wǎng)絡(luò)接口206可以提供對于任何適當(dāng)?shù)挠芯€或無線網(wǎng)絡(luò)或通信鏈路的訪問。
II.操作除了上述硬件實施例之外,本發(fā)明的其它方面涉及用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的操作。
A.信號承載介質(zhì)在圖1和2的上下文中,本發(fā)明的方法方面可以例如通過讓一個或多個設(shè)備適配器DA1-8、集群102和/或集群104(和/或主機124)執(zhí)行也可以被稱為代碼的機器可讀指令的序列來實現(xiàn)。這些指令可以駐留在各種類型的信號承載介質(zhì)中。在這個方面,本發(fā)明的一些方面涉及程序產(chǎn)品,其中包括有形地包括機器可讀指令程序的一個或者多個信號承載介質(zhì),該機器可讀指令程序可由數(shù)字處理裝置執(zhí)行來執(zhí)行用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的操作。
這種信號承載介質(zhì)可以包括例如RAM 110、RAM 112、NVRAM 114、NVRAM 116、主存儲器210、非易失性存儲器212和/或在設(shè)備適配器DA1-8中的固件。作為選擇,這些指令可以被包括在諸如圖3所示的光數(shù)據(jù)存儲盤300之類的信號承載介質(zhì)中。該光盤可以是任何類型的信號承載盤(或者多個),如CD-ROM、CD-R、CD-RW、WORM、DVD-R、DVD+R、DVD-RW或DVD+RW。另外,無論是包括在存儲系統(tǒng)100中或其它地方,這些指令可以存儲在各種機器可讀數(shù)據(jù)存儲介質(zhì)(或者多個)的任何一種上,這些機器可讀數(shù)據(jù)存儲介質(zhì)可以包括例如“硬盤驅(qū)動器”、RAID陣列、磁數(shù)據(jù)存儲盤(諸如軟盤)、磁帶、數(shù)字光帶、RAM、ROM、EPROM、EEPROM、閃速存儲器、可編程邏輯、任何其它類型的固件、磁光存儲器、紙穿孔卡、或包括諸如可以是電、光和/或無線的數(shù)字和/或模擬通信鏈路之類的傳輸媒體在內(nèi)的任何其它適當(dāng)?shù)男盘柍休d介質(zhì)。例如,在一些實施例中,可以通過網(wǎng)絡(luò)從文件服務(wù)器或從其它傳輸介質(zhì)訪問這些指令或代碼,并且包括這些指令或代碼的信號承載介質(zhì)可以包括傳輸媒體,諸如網(wǎng)絡(luò)傳輸線、無線傳輸介質(zhì)、通過空間傳播的信號、無線電波和/或紅外線信號之類。作為選擇,可以以硬件邏輯如集成電路芯片、可編程門陣列(PGA)或特定用途集成電路(ASIC)來實現(xiàn)所述信號承載介質(zhì)。作為示例,這些機器可讀指令可以包括微碼或從諸如“C++”之類的語言編譯得到的軟件對象代碼。
B.操作的總體序列1.操作序列的第一示例為了便于說明,但不具有任何限定地參見圖1示出并且如上所述的存儲系統(tǒng)100來描述本發(fā)明的示范方法方面。圖4中說明了本發(fā)明的方法方面示例,它示出了用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的方法的序列400。
可以由一個或多個設(shè)備適配器DA1-8、集群102和/或集群104(和/或主機104)來執(zhí)行序列400的操作。參見圖4,序列400可以包括并且可以開始于操作402。操作402包括確定陣列的值“N”,它是可以由帶的相關(guān)聯(lián)邏輯塊地址(LBA)所標識的、存儲在該陣列的每個存儲設(shè)備上的帶的最大數(shù)量。作為示例,該存儲設(shè)備陣列可以包括在一個或多個存儲設(shè)備組126a-d中的一些或全部存儲設(shè)備。如上所述,在一些示例中,所述存儲設(shè)備可以是硬盤驅(qū)動器。
為了確定可以寫入到存儲設(shè)備陣列的存儲設(shè)備中的帶的最大數(shù)量N,存儲適配器可以查詢該陣列中的每個設(shè)備,然后將帶的數(shù)量N設(shè)置為等于該陣列中的最小容量存儲設(shè)備可以支持的最大值。但是,在其它示例中,存儲適配器可以將該最大值限制到更小的值,在大多數(shù)情況下,RAID陣列中的所有存儲設(shè)備都將具有相同的存儲容量,并因此將具有相同數(shù)量的可用帶LBA。
每個帶通常包括多個數(shù)據(jù)塊,其中,每個數(shù)據(jù)塊存儲在對應(yīng)的LBA處。帶中的第一塊的LBA被稱為帶LBA。例如,每個帶可以包括64個塊,其中,每個塊包括例如512字節(jié)的數(shù)據(jù)??梢栽趯?yīng)的帶LBA外加塊偏移處尋址帶中每個數(shù)據(jù)塊,其中,該帶LBA是帶中的第一數(shù)據(jù)塊的地址,偏移是從帶LBA到目標數(shù)據(jù)塊LBA的塊數(shù)量。因為帶通常具有相同長度,所以對于陣列中的每個存儲設(shè)備,在帶幅中的每個帶的開始LBA通常具有相同的值。因此,可以通過識別目標存儲設(shè)備(例如盤)、帶LBA和偏移來尋址一個帶幅的所有數(shù)據(jù)塊。短語“向帶LBA寫入”可以用作描述向與在給定帶LBA處開始的帶相關(guān)聯(lián)的任何或所有塊寫入的簡寫。
序列400還可以包括操作404,它包括將計數(shù)器設(shè)置為諸如1之類的初始值,以便在存儲設(shè)備陣列中保持對到新LBA的寫入的數(shù)量的計數(shù)。
序列400還可以包括操作406,它包括在隨機進入的寫入LBA和寫入到陣列的存儲設(shè)備中的有序LBA之間建立一一映射。操作406可以包括基于映射算法建立映射表。建立映射表也可以被稱為指定映射表,并且可以包括在高速緩存中保留空間。作為示例,映射表可以存儲在適配器存儲器中。該適配器存儲器可以是非易失性存儲器,以便如果復(fù)位所述存儲設(shè)備(例如盤),映射表不會丟失。
在隨機進入的寫入LBA和寫入到陣列中的存儲設(shè)備的有序LBA之間建立一一映射可以包括使用保留相鄰LBA用于循環(huán)副本的算法。圖5所述的算法是用于在5盤陣列中寫入數(shù)據(jù)和數(shù)據(jù)的單個循環(huán)副本的算法示例。使用其中保留相鄰LBA用于循環(huán)副本這樣的算法,提供了改善的讀取和寫入效率。但是通??梢允褂萌魏我灰挥成渌惴?。參見圖5,s1j、s2j、s3j、s4j和s5j是帶幅Sj的構(gòu)成帶,因此Sj=s1j+s2j+s3j+s4j+s5j。此外,LBAm是由映射算法和表(圖6所示)確定的帶幅Sj的映射LBA。參見圖5,寫入帶幅Sj包括在每個盤中向兩個帶LBA寫入,其中,向第二個LBA的寫入是寫入到另一個盤的數(shù)據(jù)的循環(huán)副本。例如,在盤1上,當(dāng)寫入帶幅Sj時,在LBAm處開始寫入帶s1j,并且在LBAm+1處開始寫入帶s5j的副本。在盤2上,在LBAm處開始寫入帶s2j,并且在LBAm+1處開始寫入帶s1j的副本。在盤3上,在LBAm處開始寫入帶s3j,并且在LBAm+1處開始寫入帶s2j的副本。在盤4上,在LBAm處開始寫入帶S4j,并且向LBAm+1寫入帶s3j的副本。在盤5上,在LBAm處開始寫入帶s5j,并且向LBAm+1寫入帶s4j的副本。開始LBA是在每個帶中的塊的數(shù)量的函數(shù)。作為示例,帶幅1可以從LBA 0開始,帶幅2可以LBA 128開始。圖6示出了基于圖5所述算法、用于存儲每個帶幅中的每個帶的單個循環(huán)副本的LBA映射表,,它使用先入先出(FIFO)方法用于所有可獲得的帶LBA。
作為另一個示例,圖7示出了映射算法,且圖8示出了對應(yīng)的映射表,其中使用FIFO方法來實現(xiàn)在5盤陣列中的兩個數(shù)據(jù)循環(huán)副本的存儲(在其它實施例中,可以存儲超過兩個的循環(huán)副本。)。參見圖7,s1j、s2j、s3j、s4j和s5j是帶幅Sj的構(gòu)成帶,因此Sj=s1j+s2j+s3j+s4j+s5j。此外,LBAm是由該映射算法和表確定的帶幅Sj的映射LBA。參見圖8,寫入帶幅Sj包括在每個盤中的三個LBA寫入,其中,向第二和第三個LBA的寫入是寫入到其它盤的數(shù)據(jù)的循環(huán)副本。例如,當(dāng)寫入帶幅Sj時,在盤1上,在LBAm處開始寫入帶s1j,并且在LBAm+1處開始寫入帶s5j的副本,在LBAm+2處開始寫入帶s4j的副本。在盤2上,在LBAm處開始寫入帶s2j,并且在LBAm+1處開始寫入帶s1j的副本,在LBAm+2處開始寫入帶s5j的副本。在盤3上,在LBAm處開始寫入帶s3j,并且在LBAm+1處開始寫入帶s2j的副本,在LBAm+2處開始寫入帶s1j的副本。在盤4上,在LBAm處開始寫入帶S4j,并且向LBAm+1寫入帶s3j的副本,在LBAm+2處開始寫入帶s2j的副本。在盤5上,在LBAm處開始寫入帶s5j,并且向LBAm+1寫入帶s4j的副本,在LBAm+2處開始寫入帶s3j的副本。
在另一個示例中,該映射算法可以保留被映射的LBA集用于進入的寫入LBA的一個區(qū)(band)或區(qū)集的。作為示例,可以這樣的方式保留LBA以使得進入的寫入LBA在邏輯上保持彼此靠近。在一些示例中,可以修改所述算法以便與特定應(yīng)用和/或操作系統(tǒng)一起操作。在這個其中保留了一個LBA區(qū)的示例中,未在保留區(qū)中的LBA可以使用例如FIFO方法。圖9示出了為前10個LBA映射的保留LBA區(qū)的示例。圖10示出了用于一個循環(huán)副本的映射表,其中組合了圖10所述的10個LBA區(qū)的保留映射和FIFO映射。在這個示例中,僅僅當(dāng)進入的寫入LBA還未在所述表中時更新映射表。FIFO算法用于在保留區(qū)之外的LBA。使用保留區(qū)的思想可以被一般化和擴展到包括超過一個區(qū)。
對于其中存儲了每個帶幅的原件和一份副本的實施例,操作還可以包括保留可用LBA的一半用于主數(shù)據(jù),并且保留可用LBA的一半用于數(shù)據(jù)的循環(huán)副本。對于其中存儲每個帶幅的原件和兩份副本的實施例,操作還可以包括保留可用LBA的三分之一用于主數(shù)據(jù),并且保留可用LBA的三分之二用于數(shù)據(jù)的循環(huán)副本??梢杂纱鎯υO(shè)備適配器DA1-8使用諸如圖5-10中所示的算法和表之類的一一映射算法和表來隱含執(zhí)行存儲空間的保留。響應(yīng)于從集群102、104接收的寫入數(shù)據(jù)的請求,存儲設(shè)備適配器DA1-8可以執(zhí)行數(shù)據(jù)的主要副本和任何輔助副本的寫入,并且還可以使用所述映射表來跟蹤寫入了什么和寫入到哪里。
再次參見圖4,序列400還可以包括操作408,它包括確定是否已經(jīng)接收到寫入命令。如果還沒有接收到寫入命令,則可以重復(fù)操作408直到接收到寫入命令為止。如果接收到寫入命令,則序列400還可以包括操作410,它包括確定該寫入是否是到先前還未被寫入的LBA的寫入(新LBA)。如果確定該寫入是到先前已經(jīng)寫入的LBA的寫入,則序列400還可以包括操作412和操作413,其中操作412包括查看映射表,而且操作413包括按照所述映射表來執(zhí)行寫入以寫入帶。執(zhí)行寫入包括對于在帶幅中的每個帶,向在映射表中指示的LBA寫入該帶,并且如果對應(yīng)的復(fù)制標記的值是“是”,則所述執(zhí)行寫入還包括如映射表指示、寫入每個帶的一個或多個循環(huán)副本。
如果在步驟410確定所述寫入是到先前未被寫入的LBA的寫入,則序列400還可以包括遞增計數(shù)器的操作414。序列400還可以包括操作416,其包括更新映射表以指示在進入的帶LBA和映射的帶LBA之間的映射,操作416還可以包括對在映射表中的對應(yīng)項目的復(fù)制標記設(shè)置“是”或“否”值。設(shè)置“是”或“否”值可以包括確定要設(shè)置哪個值。作為示例,確定是否應(yīng)當(dāng)將復(fù)制標記設(shè)置為“否”值可以包括確定計數(shù)器是否具有大于或等于(也可以描述為“不小于”)不復(fù)制閾值的值。作為示例,所述不復(fù)制閾值可以是N的百分比,其中,所述百分比是映射算法的一個函數(shù)。例如,對于圖6中的映射表,當(dāng)計數(shù)器達到值N/2+1時,所述復(fù)制標記將被設(shè)置為“否”。序列400還可以包括操作418,其包括確定對于計數(shù)器的對應(yīng)值,復(fù)制標記是“是”還是“否”。如果復(fù)制標記的值是“是”,則序列400還可以包括操作420,其包括對于在帶幅中的每個帶,向映射表中指示的LBA寫入帶和所述帶的循環(huán)副本。序列400還可以包括操作422,其包括確定是否計數(shù)器具有等于N的值,如果是如此,則可以結(jié)束所述序列,如果不是,則可以在操作408處繼續(xù)所述序列。
如果在操作418確定對于計數(shù)器的對應(yīng)值、所述復(fù)制標記具有值“否”,則序列400還可以包括操作424,其包括對于在帶幅中的每個帶,向在映射表中指示的LBA寫入帶,當(dāng)不寫入帶的任何副本。序列400還可以包括操作426,它包括確定計數(shù)器是否具有等于N的值,如果是如此,則可以結(jié)束所述序列,如果不是如此,則可以在操作408處繼續(xù)所述序列。
2.操作序列的第二示例圖11是用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的方法的序列1100的流程圖。可以由一個或多個存儲設(shè)備適配器DA1-8、集群102和/或集群104(和/或主機104)執(zhí)行所述序列1100的操作。參見圖11A,序列1100可以包括并且可以開始于操作1102,操作1102包括對于在存儲設(shè)備陣列中的每個存儲設(shè)備,確定由與帶相關(guān)聯(lián)的邏輯塊地址(LBA)標識的、可以在存儲設(shè)備中存儲的帶的總數(shù)。這也可以描述為確定在陣列中的每個存儲設(shè)備上的帶LBA的總數(shù)。作為示例,存儲設(shè)備陣列可以包括在一個或多個存儲設(shè)備組126a-d中的一些或所有存儲設(shè)備。
序列1100還可以包括操作1104,其包括識別可以在陣列中具有最小容量的存儲設(shè)備(多個)中存儲的帶的最大數(shù)量。這也可以描述為識別陣列中具有最小容量的存儲設(shè)備上的帶LBA的數(shù)量。序列1100還可以包括操作1106,其包括將參數(shù)N數(shù)字為等于可以在所述陣列中最小容量的存儲設(shè)備中存儲的帶的最大數(shù)量,這也可以描述為將N設(shè)置為等于帶LBA的數(shù)量。
對于其中存儲了每個帶幅的原件和一個副本的實施例,所述操作還可以包括保留可用LBA的一半用于主數(shù)據(jù)的,并且保留可用帶LBA的一半用于數(shù)據(jù)的循環(huán)副本。對于其中存儲每個帶幅的原件和兩個副本的實施例,所述操作還可以包括保留可用LBA的三分之一用于主數(shù)據(jù),保留可用帶LBA的三分之二用于數(shù)據(jù)的循環(huán)副本??梢杂纱鎯υO(shè)備適配器DA1-8例如使用諸如圖5-10中所示的算法和表之類的一一映射算法和表來隱含地執(zhí)行存儲空間的保留。一般,響應(yīng)于從集群102、104(或主機124)接收的寫入數(shù)據(jù)的請求,存儲設(shè)備適配器DA1-8執(zhí)行數(shù)據(jù)的主副本和任何輔助副本的寫入,并且也可以例如使用映射表來跟蹤寫入了什么和寫入在哪里。
序列1100還可以包括操作1108,其包括識別要存儲的帶幅Sj的數(shù)量j。序列1100還可以包括操作1110,其包括對于其中存儲每個帶的原件和單個副本的示例,確定2j是否小于或等于N-1。如果在操作1110確定2j小于或者等于N-1,則序列1100可以包括操作1112、1114、1116和1118的一個或多個。操作1112包括將帶s1j寫入到陣列的第一存儲設(shè)備中的一個LBA如LBAj中,以及該陣列的第二存儲設(shè)備中的一個LBA如LBAj+1中。作為示例,第一和第二存儲設(shè)備可以包括在存儲設(shè)備組126a-d中。操作1114包括將帶s2j寫入到第二存儲設(shè)備中的LBA如LBAj+1中,以及該陣列的第三存儲設(shè)備中的LBA如LBAj+1中。操作1116包括將帶s3j寫入到第三存儲設(shè)備中的LBA如LBAj中,以及該陣列的第四存儲設(shè)備中的LBA如LBAj+1中。帶s1j、s2j、s3j可以是在操作1108中識別的帶幅j的成員。帶s1j、s2j、s3j中的一個或多個可以是奇偶校驗帶。此外,如果帶幅j具有另外的帶,則可以存儲該帶幅j中的另外的帶。例如,可以將帶s4j寫入到該陣列中的第四存儲設(shè)備中的LBA如LBAj中,以及該陣列中的第五存儲設(shè)備中的LBA如LBAj+1中;可以將帶s5j寫入到第五存儲設(shè)備中的LBA如LBAj中,以及該陣列中的第六存儲設(shè)備中的LBA如LBAj+1中;可以將帶s6j寫入到第六存儲設(shè)備中的LBA如LBAj中,以及第一存儲設(shè)備中的LBA如LBAj+1中。帶s1j、s2j、s3j、s4j、s5j、s6j中的一個或多個可以是奇偶校驗帶。在其它實施例中,可以類似的方式將帶幅j中的大于或小于3個帶或帶幅j中的大于或小于6個帶寫入到存儲設(shè)備中,其中,將每個帶寫入到兩個或更多存儲設(shè)備中。
操作1118包括確定是否有另外的帶幅要存儲在陣列中,如果有,則可以再次執(zhí)行操作1108-1118的一個或多個。如果在操作1118中確定沒有另外的帶幅要存儲,則可以結(jié)束序列1100。
在一個替代實施例中,操作1110可以包括確定3j是否小于N-1。在這個替換實施例中,如果在操作1110確定3j小于N-1,則序列1100可以包括操作1112、1114、1116和1118的替代實施例,例如,操作1112可以包括將帶s1j寫入到該陣列的第一存儲設(shè)備中的LBA如LBAj中、該陣列的第二存儲設(shè)備中的LBA如LBAj+2中,以及該陣列的第三存儲設(shè)備中的LBA如LBAj+1中。在這個替代實施例中,操作1114可以包括將帶s2j寫入到第二存儲設(shè)備中的LBA如LBAj中、第三存儲設(shè)備中的LBA如LBAj+2中、以及該陣列的第四存儲設(shè)備中的LBA如LBAj+1中。在這個替代實施例中,操作1116可以包括將帶s3j寫入到第三存儲設(shè)備中的LBA如LBAj中、第四存儲設(shè)備中的LBA如LBAj+2中、以及該陣列的第五存儲設(shè)備中的LBA如LBAj+1中。在這個替代實施例中,可以類似的方式存儲帶幅j中的另外的帶。例如,可以將帶s4j寫入到該陣列的第四存儲設(shè)備中的LBA如LBAj中、該陣列的第五存儲設(shè)備中的LBA如LBAj+2中,以及該陣列的第六存儲設(shè)備中的LBA如LBAj+1中;可以將帶s5j寫入第五存儲設(shè)備中的LBA如LBAj中、該陣列的第六存儲設(shè)備中的LBA如LBAj+2中,以及該陣列的第一存儲設(shè)備中的LBA如LBAj+1中;以及可以將帶s6j寫入到第六存儲設(shè)備中的LBA如LBAj中、第一存儲設(shè)備中的LBA如LBAj+2中,以及第二存儲設(shè)備中的LBA如LBAj+1中。在其它實施例中,帶幅j可以具有大于或小于3(或大于或小于6)的帶數(shù)量,并且在這些實施例中,帶幅j的帶可以操作1112、1114、1116中所述的方式(其中,將每個帶寫入到三個存儲設(shè)備中)寫入到存儲設(shè)備中。在其它替代實施例中,可以類似的方式存儲每個帶幅中的另外的副本。操作1118包括確定是否存在另外的帶幅要在該陣列中存儲,如果存在,則可以如上對這個替代實施例所述、再次執(zhí)行操作1108-1118的一個或多個。如果在操作1118中確定沒有另外的帶幅要存儲,則序列1100可以結(jié)束。
再次參見圖11A-B所述、其中寫入每個帶幅的原件和一個另外的副本的主要實施例,如果在操作1110確定2j不小于或等于N-1,則序列1100可以包括操作1120、1122、1124和1126中的一個或多個,參見圖11B,操作1120包括將帶s1j寫入到第一存儲設(shè)備中的LBA如LBA(2j-N+1)中。操作1122包括將帶s2j寫入到第二存儲設(shè)備中的LBA如LBA(2j-N+1)中。操作1124包括將帶s3j寫入到第三存儲設(shè)備中的LBA如LBA(2j-N+1)中。如果在帶幅j中存在另外的帶,則可以類似的方式存儲它們。例如,可以將帶s4j寫入到第四存儲設(shè)備中的LBA如LBA(2j-N+1)中,以及可以將帶s5j寫入到第五存儲設(shè)備中的LBA如LBA(2j-N+1)中,可以將帶s6j寫入到第六存儲設(shè)備中的LBA如LBA(2j-N+1)中。在其它實施例中,帶幅j可以具有大于或小于3(或大于或小于6)的帶數(shù)量,而且在這些實施例中,可以操作1120、1122和1124所述的方式將帶幅j中的帶寫入到存儲設(shè)備中。操作1126包括確定是否有另外的帶要在該陣列中存儲,如果有的話,則可以再次執(zhí)行操作1108-1126的一個或多個。如果沒有另外的帶幅要存儲,則序列1100可以結(jié)束。
在其中操作1110包括確定3j是否小于N-1的替代實施例中,如果3j不小于3N-1,則序列1100可以包括操作1120、1122、1124和1126的替代實施例。例如,參見圖11B,操作1120可以包括將帶s1j寫入到第一存儲設(shè)備中的LBA如LBA(3j-N+2)中。在這個替代實施例中,操作1122可以包括將帶s2j寫入到第二存儲設(shè)備中的LBA如LBA(3j-N+2)中。此外,在這個替代實施例中,操作1124可以包括將帶s3j寫入到第三存儲設(shè)備中的LBA如LBA(3j-N+2)中。如果帶幅j中存在另外的帶,則可以類似的方式來存儲它們。例如,可以將帶s4j寫入到第四存儲設(shè)備中的LBA如LBA(3j-N+2)中,可以將帶s5j寫入到第五存儲設(shè)備中的LBA如LBA(3j-N+2)中,以及可以將帶s6j寫入到第六存儲設(shè)備中的LBA如LBA(3j-N+2)中。在其它實施例中,帶幅j可以具有大于或小于3(大于或小于6)的帶數(shù)量,而且在這些實施例中,可以這個替代實施例中的操作1120、1122和1124所述的方式將帶幅j的帶寫入到存儲設(shè)備中。操作1126包括確定是否存在另外的帶幅要在該陣列中存儲,如果存在,則如這個替代實施例所述再次執(zhí)行操作1108-1126的一個或多個。如果沒有另外的帶幅要存儲,則序列1100可以結(jié)束。
上述序列的一個示例可以概括為下述可以在具有N個可用LBA的m個盤驅(qū)動器的陣列上執(zhí)行處理,其中,每個帶幅S由包括奇偶校驗帶的m個帶(s1、s2、...、sm)構(gòu)成Sj=(s1j+s2j+...+smj)。在LBAj處開始寫入新的帶幅Sj,其中j=0,1,2,...,N-1,其中N=包括元數(shù)據(jù)在內(nèi)、用于記錄的可用LBA的數(shù)量??梢詫⒆兞縩設(shè)置為等于2j。為了以期望的模式存儲數(shù)據(jù),如果n小于或等于N-1,則在LBAn處開始,將s1j和smj寫入盤1中,然后將s2j和s1j寫入盤2中,...以及將smj和s(m-1)j寫入盤m中。如果n大于N-1,則在LBA(n-N+1)處開始,將s1j寫入盤1中,將s2j寫入盤2中,...,以及將smj寫入盤m中。前面的處理僅僅是一個示例,可以也具有一一映射的其它存儲模式來一般化用于寫入數(shù)據(jù)和數(shù)據(jù)副本的模式。
C.另外的討論可以使用各種技術(shù)來寫入在本發(fā)明的不同示例中使用的輔助副本。例如,可以使用附加到RAID陣列的設(shè)備適配器DA1-8中的一個或多個來以實時模式構(gòu)造陣列副本。實時地,該設(shè)備適配器緩存可以用于保存先前的數(shù)據(jù)帶,并且將其與目標為該陣列成員的原有數(shù)據(jù)帶成對地離臺(destage)。當(dāng)沒有剩余空間來建立新數(shù)據(jù)的雙重副本時,新的主要數(shù)據(jù)帶幅可以寫在最老的副本帶上。每個新的帶幅還以順序FIFO的方式侵占先前分配到這些副本的空間。其副本已被重寫的舊數(shù)據(jù)的主帶幅保持未被觸及,以便仍然保證由基本RAID代碼提供的RAID保護。其副本還未被重寫的主帶幅繼續(xù)具有較高的冗余保護。最后,所有的副本帶幅將被重寫,而剩下最小的基本RAID保護。
而不是實時地寫入數(shù)據(jù)的副本,可以使用附到RAID陣列的一個或多個存儲設(shè)備適配器DA1-8來以后臺模式建立陣列副本。在后臺模式中,存儲設(shè)備適配器DA1-8可以從每個陣列成員中讀取帶,并且以相對于原始帶幅的移位次序?qū)懭胨鼈儭?br>
本發(fā)明的一些示例包括在給定數(shù)量的盤上帶化雙組或更多組的RAID帶幅副本,每個主帶幅包括m個順序帶,并且將每個帶寫入到在該陣列中的m個驅(qū)動器之一中。這些帶的至少一個可以是例如通過異或剩余的帶而構(gòu)成的奇偶校驗帶。在主帶幅中的帶的輔助副本相對于陣列中的盤循環(huán),以提供在該陣列中的盤的輔助準物理鏡像。
圖12示出了本發(fā)明的實現(xiàn)方式的示例,其中,為6盤陣列建立每個帶幅的單個副本,以及其中RAID 5是基礎(chǔ)陣列。也可以使用這種冗余增加(或利用諸如本發(fā)明其它實施例中的雙重或三重鏡像之類的進一步冗余)來增強其它奇偶校驗RAID方案(RAID 51、雙奇偶校驗等)。主存儲帶幅被指定為A、B、C、...,而副本,即已經(jīng)循環(huán)一個驅(qū)動器(等于1的伸展)的帶幅的輔助組被指定為A’、B’、C’、...。因此,A’、B’和C’是作為它們的未裝填的相對方A、B、C的鏡像映像的輔助數(shù)據(jù)帶幅。如上所述,可以使用另外的副本來提供更高的冗余,諸如也循環(huán)一個驅(qū)動器(或循環(huán)其它數(shù)量的驅(qū)動器)的第二(或第三)副本。在這個示例中的每個帶幅具有諸如Ap之類的奇偶校驗帶,其表示與數(shù)據(jù)帶A1、A2、A3、A4和A5相關(guān)聯(lián)的奇偶校驗帶。因此,對于i=1、2、3、4、5的A1、B1、C1、...是主數(shù)據(jù)帶,而Ap、Bp、Cp是相關(guān)聯(lián)的奇偶帶。在這個示例中,主和輔助帶都具有相應(yīng)的伸展1(每個后續(xù)帶幅循環(huán)一個盤)。但是,可以使用其它的伸展如2、3、4或5。
圖13示出了不使用丟失數(shù)據(jù)的奇偶校驗重建(奇偶校驗恢復(fù))的、在一個盤出故障后的重建示例。通過從輔助帶A’2、B’1、C’p、...重建主帶A2、B1、Cp、...開始,從相鄰的驅(qū)動器復(fù)制在備用驅(qū)動器上重建每個丟失的帶。
圖14示出了不使用奇偶校驗重建的、在兩個非相鄰盤出現(xiàn)故障后的重建示例。這個圖說明了從任何兩個非相鄰故障中恢復(fù)的能力,這是比基本RAID5更高的容錯度。通過從相鄰驅(qū)動器復(fù)制而在備用驅(qū)動器上重建每個帶。例如,根據(jù)輔助帶A’2、B’1、C’p,...重建第一基本帶A2、B1、Cp,...,繼之以在第二備用A4、B3、C2、...上重建主帶。在這個示例中,不需要使用奇偶校驗帶Ap、Bp、Cp、...的數(shù)據(jù)重建,這是因為出故障的驅(qū)動器非相鄰。
圖15示出了在兩個相鄰盤出故障之后的重建示例,其中使用了奇偶校驗重建。這個圖說明了即使當(dāng)故障是相鄰時、從任何兩個故障恢復(fù)的能力,這是比基本RAID 5更高的容錯度。該重建使用最小化到一個備用盤驅(qū)動器的主帶的奇偶校驗重建。在圖15中,描述(a)標識在陣列中的兩個出故障驅(qū)動器。描述(b)示出了通過從相鄰驅(qū)動器復(fù)制來恢復(fù)主帶。描述(c)示出了使用奇偶校驗重建來重建主帶A2、B1、Cp、...。描述(d)示出了通過從在相鄰硬盤驅(qū)動器上的相鄰備用輔助帶A1、Bp、C5、...的復(fù)制來恢復(fù)輔助帶A’1、B’p、C’5,以及通過從在相鄰硬盤驅(qū)動器上的相鄰備用輔助帶A2、B1、Cp、...的復(fù)制來恢復(fù)輔助帶A’2、B’1、C’p、...。
如此處對本發(fā)明的一些示例的描述,對于在RAID陣列中給定數(shù)量的盤,主RAID帶幅的循環(huán)副本的使用提供了比基本RAID更高的驅(qū)動器故障容錯度(冗余)。本發(fā)明的一些示例還提供了優(yōu)化冗余的自調(diào)節(jié)處理,其隨著主RAID存儲重疊輔助副本(或在其它實施例中的三個或其它數(shù)量的副本)時而逐漸將驅(qū)動器故障容錯度降低到不差于基本RAID陣列的水平的。本發(fā)明的一些示例提供了自發(fā)RAID系統(tǒng),其中,給定數(shù)量的盤提供了比基本RAID系統(tǒng)中更大的、對于客戶數(shù)據(jù)的自保護,并且隨著所使用的盤空間數(shù)量的增長而調(diào)節(jié)所述自保護,并且提供了當(dāng)一個或多個驅(qū)動器出現(xiàn)故障時的有效自恢復(fù)。
對于在RAID陣列中給定數(shù)量的盤驅(qū)動器,本發(fā)明的一些示例利用空閑盤空間來通過冗余記錄而提高RAID陣列的有效驅(qū)動器故障容錯度以超過由基本RAID代碼提供的容錯度。對于設(shè)置數(shù)量的陣列驅(qū)動器。每個RAID副本提供了比基本RAID多1的驅(qū)動器故障容錯度。例如,對于具有RAID 5基本代碼的6成員陣列,當(dāng)不使用本發(fā)明時,只有當(dāng)不超過一個驅(qū)動器成員出故障時,才可以恢復(fù)數(shù)據(jù)。相反,利用其中有循環(huán)RAID帶的單個副本的本發(fā)明的一些示例,即使當(dāng)兩個驅(qū)動器成員出故障時,也可以恢復(fù)數(shù)據(jù)。對于其中保存了循環(huán)RAID帶的兩個副本的本發(fā)明示例,即使當(dāng)同時發(fā)生3個盤故障時也可以恢復(fù)數(shù)據(jù)。
本發(fā)明的一些示例在為最需要保護并且可獲得最多空閑空間時期、RAID陣列的早期使用期間提供了較高的RAID保護。新盤陣列的早期使用有數(shù)據(jù)丟失的可能,這是因為新硬盤驅(qū)動器(HDD)的初期故障率大于在驅(qū)動器已經(jīng)運行了許多上電小時(POH)之后的HDD故障率。
本發(fā)明的一些示例允許對于陣列中的給定數(shù)量的盤,可以100%地使用基本RAID陣列的有效數(shù)據(jù)容量。其代價是逐漸使較老的(客戶)數(shù)據(jù)具有基本RAID代碼的故障容錯度。所述陣列盤故障容錯度隨著附加盤空間的使用而單調(diào)降低,但是從不低于基本RAID的故障容錯度。因此,數(shù)據(jù)的保護總是至少為基本RAID代碼的數(shù)據(jù)保護。
利用本發(fā)明的一些示例,從最老數(shù)據(jù)開始,數(shù)據(jù)的循環(huán)副本最終將被新的(客戶)數(shù)據(jù)覆蓋,并因此最終僅保留主數(shù)據(jù)。對于僅保留主數(shù)據(jù)的數(shù)據(jù)子集如RAID 5,對于數(shù)據(jù)恢復(fù)將僅僅允許1個盤故障。在循環(huán)副本還沒有被新數(shù)據(jù)覆蓋的陣列中的數(shù)據(jù)仍然具有較高的盤故障容錯度。僅保留主數(shù)據(jù)的數(shù)據(jù)子集將隨著在陣列中存儲另外的客戶數(shù)據(jù)時而增大,直到已經(jīng)使用了陣列的所有數(shù)據(jù)容量為止。在一些示例中,如果操作系統(tǒng)要向現(xiàn)有的輔助副本的位置寫入,并且如果盤不滿,則存儲設(shè)備適配器DA1-8可以將現(xiàn)有的輔助副本移動到另一個位置,或者可用重新分配存儲位置,而不讀取和恢復(fù)先前存儲的輔助副本。
圖16中示出了RAID 5的“單個鏡像”(每個帶一個循環(huán)副本)的保護。更具體而言,圖16示出了根據(jù)其中使用單個鏡像的本發(fā)明示例、用于“自發(fā)RAID 5”的、受保護以防任何兩個硬盤驅(qū)動器故障的數(shù)據(jù)百分比。通常,本發(fā)明的一些示例可以被稱為“自發(fā)客戶數(shù)據(jù)保護的RAID存儲”。當(dāng)用于RAID5時,本發(fā)明的一些示例可以被稱為“自發(fā)RAID 5”。如圖16所示,在已經(jīng)使用了50%的可用盤空間之前,所有數(shù)據(jù)都存在兩個盤故障容錯度。相反,基本RAID 5的故障保護由在圖16底部的百分之零水平線表示。因此,這個單鏡像示例提供了最大兩個盤的故障容錯度,這相對于基本RAID 5的單個盤故障容錯度是大的改進。
圖17中示出了“雙鏡像”(每個帶兩個循環(huán)副本)的保護。更具體而言,圖17示出了根據(jù)其中使用雙鏡像的本發(fā)明示例,用于“自發(fā)RAID 5”的、受保護以防任何三個硬盤驅(qū)動器故障的數(shù)據(jù)百分比。如圖17所示,在已經(jīng)使用了大約33.3%的可用盤空間之前,所有數(shù)據(jù)都存在三個盤故障容錯度。相反,基本RAID 5的故障保護由圖17底部的百分之零水平線表示。因此,這個雙鏡像示例提供了最大三個盤的故障容錯度,這相對于基本RAID 5的單個盤故障容錯度是大的改進。
本發(fā)明的一些示例通過顯著降低在一個或多個驅(qū)動器出故障時的重建時間而提供了防止在重建期間(客戶)數(shù)據(jù)丟失的另外RAID強壯性。作為示例,數(shù)據(jù)丟失可能作為陣列丟失或一個或多個帶丟失(可以被稱為殺帶(killstrip))的結(jié)果而發(fā)生。取決于故障的數(shù)量和故障是否發(fā)生在相鄰的驅(qū)動器上,由本發(fā)明示例提供的輔助副本要么消除了經(jīng)由奇偶校驗恢復(fù)來恢復(fù)丟失的主數(shù)據(jù),要么實質(zhì)地減少了奇偶校驗恢復(fù)需要用于恢復(fù)基本數(shù)據(jù)的時間量。本發(fā)明的一些示例減少了重建時間,這是因為從無故障的盤向熱備用區(qū)復(fù)制帶所需要的時間遠遠小于經(jīng)由奇偶校驗重建來重建每個丟失的帶所需要的時間,其中通過讀取在帶幅中在每個無故障驅(qū)動器上的帶,然后異或這些數(shù)據(jù)以恢復(fù)丟失的帶來進行奇偶校驗重建。
本發(fā)明的一些示例在驅(qū)動器之一在響應(yīng)讀取請求緩慢的情況下,在讀取數(shù)據(jù)上也比先占重建更快??梢愿斓刈x取數(shù)據(jù)是因為可以與主帶一起,從相鄰驅(qū)動器讀取在丟失帶中的數(shù)據(jù)副本,而不是讀取在帶幅中的所有剩余數(shù)據(jù)帶、并且利用奇偶校驗帶來異或它們以重建在緩慢響應(yīng)帶中的數(shù)據(jù)。
III.其它實施例雖然上述公開示出了本發(fā)明的多個說明性實施例,但是對于本領(lǐng)域的技術(shù)人員而言,顯然,在不脫離所附權(quán)利要求所定義的本發(fā)明范圍的情況下,可以進行各種改變和修改。而且,雖然可以單數(shù)來描述或聲明本發(fā)明中的元件,但是除非明確地聲明了限于單數(shù),否則也考慮復(fù)數(shù)。
權(quán)利要求
1.一種用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的方法,所述方法包括步驟將第一帶寫入到第一存儲設(shè)備和第二存儲設(shè)備中;將第二帶寫入到第二存儲設(shè)備和第三存儲設(shè)備中;以及將第三帶寫入到第三存儲設(shè)備和第四存儲設(shè)備中。
2.如權(quán)利要求1所述的方法,其中,所述第一帶、第二帶和第三帶是帶幅的成員。
3.如權(quán)利要求1或權(quán)利要求2所述的方法,還包括步驟確定所述存儲設(shè)備陣列的最大帶LBA;保留可用帶LBA的一半用于主數(shù)據(jù);以及保留可用帶LBA的一半用于數(shù)據(jù)的循環(huán)副本。
4.如權(quán)利要求1或權(quán)利要求2所述的方法,還包括步驟將第一帶寫入到第一存儲設(shè)備、第二存儲設(shè)備和第三存儲設(shè)備中;將第二帶寫入到第二存儲設(shè)備、第三存儲設(shè)備和第四存儲設(shè)備中;以及將第三帶寫入到第三存儲設(shè)備、第四存儲設(shè)備和第五存儲設(shè)備中。
5.如權(quán)利要求4所述的方法,還包括步驟確定所述存儲設(shè)備陣列的最大帶LBA;保留可用帶LBA的至少33%用于主數(shù)據(jù);以及保留可用帶LBA的至少66%用于數(shù)據(jù)的循環(huán)副本。
6.如權(quán)利要求1或權(quán)利要求2所述的方法,還包括步驟設(shè)置參數(shù)N的值,其中,在所述存儲設(shè)備陣列中的每個存儲設(shè)備具有至少N個帶LBA;識別要存儲的帶幅的編號j;確定2j是否小于或等于N-1;如果是的話,則將帶s1j寫入到所述陣列的第一存儲設(shè)備中的LBA、所述陣列的第二存儲設(shè)備中的LBA中;將帶s2j寫入到所述第二存儲設(shè)備中的LBA、所述陣列的第三存儲設(shè)備中的LBA中;以及將帶s3j寫入到所述第三存儲設(shè)備中的LBA、所述陣列的第四存儲設(shè)備中的LBA中。
7.如權(quán)利要求6所述的方法,其中,如果確定2j不小于和等于N-1,則包括步驟將帶s1j寫入到所述第一存儲設(shè)備中的LBA中;將帶s2j寫入到所述第二存儲設(shè)備中的LBA中;以及將帶s3j寫入到所述第三存儲設(shè)備中的LBA中。
8.如權(quán)利要求6或7所述的方法,還包括步驟對于所述存儲設(shè)備陣列中的每個存儲設(shè)備,確定在所述存儲設(shè)備中的帶LBA的總數(shù);并且識別帶LBA的最小總數(shù);以及其中,所述設(shè)置參數(shù)N的值的操作包括將N設(shè)置等于帶LBA的所述最小總數(shù)。
9.如權(quán)利要求6-8任何一個所述的方法,其中,如果確定2j小于或等于N-1,則包括步驟將帶s4j寫入到所述第四存儲設(shè)備中的LBA、和所述陣列的第五存儲設(shè)備中的LBA中;將帶s5j寫入到所述第五存儲設(shè)備中的LBA、和所述陣列的第六存儲設(shè)備中的LBA中;以及將帶s6j寫入到所述第六存儲設(shè)備中的LBA、和所述第一存儲設(shè)備中的LBA中。
10.如權(quán)利要求6-8任何一個所述的方法,其中,如果確定2j不小于或等于N-1,則還包括步驟將帶s4j寫入到所述第四存儲設(shè)備中的LBA中;將帶s5j寫入到所述第五存儲設(shè)備中的LBA中;將帶s6j寫入到所述第六存儲設(shè)備中的LBA中。
11.如權(quán)利要求6-10任何一個所述的方法,還包括步驟將帶s1j寫入到所述陣列的第一存儲設(shè)備中的帶LBAj、和所述陣列的第二存儲設(shè)備中的帶LBAj+1中;將帶s2j寫入到所述第二存儲設(shè)備中的帶LBAj、和所述陣列的第三存儲設(shè)備中的帶L’BAj+1中;以及將帶s3j寫入到所述第三存儲設(shè)備中的帶LBAj、和所述陣列的第四存儲設(shè)備中的帶LBAj+1。
12.如權(quán)利要求11所述的方法,其中,如果確定2j不小于或等于N-1,則還包括步驟將帶s1j寫入到所述第一存儲設(shè)備中的帶LBA(2j-N+1)中;將帶s2j寫入到所述第二存儲設(shè)備中的帶LBA(2j-N+1)中;以及將帶s3j寫入到所述第三存儲設(shè)備中的LBA(2j-N+1)中。
13.如權(quán)利要求11所述的方法,其中,如果確定2j小于或等于N-1,則還包括步驟將帶s4j寫入到所述陣列的第四存儲設(shè)備中的帶LBAj和所述陣列的第五存儲設(shè)備中的LBAj+1中;將帶s5j寫入到所述第五存儲設(shè)備中的帶LBAj和所述陣列的第六存儲設(shè)備中的帶LBAj+1中;以及將帶s6j寫入到所述第六存儲設(shè)備中的帶LBAj和所述第一存儲設(shè)備中的帶LBAj+1中。
14.如權(quán)利要求11所述的方法,其中,如果確定2j不小于或等于N-1,則所述操作還包括將帶s4j寫入到所述第四存儲設(shè)備中的帶LBA(2j-N+1)中;將帶s5j寫入到所述第五存儲設(shè)備中的LBA(2j-N+1)中;以及將帶s6j寫入到所述第六存儲設(shè)備中的LBA(2j-N+1)中。
15.如權(quán)利要求6-14任何一個所述的方法,包括步驟建立映射表;接收寫入命令;確定是否復(fù)制標記具有“是”值;如果是的話則根據(jù)所述映射表、將帶幅的每個帶寫入到所述存儲設(shè)備陣列中的相應(yīng)存儲設(shè)備中;以及根據(jù)所述映射表、將所述帶幅的每個帶的至少一個副本寫入到所述存儲設(shè)備陣列中的至少一個相應(yīng)存儲設(shè)備中;如果不是的話則根據(jù)映射表、將所述帶幅的每個帶寫入到所述存儲設(shè)備陣列中的相應(yīng)存儲設(shè)備中。
16.如權(quán)利要求15所述的方法,其中,還包括步驟更新映射表,其中所述更新步驟還包括步驟確定是否應(yīng)當(dāng)將復(fù)制標記設(shè)置為“否”值。
17.如權(quán)利要求15或權(quán)利要求16所述的方法,還包括步驟將計數(shù)器設(shè)置為初始值;并且在接收到所述寫入命令后遞增所述計數(shù)器。
18.如權(quán)利要求17所述的方法,其中,所述確定是否應(yīng)當(dāng)將復(fù)制標記設(shè)置為“否”值的步驟包括步驟確定所述計數(shù)器的值是否不小于不復(fù)制閾值。
19.如權(quán)利要求15-17任何一個所述的方法,其中,所述不復(fù)制閾值是為映射算法的函數(shù)的N的百分比。
20.一種在存儲設(shè)備陣列中存儲數(shù)據(jù)的存儲系統(tǒng),所述系統(tǒng)包括用于將第一帶寫入到第一存儲設(shè)備和第二存儲設(shè)備中的裝置;用于將第二帶寫入到所述第二存儲設(shè)備和第三存儲設(shè)備中的裝置;以及用于將第三帶寫入到第三存儲設(shè)備和第四存儲設(shè)備中的裝置。
21.如權(quán)利要求20所述的系統(tǒng),其中,所述第一帶、第二帶和第三帶是帶幅的成員。
22.如權(quán)利要求20或權(quán)利要求21所述的系統(tǒng),還包括用于確定存儲設(shè)備陣列的最大帶LBA的裝置;用于保留可用帶LBA的一半用于主數(shù)據(jù)的裝置;以及用于保留可用帶LBA的一半用于數(shù)據(jù)的循環(huán)副本的裝置。
23.如權(quán)利要求20或權(quán)利要求21所述的系統(tǒng),還包括用于將第一帶寫入到第一存儲設(shè)備、第二存儲設(shè)備和第三存儲設(shè)備中的裝置;用于將第二帶寫入到向第二存儲設(shè)備、第三存儲設(shè)備和第四存儲設(shè)備中的裝置;以及用于將第三帶寫入到向第三存儲設(shè)備、第四存儲設(shè)備和第五存儲設(shè)備中的裝置。
24.如權(quán)利要求23所述的系統(tǒng),還包括裝置用于確定存儲設(shè)備陣列的最大帶LBA;保留可用帶LBA的至少33%用于主數(shù)據(jù);以及保留可用帶LBA的至少66%用于數(shù)據(jù)的循環(huán)副本。
25.如權(quán)利要求20或權(quán)利要求21所述的系統(tǒng),還包括用于設(shè)置參數(shù)N的值的裝置,其中在所述存儲設(shè)備陣列中的每個存儲設(shè)備具有至少N個帶LBA;用于識別要存儲的帶幅的編號j的裝置;用于確定2j是否小于或等于N-1的裝置;以及如果是的話用于將帶s1j寫入到所述陣列的第一存儲設(shè)備中的LBA和所述陣列的第二存儲設(shè)備中的LBA中的裝置;用于將帶s2j寫入到所述第二存儲設(shè)備中的LBA和所述陣列的第三存儲設(shè)備中的LBA中的裝置;以及用于將帶s3j寫入到所述第三存儲設(shè)備中的LBA和所述陣列的第四存儲設(shè)備中的LBA中的裝置。
26.如權(quán)利要求25所述的系統(tǒng),其中,如果確定2j不小于和等于N-1,則包括用于將帶s1j寫入到所述第一存儲設(shè)備中的LBA中的裝置;用于將帶s2j寫入到所述第二存儲設(shè)備中的LBA中的裝置;以及用于將帶s3j寫入到所述第三存儲設(shè)備中的LBA中的裝置。
27.如權(quán)利要求25或26所述的系統(tǒng),還包括用于為所述存儲設(shè)備陣列中的每個存儲設(shè)備、確定在所述存儲設(shè)備中的帶LBA的總數(shù)的裝置;以及用于識別帶LBA的最小總數(shù)的裝置;并且其中,用于設(shè)置參數(shù)N的值的裝置包括用于將N設(shè)置等于帶LBA的所述最小總數(shù)的裝置。
28.如權(quán)利要求25-27任何一個所述的系統(tǒng),其中,如果確定2j小于或等于N-1,則包括用于將帶s4j寫入到所述第四存儲設(shè)備中的LBA和所述陣列的第五存儲設(shè)備中的LBA中的裝置;用于將帶s5j寫入到所述第五存儲設(shè)備中的LBA和所述陣列的第六存儲設(shè)備中的LBA中的裝置;以及用于將帶s6j寫入到所述第六存儲設(shè)備中的LBA和所述第一存儲設(shè)備中的LBA中的裝置。
29.如權(quán)利要求25-27任何一個所述的系統(tǒng),其中,如果確定2j不小于或等于N-1,則還包括用于將帶s4j寫入到所述第四存儲設(shè)備中的LBA中的裝置;用于將帶s5j寫入到所述第五存儲設(shè)備中的LBA中的裝置;用于將帶s6j寫入到所述第六存儲設(shè)備中的LBA中的裝置。
30.如權(quán)利要求25-29任何一個所述的系統(tǒng),還包括用于將帶s1j寫入到所述陣列的第一存儲設(shè)備中的帶LBAj、和所述陣列的第二存儲設(shè)備中的帶LBAj+1中的裝置;用于將帶s2j寫入到所述第二存儲設(shè)備中的帶LBAj、和所述陣列的第三存儲設(shè)備中的帶LBAj+1中的裝置;以及用于將帶s3j寫入到所述第三存儲設(shè)備中的帶LBAj、和所述陣列的第四存儲設(shè)備中的帶LBAj+1中的裝置。
31.如權(quán)利要求30所述的系統(tǒng),其中,如果確定2j不小于或等于N-1,則還包括用于將帶s1j寫入到所述第一存儲設(shè)備中的帶LBA(2j-N+1)中的裝置;用于將帶s2j寫入到所述第二存儲設(shè)備中的帶LBA(2j-N+1)中的裝置;以及用于將帶s3j寫入到所述第三存儲設(shè)備中的LBA(2j-N+1)中的裝置。
32.如權(quán)利要求30所述的系統(tǒng),其中,如果確定2j小于或等于N-1,則還包括用于將帶s4j寫入到所述陣列的第四存儲設(shè)備中的帶LBAj和所述陣列的第五存儲設(shè)備中的LBAj+1中的裝置;用于將帶s5j寫入到所述第五存儲設(shè)備中的帶LBAj和所述陣列的第六存儲設(shè)備中的帶LBAj+1中的裝置;以及用于將帶s6j寫入到所述第六存儲設(shè)備中的帶LBAj和所述第一存儲設(shè)備中的帶LBAj+1中的裝置。
33.如權(quán)利要求30所述的系統(tǒng),其中,如果確定2j不小于或等于N-1,則所述系統(tǒng)還包括用于將帶s4j寫入到所述第四存儲設(shè)備中的帶LBA(2j-N+1)中的裝置;用于將帶s5j寫入到所述第五存儲設(shè)備中的帶LBA(2j-N+1)中的裝置;以及用于將帶s6j寫入到所述第六存儲設(shè)備中的帶LBA(2j-N+1)中的裝置。
34.如權(quán)利要求25-33任何一個所述的系統(tǒng),包括用于建立映射表的裝置;用于接收寫入命令的裝置;用于確定復(fù)制標記是否具有值“是”的裝置;如果是這樣用于根據(jù)所述映射表、將帶幅中的每個帶寫入到存儲設(shè)備陣列中的相應(yīng)存儲設(shè)備中的裝置;以及用于根據(jù)所述映射表、將所述帶幅中的每個帶的至少一個副本寫入到存儲設(shè)備陣列中的至少一個相應(yīng)存儲設(shè)備中的裝置;如果不是用于根據(jù)映射表、將所述帶幅中的每個帶寫入到存儲設(shè)備陣列中的相應(yīng)存儲設(shè)備中的裝置。
35.如權(quán)利要求34所述的系統(tǒng),其中,還包括用于更新映射表的裝置,其中,所述更新裝置還包括用于確定是否應(yīng)當(dāng)將復(fù)制標記設(shè)置為值“否”的裝置。
36.如權(quán)利要求34或權(quán)利要求35所述的系統(tǒng),還包括用于將計數(shù)器設(shè)置為初始值的裝置;以及用于在接收到所述寫入命令之后遞增所述計數(shù)器的裝置。
37.如權(quán)利要求36所述的系統(tǒng),其中,所述用于確定是否應(yīng)當(dāng)將復(fù)制標記設(shè)置為值“否”的裝置包括用于確定計數(shù)器值是否不小于不復(fù)制閾值的裝置。
38.如權(quán)利要求34-37任何一個所述的系統(tǒng),其中,所述不復(fù)制閾值是作為映射算法的函數(shù)的N的百分比。
39.一種計算機程序,包括當(dāng)在計算機上運行所述程序時,適用于執(zhí)行權(quán)利要求1-19任何一個中的步驟的程序代碼裝置。
全文摘要
本發(fā)明的一個方面是一種用于在存儲設(shè)備陣列中存儲數(shù)據(jù)的方法。所述方法的示例包括將第一帶寫入到第一存儲設(shè)備和第二存儲設(shè)備中。這個示例還包括將第二帶寫入到第二存儲設(shè)備和第三存儲設(shè)備中。這個示例還包括將第三帶寫入到第三存儲設(shè)備和第四存儲設(shè)備中。
文檔編號G06F12/16GK1950801SQ200580014379
公開日2007年4月18日 申請日期2005年4月26日 優(yōu)先權(quán)日2004年5月6日
發(fā)明者阿米尼·哈吉 申請人:國際商業(yè)機器公司