欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

允許各種規(guī)模存儲(chǔ)裝置的動(dòng)態(tài)可擴(kuò)展和可收縮的容錯(cuò)存儲(chǔ)系統(tǒng)和方法

文檔序號(hào):6553513閱讀:175來源:國(guó)知局

專利名稱::允許各種規(guī)模存儲(chǔ)裝置的動(dòng)態(tài)可擴(kuò)展和可收縮的容錯(cuò)存儲(chǔ)系統(tǒng)和方法
技術(shù)領(lǐng)域
:本發(fā)明涉及數(shù)字?jǐn)?shù)據(jù)存儲(chǔ)系統(tǒng)和方法,更具體地涉及那些提供容錯(cuò)存儲(chǔ)的系統(tǒng)和方法。
背景技術(shù)
:已知現(xiàn)有技術(shù)依照根據(jù)各種RAID(獨(dú)立磁盤冗余陣列)協(xié)議的任何一種的模式來提供冗余磁盤存儲(chǔ)器。使用RAID模式的典型磁盤陣列是需要由經(jīng)驗(yàn)豐富的信息技術(shù)人員來管理的復(fù)雜結(jié)構(gòu)。而且在許多使用RAID模式的陣列設(shè)計(jì)中,如果所述陣列中的各磁盤驅(qū)動(dòng)器是非均勻容量的,那么該設(shè)計(jì)可能不能夠使用超過該陣列中最小驅(qū)動(dòng)器容量的驅(qū)動(dòng)器上的任何容量。使用標(biāo)準(zhǔn)RAID系統(tǒng)的一個(gè)問題是盤面損壞可能發(fā)生在磁盤陣列中不經(jīng)常使用的區(qū)域。在另一個(gè)驅(qū)動(dòng)器故障的情況下,并不總是能確定發(fā)生了損壞。在這種情況下,當(dāng)所述RAID陣列重構(gòu)所述故障驅(qū)動(dòng)器時(shí),損壞的數(shù)據(jù)可能被傳播和保存。在許多存儲(chǔ)系統(tǒng)中,按就緒狀態(tài)(readystate)維持備用存儲(chǔ)設(shè)備,使得其可以在另一個(gè)存儲(chǔ)設(shè)備故障時(shí)被使用。這種備用存儲(chǔ)設(shè)備通常被稱作“熱后備”。所述熱后備在存儲(chǔ)設(shè)備常規(guī)操作期間并不用于存儲(chǔ)數(shù)據(jù)。當(dāng)運(yùn)行的存儲(chǔ)設(shè)備故障時(shí),該故障存儲(chǔ)設(shè)備由該熱后備邏輯上替換,而且要移動(dòng)數(shù)據(jù)或者通過其他方式在所述熱后備上再產(chǎn)生數(shù)據(jù)。當(dāng)修復(fù)或者更換所述故障存儲(chǔ)設(shè)備時(shí),典型地要移動(dòng)數(shù)據(jù)或者通過其他方式在(重新)運(yùn)行的存儲(chǔ)設(shè)備上重新產(chǎn)生這些數(shù)據(jù),而且使所述熱后備脫機(jī),以準(zhǔn)備好在另一個(gè)故障事件中使用。熱后備的維護(hù)通常是復(fù)雜的,并因此通常由經(jīng)驗(yàn)豐富的管理者進(jìn)行操縱。熱后備磁盤同樣代表著附加費(fèi)用。
發(fā)明內(nèi)容本發(fā)明的第一實(shí)施例提供了一種方法,用于在包括至少一個(gè)存儲(chǔ)裝置的存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)。所述方法包括根據(jù)多種冗余模式自動(dòng)確定一種混合冗余模式,用于在該存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),以提供容錯(cuò)功能,并在該存儲(chǔ)裝置組正好包括多個(gè)存儲(chǔ)容量不同的裝置時(shí)提供改善存儲(chǔ)效率;以及利用混合冗余模式在該存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)。在相關(guān)實(shí)施例中,所述方法還包括,自動(dòng)再配置利用第一種冗余模式先前存儲(chǔ)在第一種布置的各存儲(chǔ)裝置中的數(shù)據(jù),以利用下述之一進(jìn)行存儲(chǔ)(a)相同布置的各存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的各存儲(chǔ)裝置上的第二種冗余模式,以及(c)不同布置的各存儲(chǔ)裝置上的相同冗余模式,用于在無數(shù)據(jù)損失情況下適應(yīng)空間的擴(kuò)展和收縮中的至少一個(gè),所述擴(kuò)展是通過向該組中添加其它存儲(chǔ)裝置實(shí)現(xiàn)的,而所述收縮是通過從該組中移除存儲(chǔ)裝置實(shí)現(xiàn)的。在本發(fā)明的第二實(shí)施例中提供了一種方法,用于按允許存儲(chǔ)裝置組動(dòng)態(tài)擴(kuò)展和收縮的方式,在包括至少一個(gè)存儲(chǔ)裝置的存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)。該方法包括利用第一種冗余模式在存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),根據(jù)存儲(chǔ)裝置組的構(gòu)成的變化,利用下述之一自動(dòng)再配置該存儲(chǔ)裝置組上的數(shù)據(jù)(a)相同布置的存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的存儲(chǔ)裝置的第二種冗余模式,以及(c)不同布置的存儲(chǔ)裝置上的相同冗余模式。在本發(fā)明的第三實(shí)施例中,提供了一種用于存儲(chǔ)數(shù)據(jù)的系統(tǒng),包括具有至少一個(gè)存儲(chǔ)裝置的存儲(chǔ)裝置組,以及利用混合冗余模式在該存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)的存儲(chǔ)管理器。存儲(chǔ)管理器自動(dòng)從多個(gè)冗余模式中確定所述混合冗余模式,用于在該存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),以提供容錯(cuò)功能,并在該存儲(chǔ)裝置組正好包括多個(gè)存儲(chǔ)容量不同的裝置時(shí)提供改善的存儲(chǔ)效率。在相關(guān)實(shí)施例中,存儲(chǔ)管理器自動(dòng)再配置利用第一種冗余模式先前存儲(chǔ)在第一種布置的存儲(chǔ)裝置中的數(shù)據(jù),以利用下述之一進(jìn)行存儲(chǔ)(a)相同布置的存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的存儲(chǔ)裝置上的第二種冗余模式,以及(c)不同布置的存儲(chǔ)裝置上的相同冗余模式,用于無數(shù)據(jù)損失地適應(yīng)空間的擴(kuò)展和收縮中的至少一個(gè),所述擴(kuò)展是通過向組中添加其它存儲(chǔ)裝置實(shí)現(xiàn)的,而所述收縮是通過從組中移除存儲(chǔ)裝置實(shí)現(xiàn)的。在本發(fā)明第四實(shí)施例中,提供了一種用于存儲(chǔ)數(shù)據(jù)的系統(tǒng),包括至少具有一個(gè)存儲(chǔ)裝置的存儲(chǔ)裝置組,以及在該存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)的存儲(chǔ)管理器。所述存儲(chǔ)管理器利用第一冗余模式在該存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),根據(jù)存儲(chǔ)裝置組的構(gòu)成的變化,利用下述之一自動(dòng)再配置該存儲(chǔ)裝置組上的數(shù)據(jù)(a)相同布置的存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的存儲(chǔ)裝置的第二種冗余模式,以及(c)不同布置的存儲(chǔ)裝置上的相同冗余模式。在相關(guān)實(shí)施例中,可以從包括下述的組中選擇所述冗余模式,即,鏡像、具有奇偶校驗(yàn)的條帶化、RAID6、雙奇偶校驗(yàn)、對(duì)角線奇偶校驗(yàn)、低密度奇偶校驗(yàn)檢測(cè)碼以及turbo碼。在相關(guān)實(shí)施例中,通過下述方式可以再配置數(shù)據(jù),即,把跨兩個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為單個(gè)存儲(chǔ)裝置上的鏡像模式;把跨第一對(duì)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨第二對(duì)存儲(chǔ)裝置的鏡像模式;把跨三個(gè)存儲(chǔ)裝置的條帶化模式轉(zhuǎn)換為跨兩個(gè)存儲(chǔ)裝置的鏡像模式;把跨第一組多個(gè)存儲(chǔ)裝置的第一條帶化模式轉(zhuǎn)換為跨第二組多個(gè)存儲(chǔ)裝置的第二條帶化模式;把跨一個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨兩個(gè)存儲(chǔ)裝置的鏡像模式;把一個(gè)存儲(chǔ)裝置上的鏡像模式轉(zhuǎn)換為另一個(gè)存儲(chǔ)裝置上的鏡像模式;把跨兩個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨三個(gè)存儲(chǔ)裝置的條帶化模式;把跨第一組多個(gè)存儲(chǔ)裝置的第一條帶化模式轉(zhuǎn)換為跨包括添加到所述組的存儲(chǔ)裝置的第二組多個(gè)存儲(chǔ)裝置的第二條帶化模式。在另一個(gè)相關(guān)實(shí)施例中,可以把對(duì)象分析為塊(chunk),每個(gè)塊都具有特定的內(nèi)容,并且在存儲(chǔ)系統(tǒng)中只存儲(chǔ)具有唯一性內(nèi)容的塊。所述塊能夠根據(jù)預(yù)定散列函數(shù)被標(biāo)識(shí)為具有唯一性內(nèi)容。在該實(shí)施例中,只存儲(chǔ)標(biāo)識(shí)為唯一的塊可以涉及為每個(gè)塊計(jì)算散列號(hào),并在存儲(chǔ)系統(tǒng)中存儲(chǔ)與所存儲(chǔ)的塊的散列號(hào)相聯(lián)系的對(duì)象的唯一標(biāo)識(shí)符及其位置信息。存儲(chǔ)用于對(duì)象的唯一標(biāo)識(shí)符涉及使用對(duì)象表,該對(duì)象表列出用于該對(duì)象的唯一標(biāo)識(shí)符以及用于所存儲(chǔ)塊的散列號(hào)。存儲(chǔ)位置信息可涉及在塊表中存儲(chǔ)用于每個(gè)存于其中的塊列表,包括塊在存儲(chǔ)系統(tǒng)中的物理位置的表示。存儲(chǔ)在存儲(chǔ)系統(tǒng)中的對(duì)象可以被轉(zhuǎn)換為單個(gè)存儲(chǔ)裝置以及文件系統(tǒng)和對(duì)象存儲(chǔ)系統(tǒng)中的至少一個(gè)的表示??梢怨芾泶鎯?chǔ)系統(tǒng)中塊的物理存儲(chǔ)分配,從而提供容錯(cuò)存儲(chǔ),甚至在存儲(chǔ)系統(tǒng)可能包括各種容量的存儲(chǔ)裝置時(shí)。一旦從存儲(chǔ)系統(tǒng)中取出特定的塊,就根據(jù)所存儲(chǔ)的塊的散列號(hào)檢驗(yàn)所取出塊的內(nèi)容。例如,通過計(jì)算取出塊的散列號(hào);以及對(duì)計(jì)算出的散列號(hào)與為所述塊相應(yīng)存儲(chǔ)的散列號(hào)進(jìn)行比較。在本發(fā)明的又一實(shí)施例中,提供了一種在存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)的方法,包括利用至少一種冗余模式在存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),檢測(cè)存儲(chǔ)裝置從所述組中的移除,利用剩下的存儲(chǔ)裝置再配置被移除的存儲(chǔ)裝置中的數(shù)據(jù)部分,檢測(cè)被移除的存儲(chǔ)裝置是否重新插入所述組中,釋放對(duì)應(yīng)于所述部分的重新插入的存儲(chǔ)裝置中的區(qū)域,以及刷新所述重新插入的存儲(chǔ)裝置的所有剩余部分,該部分可能在移除和重新插入時(shí)被更改。在本發(fā)明的又一實(shí)施例中,提供了一種在存儲(chǔ)系統(tǒng)中釋放未使用的存儲(chǔ)塊的方法,該方法包括標(biāo)識(shí)空閑塊,為所述空閑塊確定邏輯扇區(qū)地址,根據(jù)所述邏輯扇區(qū)地址為所述空閑塊標(biāo)識(shí)聚簇存取存取表項(xiàng),與所述聚簇存取表項(xiàng)相關(guān)的引用計(jì)數(shù)遞減,以及如果被遞減的引用計(jì)數(shù)為0的話就釋放該塊。在相關(guān)實(shí)施例中,標(biāo)識(shí)所述空閑塊包括標(biāo)識(shí)與主機(jī)文件系統(tǒng)關(guān)聯(lián)的空閑塊位圖,以及分析所述空閑塊位圖以標(biāo)識(shí)不再被文件系統(tǒng)使用的聚簇。標(biāo)識(shí)與主機(jī)文件系統(tǒng)關(guān)聯(lián)的空閑塊位圖包括維持分區(qū)表,分析該分區(qū)表以定位操作系統(tǒng)分區(qū),分析操作系統(tǒng)分區(qū)以定位超塊;以及根據(jù)超塊標(biāo)識(shí)主機(jī)文件系統(tǒng)??梢灾谱骺臻e塊位圖的工作副本,其中所述空閑塊位圖的工作副本被分析以標(biāo)識(shí)文件系統(tǒng)不再使用的聚簇。通過參考下列附圖參照下列詳細(xì)說明,本發(fā)明上述特征將變得更加容易理解,其中圖1示出本發(fā)明的實(shí)施例,其中將對(duì)象分析為一系列存儲(chǔ)塊。圖2是說明在相同實(shí)施例中塊的容錯(cuò)存儲(chǔ)模式如何根據(jù)附加更多存儲(chǔ)器而動(dòng)態(tài)改變。圖3說明本發(fā)明另一實(shí)施例,在使用不同大小存儲(chǔ)設(shè)備構(gòu)造的存儲(chǔ)系統(tǒng)上按不同容錯(cuò)模式的塊的存儲(chǔ)。圖4說明本發(fā)明的另一個(gè)實(shí)施例,其中指示器狀態(tài)用于警告無效存儲(chǔ)使用和低等級(jí)容錯(cuò)。圖5是根據(jù)本發(fā)明實(shí)施例的所述數(shù)據(jù)存儲(chǔ)、檢索和再布局中使用的功能模塊框圖。圖6表示在包含兩個(gè)以上驅(qū)動(dòng)器的陣列中使用鏡像的示例。圖7表示使用不同布局模式以存儲(chǔ)其數(shù)據(jù)的一些示例性存儲(chǔ)區(qū)。圖8表示用于實(shí)施后備卷(sparsevolume)的查找表。圖9表示根據(jù)本發(fā)明示例性實(shí)施例的狀態(tài)指示器,其用于具有可用存儲(chǔ)空間并按容錯(cuò)方式操作的示例性陣列。圖10表示根據(jù)本發(fā)明示例性實(shí)施例的狀態(tài)指示器,其用于不具有足夠空間以維護(hù)冗余數(shù)據(jù)存儲(chǔ)并必須增加更大空間的示例性陣列。圖11表示根據(jù)本發(fā)明示例性實(shí)施例的狀態(tài)指示器,其不能夠維護(hù)故障情況下的冗余數(shù)據(jù)。圖12表示根據(jù)本發(fā)明示例性實(shí)施例的示例性陣列的狀態(tài)指示器,其中存儲(chǔ)設(shè)備已經(jīng)故障。用存儲(chǔ)設(shè)備填充插槽B、C、和D。圖13示出的模塊層次表示示例性實(shí)施例的不同軟件層以及它們彼此如何相關(guān)。圖14表示根據(jù)本發(fā)明實(shí)施例的聚簇存取表如何用于訪問存儲(chǔ)區(qū)中的數(shù)據(jù)聚簇。圖15表示根據(jù)本發(fā)明實(shí)施例的日志表更新。圖16表示根據(jù)本發(fā)明實(shí)施例的驅(qū)動(dòng)器布局。圖17示出了根據(jù)本發(fā)明實(shí)施例的存儲(chǔ)區(qū)0的布局和其他存儲(chǔ)區(qū)如何被參照。圖18說明了根據(jù)本發(fā)明實(shí)施例的讀差錯(cuò)處理。圖19說明了根據(jù)本發(fā)明實(shí)施例的寫差錯(cuò)處理。圖20是根據(jù)本發(fā)明實(shí)施例的邏輯流程圖,其說明了通過差錯(cuò)管理程序的壞區(qū)域備份。圖21是根據(jù)本發(fā)明實(shí)施例的示意框圖,其表示存儲(chǔ)陣列的相關(guān)組件。圖22是根據(jù)本發(fā)明實(shí)施例的邏輯流程圖,其表示管理虛擬熱后備的示例性邏輯。圖23是根據(jù)本發(fā)明實(shí)施例的邏輯流程圖,其說明確定每個(gè)可能磁盤故障的再布局情況的示例性邏輯,如圖22的框2102。圖24是根據(jù)本發(fā)明實(shí)施例的邏輯流程圖,其表示調(diào)用虛擬熱后備功能的示例性邏輯。圖25是根據(jù)本發(fā)明實(shí)施例的邏輯流程圖,其表示自動(dòng)再配置一個(gè)或多個(gè)剩余驅(qū)動(dòng)器以恢復(fù)數(shù)據(jù)容錯(cuò)的示例性邏輯,如圖24的框2306。圖26是根據(jù)本發(fā)明實(shí)施例的邏輯流程圖,其用于升級(jí)存儲(chǔ)設(shè)備。具體實(shí)施例如在本說明書和權(quán)利要求書中使用的,除非上下文另有要求,下面術(shù)語具有如下所解釋的意思。對(duì)象的“塊(chunk)”是對(duì)象的提取片,由所使用的物理存儲(chǔ)獨(dú)立地形成,且典型地是對(duì)象的固定數(shù)量的連續(xù)字節(jié)。數(shù)據(jù)存儲(chǔ)的容錯(cuò)“模式”是指在一個(gè)或者多個(gè)存儲(chǔ)設(shè)備上冗余地分布數(shù)據(jù)的特定方式,并且除了其他的,可以是鏡像(mirroring,例如按類似RAID1的方式)、條帶化(striping,例如按類似RAID5的方式)、RAID6、雙奇偶校驗(yàn)、對(duì)角線奇偶校驗(yàn)、低密度奇偶校驗(yàn)碼、渦輪式碼、或者其他冗余模式或者這些冗余模式的組合。當(dāng)給定塊所產(chǎn)生的散列號(hào)通常與其他任何塊的散列號(hào)都不同時(shí),除非當(dāng)其他塊具有與該給定塊相同的數(shù)據(jù)內(nèi)容,該給定塊的散列號(hào)是“唯一的(unique)”。即,當(dāng)兩個(gè)塊的內(nèi)容不相同,通常將具有不同散列號(hào)。如下們所要進(jìn)一步詳細(xì)描述的,在本上下文中,術(shù)語“唯一的”用于覆蓋由那些偶爾對(duì)不同的塊產(chǎn)生相同散列號(hào)的散列函數(shù)所產(chǎn)生的散列號(hào),因?yàn)樯⒘泻瘮?shù)通常不能完美地在對(duì)不同的塊產(chǎn)生不同的數(shù)?!皡^(qū)域(region)”是存儲(chǔ)介質(zhì)(例如硬盤驅(qū)動(dòng)器)上的一組連續(xù)物理塊。“存儲(chǔ)區(qū)(zone)”是由兩個(gè)或以上的區(qū)域組成的。組成存儲(chǔ)區(qū)的各區(qū)域通常不需要連續(xù)。如下面示例性實(shí)施例所述,存儲(chǔ)區(qū)存儲(chǔ)相當(dāng)于1GB的數(shù)據(jù)或者控制信息。“聚簇(cluster)”是存儲(chǔ)區(qū)中的單元尺寸,并表示壓縮單位(下面論述)。如下面所述的示例性實(shí)施例所述,聚簇是4KB(即八個(gè)512字節(jié)的扇區(qū))并且實(shí)質(zhì)上等同于塊?!叭哂嗉?redundantset)”是對(duì)一組數(shù)據(jù)提供冗余的一組扇區(qū)/聚簇。“備份區(qū)域(backinguparegion)”涉及將一個(gè)區(qū)域的內(nèi)容復(fù)制到另一個(gè)區(qū)域。存儲(chǔ)設(shè)備的“第一對(duì)”和“第二對(duì)”可以包括公共的存儲(chǔ)設(shè)備。存儲(chǔ)設(shè)備的“第一組多個(gè)”和“第二組多個(gè)”可以包括一個(gè)或者多個(gè)公共的存儲(chǔ)設(shè)備。存儲(chǔ)設(shè)備的“第一布置”和“第二布置”或者“不同布置”可以包括一個(gè)或多個(gè)公共的存儲(chǔ)設(shè)備。圖1是本發(fā)明實(shí)施例的說明,其中,將對(duì)象(object)分析成一系列用于存儲(chǔ)的塊(chunk),在本例中對(duì)象是文件(file)。開始,文件11被傳遞到存儲(chǔ)軟件,在其中被指定為對(duì)象12并被分配一個(gè)唯一對(duì)象標(biāo)識(shí)號(hào),在此是#007。在對(duì)象表13中形成新項(xiàng)131,用來表示這個(gè)新對(duì)象的分配?,F(xiàn)在該對(duì)象被分析成數(shù)據(jù)“塊”121、122、和123,它們是固定長(zhǎng)度的對(duì)象段。每個(gè)塊都經(jīng)過散列算法,該算法返回塊的唯一散列號(hào)。以后這個(gè)算法可以應(yīng)用于檢索塊,并且結(jié)果與原始散列相比較以確保重試塊與存儲(chǔ)的相同。所述每個(gè)塊的散列號(hào)按對(duì)象132的項(xiàng)行存儲(chǔ)在對(duì)象表13中,以便于以后所述完成對(duì)象可以通過所述各塊的集合進(jìn)行檢索。同樣在圖1中,所述塊散列現(xiàn)在與塊表14中現(xiàn)有項(xiàng)進(jìn)行比較。任何匹配現(xiàn)有項(xiàng)141的散列都已經(jīng)存儲(chǔ)并且因此不采取任何行動(dòng)(即數(shù)據(jù)不會(huì)再次存儲(chǔ),導(dǎo)致對(duì)象的自動(dòng)壓縮)。新散列(在塊表14中沒有對(duì)應(yīng)項(xiàng)的一個(gè))被輸入塊表141。然后塊中的數(shù)據(jù)以最有效容錯(cuò)存儲(chǔ)方式存儲(chǔ)在可用存儲(chǔ)設(shè)備151、152、和153上。這種方法可例如導(dǎo)致所述塊數(shù)據(jù)按鏡像方式存儲(chǔ)在包括一個(gè)或者兩個(gè)設(shè)備的存儲(chǔ)系統(tǒng)上,或者按奇偶校驗(yàn)條帶化存儲(chǔ)在具有兩個(gè)以上存儲(chǔ)設(shè)備的系統(tǒng)。這種數(shù)據(jù)將在物理位置1511、1521、和1531存儲(chǔ)在存儲(chǔ)設(shè)備上,而且這些位置和位置編號(hào)將存儲(chǔ)在塊表列143和142中,使得以后可以定位和檢索塊的所有物理部分。圖2說明在相同實(shí)施例中塊的容錯(cuò)存儲(chǔ)模式如何根據(jù)增加更多附加存儲(chǔ)而動(dòng)態(tài)改變。特別地,圖2示出了一旦附加存儲(chǔ)被添加到整個(gè)系統(tǒng),塊的物理存儲(chǔ)如何在所述存儲(chǔ)設(shè)備上按新模式來布局。在圖2(a)中,所述存儲(chǔ)系統(tǒng)包括兩個(gè)存儲(chǔ)設(shè)備221和222,而塊數(shù)據(jù)在位置2211和2221被物理鏡像到所述兩個(gè)存儲(chǔ)設(shè)備上以提供容錯(cuò)。在圖2(b)中,添加第三存儲(chǔ)設(shè)備223,以奇偶校驗(yàn)條帶化方式存儲(chǔ)所述塊成為可能,這種模式較之所述鏡像模式是更有效的存儲(chǔ)。所述塊按新模式布局在三個(gè)物理位置2311、2321、和2331,占用更少比例的可用存儲(chǔ)。更新所述塊表21以表現(xiàn)在三個(gè)位置212新布局,并且還在213記錄新的塊物理位置2311、2321、和2331。圖3示出根據(jù)本發(fā)明實(shí)施例的成熟存儲(chǔ)系統(tǒng),其已經(jīng)運(yùn)行一段時(shí)間。該圖說明了各塊如何隨時(shí)間在存儲(chǔ)容量變化的存儲(chǔ)設(shè)備上進(jìn)行物理存儲(chǔ)。該圖示出包括40GB的存儲(chǔ)設(shè)備31、80GB的存儲(chǔ)設(shè)備32和120GB的存儲(chǔ)設(shè)備33的存儲(chǔ)系統(tǒng)。最初,各塊按容錯(cuò)條帶化模式34來存儲(chǔ),直到40GB存儲(chǔ)設(shè)備31變滿。然后,由于缺乏存儲(chǔ)空間,新數(shù)據(jù)就按鏡像模式存儲(chǔ)到80GB32和120GB33存儲(chǔ)設(shè)備的可用空間上。一旦80GB存儲(chǔ)設(shè)備32滿了,則新數(shù)據(jù)按單個(gè)硬盤容錯(cuò)模式37來布局。盡管存儲(chǔ)設(shè)備包括用于存儲(chǔ)數(shù)據(jù)的單一存儲(chǔ)池(pool),如按塊存儲(chǔ)的數(shù)據(jù)本身已經(jīng)按多種不同模式來存儲(chǔ)。圖4說明本發(fā)明另一實(shí)施例,其中指示器狀態(tài)用于警告低效的存儲(chǔ)使用和低級(jí)的容錯(cuò)。在圖4A中,全部三個(gè)存儲(chǔ)設(shè)備41、42和43具有空閑空間,而指示燈44是綠色以表示數(shù)據(jù)以有效和容錯(cuò)方式存儲(chǔ)。在圖4B中,40GB存儲(chǔ)設(shè)備41已經(jīng)變滿了,因此新數(shù)據(jù)可按鏡像模式只能存儲(chǔ)在具有剩余空閑空間的兩個(gè)存儲(chǔ)設(shè)備42和43上。為了表示數(shù)據(jù)仍然十分冗余但不能有效存儲(chǔ),指示燈44變成黃色。在圖4C中,僅120GB存儲(chǔ)設(shè)備43具有空閑空間剩余,因此全部新數(shù)據(jù)可以按鏡像模式僅存儲(chǔ)在這一臺(tái)設(shè)備43上。因?yàn)槿蒎e(cuò)性不強(qiáng)并且系統(tǒng)臨界地缺乏空間,因此指示燈44變紅以指示需要增加更多存儲(chǔ)。在一個(gè)替換實(shí)施例中,為陣列中每臺(tái)驅(qū)動(dòng)器/插槽提供指示器,例如,以三色燈形式(例如綠、黃、紅)。在一個(gè)特定實(shí)施例中,所述燈用于照亮具有發(fā)光效果的硬盤機(jī)柜的整個(gè)前面??刂七@些燈不僅用于指示該系統(tǒng)的整體狀態(tài),還用于指示哪個(gè)驅(qū)動(dòng)器/插槽需要加以注意(若有的話)。每個(gè)三色燈都可以處于至少四種狀態(tài)分別是關(guān)閉、綠色、黃色、紅色。如果特定插槽為空且系統(tǒng)按充足存儲(chǔ)和冗余在運(yùn)行因此不需要在插槽中安裝驅(qū)動(dòng)器,則相應(yīng)插槽的燈可以處于關(guān)閉狀態(tài)。如果相應(yīng)驅(qū)動(dòng)器充足并且不需要替換,則特定插槽的燈可以置于綠色狀態(tài)。如果系統(tǒng)運(yùn)行在降級(jí),則可以將特定插槽的燈置于黃色狀態(tài),以建議用較大驅(qū)動(dòng)器替換相應(yīng)驅(qū)動(dòng)器。如果相應(yīng)驅(qū)動(dòng)器必須安裝或者替換,則特定插槽的燈可以置于紅色狀態(tài)。如果需要或者期望的話,可以指示附加狀態(tài),例如,通過在開啟狀態(tài)和關(guān)閉狀態(tài)之間閃爍燈或者在兩種不同顏色(例如在替換驅(qū)動(dòng)器之后并且進(jìn)行數(shù)據(jù)重新布局時(shí)在紅色和綠色之間閃爍燈)。下面說明示例性實(shí)施例的附加細(xì)節(jié)。當(dāng)然,可以使用其他指示技術(shù)來指示系統(tǒng)狀態(tài)和驅(qū)動(dòng)器/插槽狀態(tài)。例如,單個(gè)LCD顯示器可以用于指示系統(tǒng)狀態(tài),并且如果需要的話,可以指示需要注意的插槽號(hào)。同樣,可以使用其他類型指示器(例如,系統(tǒng)單個(gè)狀態(tài)指示器(例如綠色/黃色/紅色),還有每個(gè)插槽的插槽指示器或者燈)。圖5是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)存儲(chǔ)、檢索和重新布局中使用的功能模塊框圖,如上與圖1至3相關(guān)的討論。通信的公共入口和出口點(diǎn)是對(duì)象界面511,用于將對(duì)象傳遞給系統(tǒng)用于存儲(chǔ)或者從系統(tǒng)檢索對(duì)象,框界面512,它讓存儲(chǔ)系統(tǒng)看來像是一個(gè)更大的存儲(chǔ)設(shè)備,以及CIFS接口513,它讓存儲(chǔ)系統(tǒng)看來像是Windows文件系統(tǒng)。當(dāng)這些界面需要數(shù)據(jù)存儲(chǔ)時(shí),數(shù)據(jù)被傳遞到塊分析器52,所述分析器52將數(shù)據(jù)分析為塊,并在對(duì)象表512中創(chuàng)建初始項(xiàng)(如上與圖1相關(guān)的討論)。這些塊被傳遞散列碼生成器53,散列碼生成器53產(chǎn)生每個(gè)塊的相關(guān)聯(lián)散列碼,并將其輸入到對(duì)象表中,這樣與每個(gè)對(duì)象相關(guān)聯(lián)的各塊被列出512。塊散列號(hào)與塊表531中的項(xiàng)進(jìn)行比較。在發(fā)現(xiàn)匹配時(shí),該新塊被廢棄,因?yàn)樗c已經(jīng)存儲(chǔ)在該存儲(chǔ)系統(tǒng)中的某個(gè)塊相同。如果塊是新的,則在塊表531中為其建立新項(xiàng),而且將散列的塊傳遞到物理存儲(chǔ)管理器54。該物理存儲(chǔ)管理器以可能的最有效模式在可用存儲(chǔ)設(shè)備571、572、和573上存儲(chǔ)該塊,并在塊表531中制作相應(yīng)項(xiàng)以表示哪里已經(jīng)發(fā)生該塊的物理存儲(chǔ),使得以后可以在512檢索該塊的內(nèi)容(如上與圖1的相關(guān)討論)。圖5中由對(duì)象界面511、框界面512或者CIFS界面513的數(shù)據(jù)檢索通過向檢索管理器56請(qǐng)求來執(zhí)行,檢索管理器查詢對(duì)象表521以確定哪個(gè)塊包括該對(duì)象,然后從物理存儲(chǔ)器54請(qǐng)求這些塊。所述物理存儲(chǔ)管理器54詢問塊表格531以確定所請(qǐng)求的塊存儲(chǔ)在哪里,然后檢索它們并將完成數(shù)據(jù)(對(duì)象)傳遞回檢索管理器56,檢索管理器56向請(qǐng)求界面返回該數(shù)據(jù)。圖5還包括容錯(cuò)管理器(FTL)55,其不斷掃描塊表以確定塊是否以可能的最有效方式存儲(chǔ)。(這可能由于添加和去除存儲(chǔ)設(shè)備571、572、和573而改變。)如果塊不是以最有效方式存儲(chǔ),則FTL將請(qǐng)求物理存儲(chǔ)管理器創(chuàng)建該塊的新布局模式并更新塊表531。這樣全部數(shù)據(jù)對(duì)構(gòu)成該陣列的若干存儲(chǔ)設(shè)備按可能的最有效方式來存儲(chǔ)(如上與圖2和3相關(guān)的討論)。下面提供本發(fā)明示例性實(shí)施例的其他細(xì)節(jié)。數(shù)據(jù)布局模式——存儲(chǔ)區(qū)(zone)除了其他,存儲(chǔ)區(qū)影響隱式冗余和存儲(chǔ)在盤上的實(shí)際數(shù)據(jù)的盤再布局。存儲(chǔ)區(qū)在不影響存儲(chǔ)區(qū)用戶的情況下使得可增加和改變的附加布局方法。存儲(chǔ)陣列在盤上按稱作存儲(chǔ)區(qū)的虛擬分段來布局?jǐn)?shù)據(jù)。存儲(chǔ)區(qū)存儲(chǔ)給定的和固定數(shù)量的數(shù)據(jù)(例如1G字節(jié))。存儲(chǔ)區(qū)駐留在單個(gè)盤或者跨越一個(gè)或者多個(gè)驅(qū)動(dòng)器。存儲(chǔ)區(qū)的物理布局以特定于該存儲(chǔ)區(qū)的形式提供冗余。圖6示出在包含兩個(gè)以上驅(qū)動(dòng)器的陣列中使用鏡像的示例。圖7示出使用不同布局模式來存儲(chǔ)它們的數(shù)據(jù)的一些示例存儲(chǔ)區(qū)。該圖假定存儲(chǔ)區(qū)存儲(chǔ)1GB數(shù)據(jù)。注意以下幾點(diǎn)i)跨多個(gè)驅(qū)動(dòng)器的存儲(chǔ)區(qū)不需要在整個(gè)集合中使用到驅(qū)動(dòng)器的相同偏移。ii)單個(gè)驅(qū)動(dòng)器鏡像需要2G的存儲(chǔ)量來存儲(chǔ)1G的數(shù)據(jù)。iii)雙驅(qū)動(dòng)器鏡像需要2G存儲(chǔ)量來存儲(chǔ)1G的數(shù)據(jù)。iv)3驅(qū)動(dòng)器條帶化需要1.5GB存儲(chǔ)量來存儲(chǔ)1G的數(shù)據(jù)。v)4驅(qū)動(dòng)器條帶化需要1.33GB存儲(chǔ)量來存儲(chǔ)1G的數(shù)據(jù)。vi)存儲(chǔ)區(qū)A、存儲(chǔ)區(qū)B等是任意的存儲(chǔ)區(qū)名。在實(shí)際實(shí)施例中每個(gè)存儲(chǔ)區(qū)都用唯一編號(hào)來標(biāo)識(shí)。vii)雖然通過該圖隱含,存儲(chǔ)區(qū)不是必須在盤上連續(xù)的(見后面所述的區(qū)域)。viii)為什么鏡像被限于(不超過)兩個(gè)驅(qū)動(dòng)器沒有技術(shù)原因。例如,在三個(gè)驅(qū)動(dòng)器的系統(tǒng)1中,數(shù)據(jù)的副本可存儲(chǔ)在1驅(qū)動(dòng)器上,且半數(shù)鏡像數(shù)據(jù)可以存儲(chǔ)在另外兩個(gè)驅(qū)動(dòng)器的每個(gè)上。同樣,數(shù)據(jù)可跨三個(gè)驅(qū)動(dòng)器來鏡像,一半數(shù)據(jù)在兩個(gè)驅(qū)動(dòng)器的每個(gè)上以及一半鏡像在其他兩個(gè)驅(qū)動(dòng)器上。數(shù)據(jù)布局模式——區(qū)域(region)每個(gè)盤都分割為一組相等尺寸的區(qū)域。區(qū)域的尺寸比存儲(chǔ)區(qū)小得多,存儲(chǔ)區(qū)由來自一個(gè)或者多個(gè)盤的一個(gè)或者多個(gè)區(qū)域構(gòu)成。為了有效使用盤空間,區(qū)域的尺寸典型地是不同存儲(chǔ)區(qū)尺寸和陣列所支持的不同盤數(shù)量的公因數(shù)。在示例性實(shí)施例中,區(qū)域是存儲(chǔ)區(qū)數(shù)據(jù)尺寸的1/12。下面的表列出了根據(jù)本發(fā)明示例性實(shí)施例的各種布局的區(qū)域/存儲(chǔ)區(qū)的數(shù)量和區(qū)域/盤的數(shù)量。各區(qū)域可以標(biāo)記為使用、空閑或者損壞。當(dāng)創(chuàng)建存儲(chǔ)區(qū)時(shí),選擇來自適當(dāng)盤的一組空閑區(qū)域并登記到表中。這些區(qū)域可以是任何任意順序而且不需要在盤上連續(xù)。當(dāng)從存儲(chǔ)區(qū)讀取或者向其寫入數(shù)據(jù)時(shí),存取被重定向到適當(dāng)區(qū)域。除了其他,這允許以靈活和有效的方式發(fā)生數(shù)據(jù)再布局。隨著時(shí)間的過去,不同尺寸的存儲(chǔ)區(qū)將可能發(fā)生存儲(chǔ)碎片化(fragmentation),使得許多盤區(qū)太小而不能保持完整存儲(chǔ)區(qū)。通過使用適當(dāng)區(qū)域尺寸,所有存儲(chǔ)片所遺留的間隙都將至少是一個(gè)區(qū)域的尺寸,這些小間隙易于重用,而不必重新分段整個(gè)盤。數(shù)據(jù)布局模式——再布局為了便于實(shí)施,可以強(qiáng)制擴(kuò)展和收縮的固定順序。例如,如果突然增加兩個(gè)驅(qū)動(dòng)器,存儲(chǔ)區(qū)的擴(kuò)展可以經(jīng)過中間擴(kuò)展,就像增加一個(gè)驅(qū)動(dòng)器一樣,然后執(zhí)行第二擴(kuò)展以結(jié)合第二個(gè)驅(qū)動(dòng)器。或者,包含多個(gè)驅(qū)動(dòng)器的擴(kuò)展和收縮可以自動(dòng)處理,不需要中間步驟。在任何再布局之前,所需空間都必須是可用的。這應(yīng)當(dāng)在開始再布局之前計(jì)算,以確保不會(huì)發(fā)生不必要的再布局。數(shù)據(jù)布局模式——驅(qū)動(dòng)器擴(kuò)展下面根據(jù)本發(fā)明示例性實(shí)施例描述從單驅(qū)動(dòng)器鏡像擴(kuò)展為雙驅(qū)動(dòng)器鏡像的一般過程i)假定單驅(qū)動(dòng)器鏡像具有數(shù)據(jù)‘A’和鏡像‘B’ii)在驅(qū)動(dòng)器上分配12個(gè)區(qū)域以擴(kuò)展存儲(chǔ)區(qū)到‘C’iii)復(fù)制鏡像‘B’到區(qū)域集‘C’iv)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘C’中的適當(dāng)位置v)當(dāng)完成復(fù)制時(shí),使用新布局類型更新存儲(chǔ)區(qū)表并利用指向‘C’的指針來替換指向‘B’的指針vi)將構(gòu)成‘B’的區(qū)域標(biāo)記為空閑的。下面根據(jù)本發(fā)明示例性實(shí)施例,描述從雙驅(qū)動(dòng)器鏡像擴(kuò)展為具有奇偶校驗(yàn)的三驅(qū)動(dòng)器條帶化的一般過程i)假定一個(gè)驅(qū)動(dòng)器具有數(shù)據(jù)‘A’而第二驅(qū)動(dòng)器具有鏡像‘B’ii)為奇偶校驗(yàn)信息‘C’在第三驅(qū)動(dòng)器上分配6個(gè)區(qū)域iii)使用‘A’的第一組6區(qū)域和‘B’的第二組6區(qū)域計(jì)算奇偶校驗(yàn)信息iv)在‘C’中放置奇偶校驗(yàn)信息v)任何已經(jīng)處理的對(duì)數(shù)據(jù)的寫都必須奇偶校驗(yàn)到‘C’中適當(dāng)位置vi)當(dāng)復(fù)制完成時(shí),用新布局類型點(diǎn)表將存儲(chǔ)區(qū)表更新為‘A’的前一半,‘B’和‘C’的后一半vii)標(biāo)記‘A’的前一半和‘B’的前一半為空閑下面描述根據(jù)本發(fā)明示例性實(shí)施例的從三驅(qū)動(dòng)器條帶化擴(kuò)展為具有奇偶校驗(yàn)的四驅(qū)動(dòng)器條帶化的一般過程i)假定一個(gè)驅(qū)動(dòng)器具有數(shù)據(jù)‘A’,第二驅(qū)動(dòng)器具有數(shù)據(jù)‘B’而第三個(gè)具有奇偶校驗(yàn)‘P’ii)對(duì)條帶數(shù)據(jù)‘C’在第四驅(qū)動(dòng)器上分配四個(gè)區(qū)域iii)將‘A’的最后兩個(gè)區(qū)域復(fù)制到‘C’的最初兩個(gè)區(qū)域iv)將‘B’的最初兩個(gè)區(qū)域復(fù)制到‘C’的最后區(qū)域v)在奇偶校驗(yàn)驅(qū)動(dòng)器‘D’上分配四個(gè)區(qū)域vi)使用A、C的最初四個(gè)區(qū)域和B的最后四個(gè)區(qū)域計(jì)算奇偶校驗(yàn)信息vii)在‘D’中放置奇偶校驗(yàn)信息viii)任何已經(jīng)處理的對(duì)數(shù)據(jù)的寫都必須奇偶校驗(yàn)到‘D’中適當(dāng)位置ix)用新布局類型和點(diǎn)表更新存儲(chǔ)區(qū)表為‘A’‘C’的最初四區(qū)域、‘B’和‘D’的其次四區(qū)域x)標(biāo)記‘A’的最后兩區(qū)域和‘B’的最初兩區(qū)域?yàn)榭臻e。數(shù)據(jù)布局模式——驅(qū)動(dòng)器收縮驅(qū)動(dòng)器收縮在盤去除或者故障時(shí)發(fā)生。在這種情況下,如果可能的話,陣列收縮數(shù)據(jù)使全部存儲(chǔ)區(qū)返回到冗余狀態(tài)。驅(qū)動(dòng)器收縮比擴(kuò)展稍微復(fù)雜,由于要做更多選擇。但是,在布局方法之間的轉(zhuǎn)換按照與擴(kuò)展相類似的方式發(fā)生,但要反過來。保持要再生的數(shù)據(jù)量為最小以使得盡快實(shí)現(xiàn)冗余。在空間可用時(shí),驅(qū)動(dòng)器收縮通常一次處理一個(gè)存儲(chǔ)區(qū),直到全部存儲(chǔ)區(qū)被再布局。選擇如何收縮下表描述根據(jù)本發(fā)明示例性實(shí)施例的用于需要再布局的每個(gè)存儲(chǔ)區(qū)決策樹下面描述根據(jù)本發(fā)明示例性實(shí)施例的從雙驅(qū)動(dòng)器鏡像收縮為單驅(qū)動(dòng)器鏡像的一般過程i)假定單驅(qū)動(dòng)器鏡像具有數(shù)據(jù)‘A’和缺失的鏡像‘B’或者反過來ii)在包含‘A’的驅(qū)動(dòng)器上分配12個(gè)區(qū)域作為‘C’iii)將數(shù)據(jù)‘A’復(fù)制到區(qū)域集‘C’iv)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘C’中適當(dāng)位置v)當(dāng)復(fù)制完成時(shí),用新布局類型更新存儲(chǔ)區(qū)表并用指向‘C’的指針替換指向‘B’的指針下面說明根據(jù)本發(fā)明示例性實(shí)施例的從三驅(qū)動(dòng)器條帶化收縮為雙驅(qū)動(dòng)器鏡像(缺失奇偶校驗(yàn))的一般過程i)假定所述條帶由不同驅(qū)動(dòng)器上的數(shù)據(jù)塊‘A’、‘B’、‘C’組成。缺失奇偶校驗(yàn)‘C’。ii)定義‘A’為包括該存儲(chǔ)區(qū)的前一半,而‘B’為該存儲(chǔ)區(qū)的后一半。iii)在‘A’驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘D’并在‘B’驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘E’。iv)將‘A’復(fù)制到‘E’。v)將‘B’復(fù)制到‘D’。vi)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘D’和‘E’中的適當(dāng)位置vii)當(dāng)復(fù)制完成時(shí),用新布局類型更新存儲(chǔ)區(qū)表并將指針設(shè)置到指向‘A’/‘D’和‘E’/‘B’下面說明根據(jù)本發(fā)明示例性實(shí)施例的從三驅(qū)動(dòng)器條帶化收縮為雙驅(qū)動(dòng)器鏡像(缺失數(shù)據(jù))的一般過程i)假定所述帶由不同驅(qū)動(dòng)器上的數(shù)據(jù)塊‘A’‘B’‘C’組成。缺失數(shù)據(jù)‘C’。ii)定義‘A’為包括該存儲(chǔ)區(qū)的前一半,而‘C’為該存儲(chǔ)區(qū)的后一半。iii)在‘A’驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘D’并在‘B’驅(qū)動(dòng)器上分配12個(gè)區(qū)域的‘E’。iv)將‘A’復(fù)制到‘E’的前一半。v)重構(gòu)從‘A’和‘B’缺失的數(shù)據(jù)。將數(shù)據(jù)寫入‘D’。vi)將‘D’復(fù)制到‘E’的后一半。vii)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘D’和‘E’中的適當(dāng)位置viii)當(dāng)復(fù)制完成時(shí),用新布局類型更新存儲(chǔ)區(qū)表并將指針設(shè)置為指向‘A’/‘D’和‘E’ix)將‘B’區(qū)域標(biāo)記為空閑。下面說明根據(jù)本發(fā)明示例性實(shí)施例的從四驅(qū)動(dòng)器條帶化收縮為三驅(qū)動(dòng)器條帶化(缺失奇偶校驗(yàn))的一般過程i)假定所述條帶由不同驅(qū)動(dòng)器上的數(shù)據(jù)塊‘A’‘B’‘C’和‘D’組成。缺失奇偶校驗(yàn)‘D’。ii)定義‘A’為包括存儲(chǔ)區(qū)的前三分之一,‘B’為第二個(gè)三分之一,而‘C’為第三個(gè)三分之一。iii)在‘A’驅(qū)動(dòng)器上分配2個(gè)區(qū)域的‘G’,在‘C’驅(qū)動(dòng)器上分配2個(gè)區(qū)域的‘E’并在‘B’驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘F’。iv)將‘B’的前一半復(fù)制到‘G’。v)將‘B’的后一半復(fù)制到‘E’。vi)從‘A’/‘G’和‘E’/‘C’構(gòu)造奇偶校驗(yàn)并將其寫入‘F’。vii)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘D’、‘E’和‘F’中的適當(dāng)位置viii)當(dāng)復(fù)制完成時(shí),用新布局類型更新存儲(chǔ)區(qū)表并將指針設(shè)置為指向‘A’/‘G’、‘E’/‘C’和‘F’ix)將‘B’區(qū)域標(biāo)記為空閑。下面說明根據(jù)本發(fā)明示例性實(shí)施例的從四驅(qū)動(dòng)器條帶化收縮為三驅(qū)動(dòng)器條帶化(缺失前1/3)的一般過程i)假定所述條帶由不同驅(qū)動(dòng)器上的數(shù)據(jù)塊‘A’‘B’‘C’和‘D’組成。缺失數(shù)據(jù)‘A’。ii)定義‘A’為包括存儲(chǔ)區(qū)的前三分之一,‘B’為第二個(gè)三分之一而‘C’為第三個(gè)三分之一以及‘D’為奇偶校驗(yàn)。iii)在‘B’驅(qū)動(dòng)器上分配4個(gè)區(qū)域的‘E’,在‘C’驅(qū)動(dòng)器上分配2個(gè)區(qū)域的‘F’并在‘D’驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘G’。iv)將‘B’的后一半復(fù)制到‘F’。v)根據(jù)‘B’、‘C’和‘D’構(gòu)造缺失數(shù)據(jù)并寫入‘E’vi)根據(jù)‘E’、‘B’的前一半和‘F’/‘C’構(gòu)造新奇偶校驗(yàn)并寫入‘G’vii)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘B’、‘E’、‘F’和‘G’中的適當(dāng)位置viii)當(dāng)復(fù)制完成時(shí),用新布局類型更新存儲(chǔ)區(qū)表并將指針設(shè)置為指向‘E’、‘B’的前一半和‘F’/‘C’以及‘G’ix)將‘B’的后一半和‘D’區(qū)域標(biāo)記為空閑。下面說明根據(jù)本發(fā)明示例性實(shí)施例的從四驅(qū)動(dòng)器條帶化收縮為三驅(qū)動(dòng)器條帶化(缺失第二個(gè)1/3)的一般過程i)假定所述條帶由不同驅(qū)動(dòng)器上的數(shù)據(jù)塊‘A’‘B’‘C’和‘D’組成。缺失數(shù)據(jù)‘B’。ii)定義‘A’為包括存儲(chǔ)區(qū)的前三分之一,‘B’為第二個(gè)三分之一而‘C’為第三個(gè)三分之一以及‘D’為奇偶校驗(yàn)。iii)在‘A’驅(qū)動(dòng)器上分配2個(gè)區(qū)域的‘E’,在‘C’驅(qū)動(dòng)器上分配2個(gè)區(qū)域的‘F’并在‘D’驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘G’。iv)根據(jù)‘A’的前一半、‘C’的前一半和‘D’的前一半構(gòu)造缺失數(shù)據(jù)并寫入‘E’v)從‘A’的后一半、‘C’的后一半和‘D’的后一半構(gòu)造缺失數(shù)據(jù)并寫入‘F’vi)從‘A’/‘E’和‘F’/‘C’構(gòu)造新奇偶校驗(yàn)并寫入‘G’vii)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘E’、‘F’和‘G’中的適當(dāng)位置viii)當(dāng)復(fù)制完成時(shí),用新布局類型更新存儲(chǔ)區(qū)表并將指針設(shè)置為指向‘E’‘F’以及‘G’ix)將‘D’區(qū)域標(biāo)記為空閑。下面說明根據(jù)本發(fā)明示例性實(shí)施例的從四驅(qū)動(dòng)器條帶化收縮為三驅(qū)動(dòng)器條帶化(缺失第三個(gè)1/3)的一般過程i)假定所述條帶由不同驅(qū)動(dòng)器上的數(shù)據(jù)塊‘A’‘B’‘C’和‘D’組成。缺失數(shù)據(jù)‘C’。ii)定義‘A’為包括該存儲(chǔ)區(qū)的前三分之一,‘B’為第二個(gè)三分之一而‘C’為第三個(gè)三分之一以及‘D’為奇偶校驗(yàn)。iii)在‘A’驅(qū)動(dòng)器上分配2個(gè)區(qū)域的‘E’,在‘B’驅(qū)動(dòng)器上分配4個(gè)區(qū)域的‘F’并在‘D’驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘G’。iv)將‘B’的前一半復(fù)制到‘E’v)根據(jù)‘A’、‘B’和‘D’構(gòu)造缺失數(shù)據(jù)并寫入‘F’vi)從‘A’/‘E’和‘B’/‘F’的后一半構(gòu)造新奇偶校驗(yàn)并寫入‘G’vii)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘E’、‘F’和‘G’中的適當(dāng)位置viii)當(dāng)復(fù)制完成時(shí),用新布局類型更新存儲(chǔ)區(qū)表并將指針設(shè)置為指向‘A’/‘E’和‘B’/‘F’的后一半以及‘G’ix)將‘B’的前一半和‘D’區(qū)域標(biāo)記為空閑。例如,再次參考圖3,如果驅(qū)動(dòng)器0或者驅(qū)動(dòng)器1丟失,只要在驅(qū)動(dòng)器2上有足夠的可用空間,就可以在驅(qū)動(dòng)器2上重構(gòu)雙驅(qū)動(dòng)器鏡像(存儲(chǔ)區(qū)B)。類似地,如果損失任何驅(qū)動(dòng)器0至2,只要驅(qū)動(dòng)器3上有足夠可用空間,三驅(qū)動(dòng)器鏡像(存儲(chǔ)區(qū)C)就可以利用驅(qū)動(dòng)器3重構(gòu)。數(shù)據(jù)布局模式——存儲(chǔ)區(qū)重構(gòu)當(dāng)已經(jīng)去除驅(qū)動(dòng)器并且剩余驅(qū)動(dòng)器上有足夠空間用于理想的存儲(chǔ)區(qū)再布局或者驅(qū)動(dòng)器已經(jīng)用新的或者更大尺寸驅(qū)動(dòng)器替換,會(huì)發(fā)生存儲(chǔ)區(qū)重構(gòu)。下面說明根據(jù)本發(fā)明示例性實(shí)施例的雙驅(qū)動(dòng)器鏡像重構(gòu)的一般過程i)假定單驅(qū)動(dòng)器鏡像具有數(shù)據(jù)‘A’和缺失鏡像‘B’ii)在不同于包含‘A’的驅(qū)動(dòng)器的驅(qū)動(dòng)器上分配12個(gè)區(qū)域的‘C’iii)將數(shù)據(jù)A’復(fù)制到‘C’iv)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須鏡像到‘C’中適當(dāng)位置v)當(dāng)復(fù)制完成時(shí)用指向‘C’指針更新存儲(chǔ)區(qū)表指向‘B’的指針下面說明根據(jù)本發(fā)明示例性實(shí)施例的三驅(qū)動(dòng)器條帶化重構(gòu)的一般過程i)假定一個(gè)驅(qū)動(dòng)器具有數(shù)據(jù)‘A’,第二驅(qū)動(dòng)器具有數(shù)據(jù)‘B’而第三個(gè)具有奇偶校驗(yàn)‘P’。缺失‘B’。注意缺失哪片無關(guān)緊要,在所有情況下需要的操作都是相同的。ii)在不同于包含‘A’和‘P’的驅(qū)動(dòng)器的驅(qū)動(dòng)器上分配6個(gè)區(qū)域的‘D’iii)從‘A’和‘P’構(gòu)造缺失數(shù)據(jù)。向‘D’寫數(shù)據(jù)iv)任何已經(jīng)復(fù)制的對(duì)數(shù)據(jù)的寫都必須奇偶校驗(yàn)到‘D’中的適當(dāng)位置v)用指向‘D’的指針替換指向‘B’的指針以更新存儲(chǔ)區(qū)表在這個(gè)示例性實(shí)施例中,四驅(qū)動(dòng)器重構(gòu)僅當(dāng)如果去除的驅(qū)動(dòng)器被其他驅(qū)動(dòng)器替換時(shí)發(fā)生。所述重構(gòu)包括在新驅(qū)動(dòng)器上分配六個(gè)區(qū)域并根據(jù)其他三個(gè)區(qū)域集合重構(gòu)缺失的數(shù)據(jù)。數(shù)據(jù)布局模式——暫時(shí)缺失驅(qū)動(dòng)器問題當(dāng)去除驅(qū)動(dòng)器而沒有用于再布局的空間時(shí),陣列將繼續(xù)按降級(jí)模式來運(yùn)行,直到其他舊驅(qū)動(dòng)器插回或者用新的替換該驅(qū)動(dòng)器。如果插入新的驅(qū)動(dòng)器,那么將再建驅(qū)動(dòng)器組。在這種情況下,數(shù)據(jù)將再布局。如果舊的盤放回該陣列,那么其將不再是當(dāng)前盤組的一部分并且將被視其為新盤。但是,如果該陣列中沒有放入新盤而是放回舊的那個(gè),那么舊的那個(gè)將仍然被視為該盤組的一員,盡管是被廢棄的成員。在這種情況下,任何已經(jīng)再布局的存儲(chǔ)區(qū)都將保持其新配置而該舊盤上的區(qū)域?qū)⒖臻e。任何沒有被再布局的區(qū)域仍然指向該舊盤存儲(chǔ)區(qū)的適當(dāng)區(qū)域。但是,由于已經(jīng)對(duì)降級(jí)存儲(chǔ)區(qū)執(zhí)行了某些寫,因此這些存儲(chǔ)區(qū)需要刷新??梢詷?biāo)記已經(jīng)改變的降級(jí)區(qū)域,而不是記錄每個(gè)已經(jīng)發(fā)生的寫。這樣,當(dāng)替換盤時(shí),僅已經(jīng)改變的區(qū)域需要刷新。而且,任何已經(jīng)被寫入的存儲(chǔ)區(qū)可被置于更高的優(yōu)先表用于再布局。這應(yīng)當(dāng)減少了應(yīng)該替換盤的需要刷新的區(qū)域數(shù)量。還可以使用超時(shí),在這一點(diǎn)之后,即使該盤被替換也將被擦去。但是,這種超時(shí)可能相當(dāng)大,可能是數(shù)小時(shí)而非數(shù)分鐘。數(shù)據(jù)布局模式——數(shù)據(jù)完整性如上所述,標(biāo)準(zhǔn)RAID系統(tǒng)的一個(gè)問題是可能盤面損壞發(fā)生在盤陣列的不常使用的區(qū)域。在另一個(gè)驅(qū)動(dòng)器故障的情況下,經(jīng)常不能確定損壞已經(jīng)發(fā)生。在這種情況下,當(dāng)RAID陣列重建該故障驅(qū)動(dòng)器時(shí),會(huì)傳播并保存該損壞的數(shù)據(jù)。上述散列機(jī)制提供在RAID下可用的數(shù)據(jù)破壞檢測(cè)的附加機(jī)制。如在其他地方提及的,當(dāng)存儲(chǔ)某個(gè)塊(chunk)時(shí),為該塊計(jì)算并存儲(chǔ)散列值。每次讀取該塊的時(shí)候,都可以計(jì)算檢索塊的散列值并與存儲(chǔ)的散列值進(jìn)行比較。如果該散列值不匹配(指示損壞的塊),那么塊數(shù)據(jù)可以根據(jù)冗余數(shù)據(jù)恢復(fù)。為了最小化在其中可能發(fā)生盤上數(shù)據(jù)損壞的時(shí)間窗口,將執(zhí)行盤數(shù)據(jù)常規(guī)掃描以盡快發(fā)現(xiàn)并校正損壞的數(shù)據(jù)。也可選地允許執(zhí)行對(duì)陣列讀取的檢查。數(shù)據(jù)布局模式——卷(volume)在后備卷中,不管陣列中盤上可用存儲(chǔ)空間量如何,總是要求陣列是固定尺寸——例如M千兆字節(jié)。假定該陣列包含實(shí)際存儲(chǔ)空間的S字節(jié),其中S<=M,并且可以請(qǐng)求的數(shù)據(jù)存儲(chǔ)在M千兆字節(jié)空間的位置L1、L2、L3等。如果所請(qǐng)求的位置Ln>S,那么用于Ln的數(shù)據(jù)必須存儲(chǔ)在位置Pn<S。這通過基于Ln的包括查找表的索引Pn來進(jìn)行管理,如圖8所示。這種特征使得陣列與不支持卷擴(kuò)展的操作系統(tǒng)共同工作,所述操作系統(tǒng)例如Windows、Linux、和蘋果操作系統(tǒng)。另外,該陣列可以提供多個(gè)都共享相同物理存儲(chǔ)器的后備卷。每個(gè)后備卷都將具有專用查找表,但是將共享數(shù)據(jù)存儲(chǔ)器的相同物理空間。驅(qū)動(dòng)器插槽指示器如上所述,存儲(chǔ)陣列包括一個(gè)或者多個(gè)驅(qū)動(dòng)器插槽。每個(gè)驅(qū)動(dòng)器插槽都可以是空的或者容納硬盤驅(qū)動(dòng)器。每個(gè)驅(qū)動(dòng)器插槽具有能夠指示四種狀態(tài)的專用指示器,所述四種狀態(tài)是關(guān)閉、正常、降級(jí)和故障。該狀態(tài)通常解釋如下在這個(gè)示例性實(shí)施例中,紅/黃/綠發(fā)光二極管(LED)用作指示器。所述LED通常解釋如下圖9示出了根據(jù)本發(fā)明示例性實(shí)施例的具有可用存儲(chǔ)空間并按容錯(cuò)方式運(yùn)行的示例性陣列。用存儲(chǔ)設(shè)備填充插槽B、C和D,并且有充足存儲(chǔ)空間可用于冗余地存儲(chǔ)附加數(shù)據(jù)。插槽B、C和D的指示器是綠色(指示這些存儲(chǔ)設(shè)備操作正確,陣列數(shù)據(jù)冗余,且該陣列具有可用磁盤空間),而插槽A的指示器關(guān)閉(指示插槽A中不需要填充存儲(chǔ)設(shè)備)。圖10示出了根據(jù)本發(fā)明示例性實(shí)施例的示例性陣列,其不具有足夠空間用于維持冗余數(shù)據(jù)存儲(chǔ),并且必須要增加更大空間。插槽C和D中的存儲(chǔ)設(shè)備是滿的。插槽B、C和D的指示器是綠色(指示這些存儲(chǔ)設(shè)備正確運(yùn)行),而插槽A的指示器是紅色(指示該陣列沒有足夠空間用來維持冗余數(shù)據(jù)存儲(chǔ)以及插槽A中應(yīng)當(dāng)填充存儲(chǔ)設(shè)備)。圖11示出了根據(jù)本發(fā)明示例性實(shí)施例的在故障情況下不能維持冗余數(shù)據(jù)的示例性陣列。插槽A、B、C和D用存儲(chǔ)設(shè)備填充。插槽C和D中的存儲(chǔ)設(shè)備是滿的。插槽A、B、和C的指示器是綠色(指示它們正確運(yùn)行),而插槽D的指示器是黃色(指示插槽D中的存儲(chǔ)設(shè)備應(yīng)當(dāng)用具有更大存儲(chǔ)容量的存儲(chǔ)設(shè)備來填充)。圖12示出了根據(jù)本發(fā)明示例性實(shí)施例的示例性陣列,其中的存儲(chǔ)設(shè)備已經(jīng)故障。用存儲(chǔ)設(shè)備填充插槽B、C和D。插槽C中的存儲(chǔ)設(shè)備故障。插槽B和D的指示器是綠色(指示它們正確運(yùn)行),而插槽C的指示器是紅色(指示應(yīng)當(dāng)替換插槽C中的存儲(chǔ)設(shè)備),而插槽A的指示器關(guān)閉(指示插槽A中不需要填充存儲(chǔ)設(shè)備)。下面說明本發(fā)明示例性實(shí)施例的軟件設(shè)計(jì)。該軟件設(shè)計(jì)基于六個(gè)軟件層,其跨越從物理訪問該磁盤到與主機(jī)計(jì)算系統(tǒng)通行的邏輯體系結(jié)構(gòu)。在這個(gè)示例性實(shí)施例中,文件系統(tǒng)駐留在主服務(wù)器上,例如Windows、Linux、或者蘋果服務(wù)器,并訪問如USB或者iSCSI設(shè)備的存儲(chǔ)陣列。由主請(qǐng)求管理器(HRM)處理經(jīng)過主界面到達(dá)的物理盤請(qǐng)求。主I/O界面將主USB或者iSCSI界面的表示協(xié)調(diào)至該主機(jī)(host),以及與HRM有接口。HRM協(xié)調(diào)來自主I/O界面的數(shù)據(jù)讀/寫請(qǐng)求,調(diào)度讀和寫請(qǐng)求,并在它們完成時(shí)協(xié)調(diào)這些請(qǐng)求的結(jié)果返回該主機(jī)。本存儲(chǔ)陣列的主要目的是保證一旦系統(tǒng)接受數(shù)據(jù),其按可靠方法來存儲(chǔ),使用系統(tǒng)當(dāng)前存儲(chǔ)的最大量冗余。隨著該陣列改變物理配置,而重新組織數(shù)據(jù)以維持(以及可能最大化)冗余。另外,基于壓縮的簡(jiǎn)單散列用于減少使用的存儲(chǔ)量。最基本的層包括盤驅(qū)動(dòng)器,用來在不同盤上存儲(chǔ)數(shù)據(jù)。可以經(jīng)由各種接口連接盤,例如經(jīng)USB接口的ATA隧道。所述盤上的扇區(qū)被組織成區(qū)域、存儲(chǔ)區(qū)和聚簇,其中每個(gè)都具有不同邏輯角色。區(qū)域表示盤上的一組連續(xù)物理塊。在四驅(qū)動(dòng)器系統(tǒng)中,每個(gè)區(qū)域是1/12GB大小,并表示冗余的最小單位。如果發(fā)現(xiàn)區(qū)域中的扇區(qū)是物理損壞的,那么將放棄整個(gè)區(qū)域。存儲(chǔ)區(qū)表示冗余單位。存儲(chǔ)區(qū)包括一組區(qū)域,可能在不同盤上用來提供適當(dāng)?shù)娜哂嗔?。存?chǔ)區(qū)將提供1GB的數(shù)據(jù)容量,但是可能需要更多的區(qū)域以便于提供冗余。具有冗余的1GB需要12個(gè)區(qū)域的集合(1GB);1GB鏡像存儲(chǔ)區(qū)需要兩組1GB的區(qū)域(24個(gè)區(qū)域);1GB三盤條帶化存儲(chǔ)區(qū)將需要三組0.5GB的區(qū)域(18個(gè)區(qū)域)。不同存儲(chǔ)區(qū)將具有不同冗余特征。聚簇表示壓縮的基本單位,并且是存儲(chǔ)區(qū)之內(nèi)的單元尺寸。它們當(dāng)前是4KB8×512字節(jié)扇區(qū)大小。許多盤上的聚簇會(huì)包含相同數(shù)據(jù)。聚簇存取表(CAT)用于經(jīng)由散列函數(shù)追蹤聚簇的使用。CAT在邏輯主地址和存儲(chǔ)區(qū)中適當(dāng)聚簇位置之間轉(zhuǎn)換。當(dāng)向盤寫入時(shí),散列函數(shù)用于發(fā)現(xiàn)數(shù)據(jù)是否已經(jīng)存在于該盤上。如果是,CAT表中的適當(dāng)項(xiàng)會(huì)被設(shè)置為指向現(xiàn)有聚簇。CAT表駐留在其自己的存儲(chǔ)區(qū)。如果超過該存儲(chǔ)區(qū)大小,會(huì)使用附加存儲(chǔ)區(qū),并且使用表把邏輯地址映射到該存儲(chǔ)區(qū)用于CAT的部分。換句話說,預(yù)分配存儲(chǔ)區(qū)用于包含該CAT表。為了減少主寫入等待時(shí)間并保證數(shù)據(jù)可靠性,日志管理器將記錄全部寫請(qǐng)求(或者寫入盤或者寫入NVRAM)。如果系統(tǒng)重啟,在重啟時(shí)要提交日志項(xiàng)。磁盤可以添加或者去除,或者如果發(fā)現(xiàn)區(qū)域已經(jīng)損壞則可以讓該區(qū)域退出。在任何這些情況下,布局管理器都可以在存儲(chǔ)區(qū)中重組區(qū)域,以改變其冗余類型,或者改變存儲(chǔ)區(qū)的區(qū)域構(gòu)成(如果某個(gè)區(qū)域被損壞)。由于存儲(chǔ)陣列提供虛擬盤陣列因此通過改變物理盤空間的級(jí)別來返回,并且由于提供分塊級(jí)別的接口,當(dāng)聚簇不再被文件系統(tǒng)使用時(shí)就不是顯然的。結(jié)果,所使用的聚簇空間將繼續(xù)擴(kuò)展。垃圾收集器(位于主機(jī)或者按固件形式)將分析該文件系統(tǒng)以確定哪個(gè)聚簇已經(jīng)空閑,并且從散列表中刪除它們。下表示出了根據(jù)本發(fā)明該示例性實(shí)施例的六個(gè)軟件層圖13示出了模塊層次,其表示不同軟件層和它們彼此的關(guān)系。軟件層優(yōu)選地固定以便于提供清晰的API和描述。垃圾收集器釋放不再由主文件系統(tǒng)使用的聚簇。例如,當(dāng)刪除文件時(shí),優(yōu)選地釋放用于包含該文件的聚簇。日志管理器提供某種形式的寫日志,從而在電源故障或者其他差錯(cuò)條件的情況下不丟失掛起的寫操作。布局管理器提供存儲(chǔ)區(qū)相對(duì)于其區(qū)域的運(yùn)行時(shí)再布局。這可能根據(jù)盤插入/刪除或者故障而發(fā)生。聚簇管理器在一組數(shù)據(jù)存儲(chǔ)區(qū)中分配聚簇。盤利用守護(hù)程序(diskutilizationdaemon)周期性檢查空閑的盤空間。加鎖表(LockTable)處理寫操作沖突問題后的讀操作。主請(qǐng)求管理器處理來自主機(jī)和垃圾收集器的讀/寫請(qǐng)求。寫操作被傳遞到日志管理器,而讀操作經(jīng)由聚簇存取表(CAT)管理層來處理。如上所述,在典型文件系統(tǒng)中,一定量的數(shù)據(jù)通常實(shí)質(zhì)上重復(fù)。為了減少盤空間利用,這種數(shù)據(jù)的多個(gè)復(fù)制不會(huì)寫入該盤。而是寫入一個(gè)實(shí)例,相同數(shù)據(jù)的其他全部實(shí)例引用(reference)這一個(gè)實(shí)例。在本示例性實(shí)施例中,任何時(shí)間系統(tǒng)在數(shù)據(jù)聚簇上操作(例如8個(gè)物理扇區(qū)),而這是散列的單位。使用SHA1算法來產(chǎn)生160位的散列值。這樣具有很多好處,包括好的唯一性,并且被許多處理器在片上支持。全部160位將存儲(chǔ)在散列記錄中,但是僅最低16位被用作散列表中的索引。其他匹配該最低16位的實(shí)例將經(jīng)由鏈接表鏈接。在這個(gè)示例性實(shí)施例中,僅一個(gè)讀/寫操作可以同時(shí)發(fā)生。為了性能的目的,當(dāng)向磁盤寫聚簇時(shí)不允許發(fā)生散列分析。而散列分析將由散列管理器作為背景活動(dòng)而發(fā)生。從日志的寫隊(duì)列讀取寫請(qǐng)求,并處理以完成寫操作。為了保證數(shù)據(jù)一致性,如果已經(jīng)有寫操作在該聚簇上活動(dòng),必須延遲該寫操作。在其他聚簇上的操作可以不受阻礙的進(jìn)行。除非寫整個(gè)聚簇,否則寫入的數(shù)據(jù)將需要與現(xiàn)有存儲(chǔ)在該聚簇中的數(shù)據(jù)歸并。根據(jù)邏輯扇區(qū)地址(LSA),定位聚簇的CAT項(xiàng)。從這個(gè)記錄獲得散列關(guān)鍵字、存儲(chǔ)區(qū)和聚簇偏移信息,然后它們可用于搜索散列表以發(fā)現(xiàn)匹配。這就是聚簇。雙重散列該散列表可能是必需的;一旦經(jīng)由SHA1摘取(digest),然后就通過存儲(chǔ)區(qū)/聚簇偏移用于改進(jìn)正確散列項(xiàng)的查找速度。如果已經(jīng)使用了散列記錄,引用計(jì)數(shù)被遞減。如果引用計(jì)數(shù)現(xiàn)在為零,并且沒有由散列項(xiàng)快照引用,該散列項(xiàng)和聚簇可被釋放回它們各自的空閑表?,F(xiàn)在歸并原來的聚簇?cái)?shù)據(jù)和聚簇的更新扇區(qū),而且數(shù)據(jù)要被再散列。新的聚簇從空閑表中被剔除,把歸并數(shù)據(jù)寫入該聚簇,向散列表中增加新項(xiàng),CAT表中的項(xiàng)更新為指向該新聚簇。作為更新散列表的結(jié)果,該項(xiàng)同樣添加到用于由背景任務(wù)處理的內(nèi)部隊(duì)列。這個(gè)任務(wù)將把新添加的聚簇和散列項(xiàng)與匹配該散列表行地址的其他散列項(xiàng)進(jìn)行比較,如果它們重復(fù),將結(jié)合記錄,在適當(dāng)時(shí)釋放散列項(xiàng)和CAT表項(xiàng)。這保證了寫等待時(shí)間不由這個(gè)活動(dòng)負(fù)擔(dān)。如果在這個(gè)處理期間發(fā)生故障(例如掉電),則可以根據(jù)丟失數(shù)據(jù)刪除各種表。各個(gè)表應(yīng)當(dāng)以這種方式管理,最終的提交是原子的(atomic),或者日志項(xiàng)可以再運(yùn)行,如果它沒有全部完成的話。下面是寫邏輯的偽代碼While(stufftodo)WriteRecord=j(luò)ournalMgr.read();1sa=writeRecord.RetLsa();catEntry=catMgr.GetCATEntry(1sa);if(catMgr.writeInProgress(catEntry))delay();originalCluster=catMgr.readCluster(catEntry);originalHash=hashMgr.calcHash(originalCluster);hashRecord=hashMgr.Lookup(originalHash,zone,offset);if((hashRecord.RefCount==1)&&(hashRecord.snapshot=0))hashRecord.free();originalCluster.free();//注意這里有某種優(yōu)化,可重用該聚簇而無須釋放或重新分配它。//otherwise,stillusersofthiscluster,soupdate&leaveitalonehashRecord.RefCount--;hashRecord.Update(hashRecord);//現(xiàn)在添加新記錄mergedCluster=mergeCluster(originalCluster,newCluster);newHash=hashMgr.calcHash(mergedCluster);newCluster=clusterMgr.AllocateCluster(zone,offset);clusterMgr.write(cluster,mergedCluster);zoneMgr.write(cluster,mergedCluster);...hashMgr.addHash(newHash,newCluster,zone,offset)(internal:queuenewhashforbackgroundprocessing)catMgr.Update(1ba,zone,offset,newHash);//我們已成功完成該日志項(xiàng)。移至下一個(gè)。JournalMgr.next();讀請(qǐng)求同樣按每次一個(gè)聚簇(相對(duì)于“扇區(qū)”)來處理。讀請(qǐng)求不通過上述的習(xí)慣于散列的處理。而是,使用主邏輯扇區(qū)地址來引用(reference)CAT并獲得存儲(chǔ)區(qū)編號(hào)和聚簇到該存儲(chǔ)區(qū)的偏移。讀請(qǐng)求應(yīng)當(dāng)在CAT緩存中查找CAT表項(xiàng),并且必須在設(shè)置了寫進(jìn)行位(write-in-progressbit)時(shí)延遲。其他讀/寫可以不受阻止的進(jìn)行。為了改進(jìn)數(shù)據(jù)完整性檢查,當(dāng)讀聚簇時(shí),其將被散列,并且該散列值與存儲(chǔ)在散列記錄中的SHA1散列值進(jìn)行比較。這將需要使用該散列、存儲(chǔ)區(qū)和聚簇偏移作為進(jìn)入散列表的搜索關(guān)鍵字。分配聚簇用作盡可能少的存儲(chǔ)區(qū)。這是因?yàn)榇鎯?chǔ)區(qū)直接對(duì)應(yīng)于盤驅(qū)動(dòng)器利用率。對(duì)每個(gè)存儲(chǔ)區(qū)而言,硬驅(qū)動(dòng)器陣列上有兩個(gè)或者更多區(qū)域。通過最小化存儲(chǔ)區(qū)數(shù)量,物理區(qū)域的數(shù)量最小化,并由此減少硬盤驅(qū)動(dòng)器陣列上的空間消耗。聚簇管理器分配來自一組數(shù)據(jù)存儲(chǔ)區(qū)的聚簇。使用鏈接列表保持追蹤存儲(chǔ)區(qū)中的空閑聚簇。但是,空閑聚簇信息在磁盤上存儲(chǔ)為位圖(32KB每存儲(chǔ)區(qū))。該鏈接列表從位圖(bitmap)動(dòng)態(tài)地構(gòu)造。最初,在存儲(chǔ)器中創(chuàng)建特定量空閑扇區(qū)的鏈接列表。當(dāng)分配聚簇時(shí),該列表收縮。在預(yù)定最低點(diǎn),從磁盤上的位圖提取表示空閑聚簇的新鏈接列表節(jié)點(diǎn)。這樣,為了發(fā)現(xiàn)用于分配的空閑聚簇,不需要分析位圖。在這個(gè)示例性實(shí)施例中,散列表是64K記錄表(由散列的低16位索引)并且具有下列格式全零的聚簇可以相當(dāng)常見,因此全零的情況可以視作特殊情況,例如,使得永遠(yuǎn)不被刪除(因此覆蓋計(jì)數(shù)將不是問題)。當(dāng)多個(gè)散列具有相同最低有效散列時(shí),或者當(dāng)兩個(gè)散列項(xiàng)指向不同數(shù)據(jù)聚簇時(shí),使用空閑散列記錄的鏈接列表。在兩種情況下,空閑散列記錄都將從該列表中取出,并經(jīng)由pNextHash指針鏈接。散列管理器將整理全部添加到散列表中的項(xiàng)并將合并該盤上的相同聚簇。隨著新的散列記錄增加到該散列表中,消息將被傳遞到散列管理器。這可由散列管理器自動(dòng)執(zhí)行。作為背景活動(dòng),散列管理器即將處理其隊(duì)列上的項(xiàng)。將比較全部散列值以發(fā)現(xiàn)其是否匹配任何現(xiàn)有散列記錄。如果是,將同樣比較完整聚簇?cái)?shù)據(jù)。如果聚簇匹配,則新散列記錄可以被廢除回空閑隊(duì)列,散列記錄計(jì)數(shù)遞增,并且重復(fù)的聚簇將被返回聚簇空閑隊(duì)列。當(dāng)合并記錄時(shí),散列管理器必須注意向前傳播快照位。聚簇存取表(CAT)包含間接指針。該指針指向存儲(chǔ)區(qū)中的數(shù)據(jù)聚簇(0是第一數(shù)據(jù)聚簇)。一個(gè)CAT項(xiàng)引用單個(gè)數(shù)據(jù)聚簇(暫定4KB大小)。使用CAT(連同散列)使得當(dāng)存在大量重復(fù)的數(shù)據(jù)時(shí)減少盤使用需求。單個(gè)CAT通常表示連續(xù)存儲(chǔ)塊。CAT包含在非數(shù)據(jù)存儲(chǔ)區(qū)中。每個(gè)CAT項(xiàng)是48位。下表示出每個(gè)項(xiàng)如何布局(假定每個(gè)數(shù)據(jù)存儲(chǔ)區(qū)包含1GB數(shù)據(jù))希望CAT適合64位,但這不是必需的。2TB陣列的CAT表當(dāng)前是至4GB大小。每個(gè)CAT項(xiàng)指向包含該數(shù)據(jù)和存儲(chǔ)區(qū)編號(hào)的存儲(chǔ)區(qū)。圖14顯示CAT如何用于存取存儲(chǔ)區(qū)中的數(shù)據(jù)聚簇。冗余數(shù)據(jù)通過CAT中的一個(gè)以上的項(xiàng)來引用。兩個(gè)邏輯聚簇包含相同數(shù)據(jù),因此它們的CAT項(xiàng)指向相同物理聚簇。散列關(guān)鍵字包含完整聚簇160位SHA1散列值的16位摘取。這個(gè)項(xiàng)用于在寫操作期間更新該散列表。CAT中的每個(gè)項(xiàng)有足夠的位用于引用16TB的數(shù)據(jù)。但是,如果每個(gè)數(shù)據(jù)聚簇都彼此不同(根據(jù)內(nèi)容),那么只需要3個(gè)存儲(chǔ)區(qū)的CAT項(xiàng)來引用2TB的數(shù)據(jù)(每個(gè)存儲(chǔ)區(qū)都是1GB大小,并由此可以存儲(chǔ)1GB/大小的CAT項(xiàng)。假定6字節(jié)CAT項(xiàng),則178956970項(xiàng)/存儲(chǔ)區(qū),即表引用大約682GB/存儲(chǔ)區(qū),如果每個(gè)聚簇是4K的話)。主邏輯扇區(qū)轉(zhuǎn)換表用于將主邏輯扇區(qū)地址轉(zhuǎn)換成存儲(chǔ)區(qū)編號(hào)。相應(yīng)于主邏輯扇區(qū)地址的CAT部分將駐留在這個(gè)存儲(chǔ)區(qū)中。注意每個(gè)CAT項(xiàng)表示4096字節(jié)的扇區(qū)大小。這是八個(gè)512字節(jié)扇區(qū)。下面顯示主邏輯扇區(qū)轉(zhuǎn)換表的表示可以預(yù)分配存儲(chǔ)區(qū)以保持整個(gè)CAT。換句話說,存儲(chǔ)區(qū)可以分配給CAT,如需要更多CAT項(xiàng)。由于CAT把2TB虛擬磁盤映射至主扇區(qū)地址空間,因此由主機(jī)做硬盤分區(qū)或者格式化期間將引用CAT的很大部分。為此,要預(yù)分配存儲(chǔ)區(qū)。CAT是大的1GB/存儲(chǔ)區(qū)表。使用的工作聚簇集將是來自這個(gè)大表的后備集。為了性能的原因,活動(dòng)的項(xiàng)(可能暫時(shí))可以在處理器存儲(chǔ)器中緩存而不總是從磁盤讀取。至少有兩個(gè)選項(xiàng)用于填充該緩存——來自CAT的個(gè)別項(xiàng),或者來自CAT的整個(gè)聚簇。因?yàn)閷戇M(jìn)行(write-in-progress)與CAT緩存表相組合,所以需要確保該緩存中保持全部未完成的寫。因此,需要該緩存至少與未完成寫請(qǐng)求的最大數(shù)量一樣大。緩存中的項(xiàng)數(shù)將是聚簇大小(即4K)。需要知道聚簇上的操作中是否還有寫入進(jìn)行。這個(gè)指示可以作為標(biāo)志存儲(chǔ)在該聚簇的緩存項(xiàng)中。下表顯示CAT緩存項(xiàng)的格式緩存項(xiàng)中的寫進(jìn)行標(biāo)志有兩種含義。首先,它指出寫操作正在進(jìn)行,并且在這個(gè)聚簇上的任何讀(或者附加寫)必須延遲,直到完成該寫操作。其次,當(dāng)設(shè)置該位時(shí),絕不能刷新緩存中的這個(gè)項(xiàng)。這部分地保護(hù)了該位的狀態(tài),同時(shí)反映了這個(gè)聚簇當(dāng)前被使用的事實(shí)。另外,這意味著緩存的尺寸必須至少與未完成的寫操作數(shù)量一樣大。在聚簇的緩存項(xiàng)中存儲(chǔ)寫進(jìn)行指示符的一個(gè)優(yōu)點(diǎn)是它反映了操作正在進(jìn)行的事實(shí),省去了使用其他表格,并且省去了另外的基于散列的查找,或用于檢查該位的表查找。該緩存可以是寫延遲緩存。只需要當(dāng)寫操作完成時(shí),將緩存項(xiàng)寫回磁盤,雖然將其更早寫回可能更好。散列函數(shù)或者其他機(jī)制可用于增加可散列的未完成的寫項(xiàng)。一種替換方法是緩存整個(gè)CAT聚簇(即各項(xiàng)的4K項(xiàng))。這通常有助于性能,如果有好的訪問空間定位的話。需要注意,因?yàn)镃AT項(xiàng)是48位寬,因此緩存中沒有全部的項(xiàng)。下表顯示聚簇CAT緩存項(xiàng)的示例該表格尺寸可以是4096+96(4192字節(jié))。假定需要具有250項(xiàng)的緩存大小,該緩沖可以占據(jù)大約1MB。通過邏輯CAT項(xiàng)地址的適當(dāng)屏蔽可以計(jì)算首項(xiàng)和末項(xiàng)是否未完成。緩存查找例程應(yīng)當(dāng)在加載項(xiàng)之前執(zhí)行這個(gè)過程并且應(yīng)當(dāng)加載需要的CAT聚簇。當(dāng)主機(jī)發(fā)送扇區(qū)(或者聚簇)讀請(qǐng)求時(shí),其通過邏輯扇區(qū)地址發(fā)送。該邏輯扇區(qū)地址用作到CAT的偏移以獲得包含主機(jī)所請(qǐng)求的實(shí)際數(shù)據(jù)的存儲(chǔ)區(qū)中的聚簇的偏移。結(jié)果是存儲(chǔ)區(qū)編號(hào)和到該存儲(chǔ)區(qū)的偏移。該信息傳遞給層2軟件,然后其從(多個(gè))驅(qū)動(dòng)器提取原始(多個(gè))聚簇。為了處理主機(jī)從未寫過的聚簇,所有CAT項(xiàng)被初始化為指向包含全零的“默認(rèn)”聚簇。日志管理器是兩級(jí)寫(bi-levelwrite)日志系統(tǒng)。該系統(tǒng)的一個(gè)目標(biāo)是保證可以從主機(jī)接收寫請(qǐng)求并快速向該主機(jī)返回指示,數(shù)據(jù)已經(jīng)在保證其完整性的同時(shí)被接收。另外,該系統(tǒng)需要保證在任何盤寫入期間的系統(tǒng)復(fù)位的情況下,不會(huì)有塊級(jí)數(shù)據(jù)或者系統(tǒng)元數(shù)據(jù)(例如CAT和散列表項(xiàng))的損壞合丟失。J1日志管理器盡快緩存所有從主機(jī)向磁盤的寫請(qǐng)求。一旦寫入成功完成(即數(shù)據(jù)已經(jīng)被陣列接收),主機(jī)就可以發(fā)信號(hào)指示操作已經(jīng)完成。日志項(xiàng)允許當(dāng)從故障恢復(fù)時(shí),恢復(fù)寫請(qǐng)求。日志記錄包括要寫入磁盤的數(shù)據(jù),以及與寫事務(wù)相關(guān)的元數(shù)據(jù)。為了減少磁盤讀/寫,與寫入相關(guān)的數(shù)據(jù)將被寫入空閑聚簇。這樣將自動(dòng)鏡像該數(shù)據(jù)。將從空閑聚簇列表去除空閑聚簇。一旦寫數(shù)據(jù),空閑聚簇就必須寫回磁盤。日志記錄將被寫回非鏡像存儲(chǔ)區(qū)上的日志隊(duì)列。每個(gè)記錄都將是扇區(qū)大小,并且對(duì)齊到扇區(qū)邊界,以使得減少日志寫期間的故障會(huì)破壞以前日志項(xiàng)的風(fēng)險(xiǎn)。日志項(xiàng)在記錄的末尾包含唯一的、遞增的順序計(jì)數(shù),因此可以輕易識(shí)別隊(duì)列的結(jié)尾。日志寫操作在主機(jī)隊(duì)列處理線程中同步發(fā)生。日志寫必須按照它們寫入磁盤的次序來排序,因此在任何時(shí)候只有一個(gè)線程可以寫入該日志。J1表中日志項(xiàng)的地址可以用作唯一標(biāo)識(shí)符,因此J1日志項(xiàng)可以與J2日志中的項(xiàng)相關(guān)聯(lián)。一旦寫入日志項(xiàng),將向主完成隊(duì)列傳遞事務(wù)完成通知?,F(xiàn)在可以執(zhí)行寫操作。要保證在完成日志寫之前延遲任何后續(xù)的對(duì)該聚簇的讀,這一點(diǎn)很重要。下表示出了J2日志記錄的格式每個(gè)日志記錄都對(duì)齊到扇區(qū)邊界。日志記錄可以包含存儲(chǔ)區(qū)/偏移/大小的元組的陣列。圖15示出了根據(jù)本發(fā)明示例性實(shí)施例的日志表更新。尤其是當(dāng)接收到主機(jī)寫請(qǐng)求時(shí),更新該日志表,分配一個(gè)或多個(gè)聚簇,并向(多個(gè))聚簇寫入數(shù)據(jù)。處理主日志請(qǐng)求。這引起聚簇被寫入,并同樣引起更新元數(shù)據(jù)結(jié)構(gòu),所述結(jié)構(gòu)必須投影回磁盤(例如CAT表)。重要的是保證這些元數(shù)據(jù)結(jié)構(gòu)正確地寫回磁盤,即使當(dāng)系統(tǒng)發(fā)生復(fù)位。為此將使用低級(jí)磁盤I/O寫(J2)日志。為了處理主界面日志項(xiàng),應(yīng)當(dāng)確定元數(shù)據(jù)結(jié)構(gòu)的適當(dāng)?shù)牟僮?。改變?yīng)當(dāng)發(fā)生在存儲(chǔ)器并且要產(chǎn)生對(duì)各磁盤塊改變的記錄。這種記錄包含在磁盤上應(yīng)該進(jìn)行的實(shí)際改變。更新的每種數(shù)據(jù)結(jié)構(gòu)都用J2日志管理器來登記。這種記錄應(yīng)當(dāng)記錄到基于磁盤的日志,并用標(biāo)識(shí)符來加印戳。當(dāng)記錄與J1日志項(xiàng)相連接,標(biāo)識(shí)符就應(yīng)當(dāng)被鏈接。一旦存儲(chǔ)該記錄,就可以進(jìn)行磁盤的改變(或者可以經(jīng)由后臺(tái)任務(wù)執(zhí)行)。邏輯上J2日志存在于層3。它用于把那些涉及經(jīng)存儲(chǔ)區(qū)管理器的寫的元數(shù)據(jù)更新登記到日志。當(dāng)發(fā)生日志項(xiàng)的再現(xiàn)時(shí),將使用存儲(chǔ)區(qū)管理器方法。日志本身可以存儲(chǔ)在專門區(qū)域。由于日志項(xiàng)的短生命期,不對(duì)其做鏡像。不是所有的元數(shù)據(jù)更新都需要經(jīng)過J2日志,尤其是,如果對(duì)結(jié)構(gòu)的更新是原子的。區(qū)域管理器結(jié)構(gòu)可不使用J2日志??蓹z測(cè)區(qū)域管理器位圖中的不一致,例如,使用完整性檢測(cè)后臺(tái)線程。用于J2日志的一種簡(jiǎn)單方法是包含單個(gè)記錄。一旦該記錄提交給磁盤,就被重放,更新磁盤上的結(jié)構(gòu)。可具有多個(gè)J2記錄,并使后臺(tái)任務(wù)提交磁盤上的更新記錄。這種情況下,需要密切注意日志和與各種數(shù)據(jù)結(jié)構(gòu)相關(guān)的任何緩存算法之間的交互作用。一旦提交給磁盤,初始方法就將運(yùn)行日志項(xiàng)。原則上,會(huì)有J2的多個(gè)并發(fā)的用戶,但是J2日志會(huì)在一個(gè)時(shí)候鎖定到一個(gè)用戶。即使在這種情況下,一旦提交,也會(huì)提交日志項(xiàng)。重要的是保證在任何更高級(jí)的日志活動(dòng)發(fā)生前修復(fù)元數(shù)據(jù)結(jié)構(gòu)。在系統(tǒng)重新引導(dǎo)時(shí),分析J2日志,并將重現(xiàn)任何記錄。如果日志項(xiàng)與J1日志項(xiàng)相關(guān),則將J1日志項(xiàng)標(biāo)記為已完成,并可以被刪除。一旦完成全部J2日志項(xiàng),元數(shù)據(jù)就處于可靠狀態(tài),并且可以處理任何剩余J1日志項(xiàng)。J2日志記錄包括下列信息·操作號(hào)·每個(gè)操作包含оJ1記錄指示符о待寫入存儲(chǔ)區(qū)/數(shù)據(jù)偏移о待寫入數(shù)據(jù)о數(shù)據(jù)大小о到數(shù)據(jù)聚簇的偏移·日志記錄標(biāo)識(shí)符·結(jié)束標(biāo)記這種模式可以按類似于J1日志的模式來操作,例如,使用順序號(hào)用于識(shí)別J2日志項(xiàng)的結(jié)尾并將J2日志項(xiàng)置于扇區(qū)邊界處。如果設(shè)置J1數(shù)據(jù)指針指示符,那么這個(gè)特殊操作會(huì)指向J1日志記錄。主機(jī)提供的寫數(shù)據(jù)不必復(fù)制到日志項(xiàng)。操作陣列將可以定義為固定大小,因日志記錄中操作的最大數(shù)量是已知的。為了允許從低級(jí)寫操作期間的扇區(qū)損壞(例如由于掉電)恢復(fù),J2日志可以存儲(chǔ)被寫入的整個(gè)扇區(qū),使得如果需要該扇區(qū)可以根據(jù)這個(gè)信息來重寫。作為替換或附加,為每個(gè)改變的扇區(qū)計(jì)算的CRC可以存儲(chǔ)在J2記錄中,并與從磁盤扇區(qū)(例如由存儲(chǔ)區(qū)管理器)計(jì)算的CRC進(jìn)行比較,以確定是否需要寫操作的重放。不同日志可以存儲(chǔ)在不同位置,因此提供接口層用于寫日志記錄到備份存儲(chǔ)。該位置應(yīng)當(dāng)是非易失的。兩種候選是硬盤和NVRAM。如果J1日志存儲(chǔ)到硬盤,它將存儲(chǔ)在J1日志非鏡像存儲(chǔ)區(qū)中。J1日志是存儲(chǔ)在NVRAM的候選。J2日志應(yīng)當(dāng)存儲(chǔ)在磁盤上,盡管它可以存儲(chǔ)在專門區(qū)域中(即,不冗余,因?yàn)樗哂卸躺?。將J2日志存儲(chǔ)在磁盤的優(yōu)點(diǎn)是,如果在內(nèi)部數(shù)據(jù)結(jié)構(gòu)更新期間存在系統(tǒng)復(fù)位,那么該數(shù)據(jù)結(jié)構(gòu)可以返回到一致狀態(tài)(即使該單元長(zhǎng)時(shí)期掉電)。存儲(chǔ)區(qū)管理器(ZM)分配更高級(jí)軟件需要的存儲(chǔ)區(qū)。向ZM的請(qǐng)求包括a.分配存儲(chǔ)區(qū)b.解除分配/釋放存儲(chǔ)區(qū)c.控制數(shù)據(jù)讀/寫傳遞到L1(?)d.讀/寫存儲(chǔ)區(qū)中的聚簇(給出聚簇偏移和存儲(chǔ)區(qū)號(hào))ZM管理器管理冗余機(jī)制(隨驅(qū)動(dòng)器的數(shù)量和它們的相關(guān)大小而改變)并處理鏡像、條帶化、以及用于數(shù)據(jù)讀/寫的其他冗余模式。當(dāng)ZM需要分配存儲(chǔ)區(qū)時(shí),它將請(qǐng)求兩個(gè)或者更多區(qū)域集合的分配。例如,要為1GB的數(shù)據(jù)分配存儲(chǔ)區(qū),組成這個(gè)存儲(chǔ)區(qū)的區(qū)域?qū)⒖梢园?GB數(shù)據(jù),包括冗余數(shù)據(jù)。對(duì)鏡像機(jī)制,存儲(chǔ)區(qū)將由各為1GB的兩個(gè)區(qū)域集合構(gòu)成。另一個(gè)示例,3盤條帶化機(jī)制使用各為1/2GB的3組區(qū)域。ZM使用ZR轉(zhuǎn)換表(6)以發(fā)現(xiàn)組成該存儲(chǔ)區(qū)的每組區(qū)域的位置(驅(qū)動(dòng)器號(hào)和起始區(qū)域號(hào))。假定是1/12GB區(qū)域大小,將需要最多24個(gè)區(qū)域。24個(gè)區(qū)域組成2×1GB的存儲(chǔ)區(qū)。因此ZR轉(zhuǎn)換表包含24列,用于提供驅(qū)動(dòng)器/區(qū)域數(shù)據(jù)。ZM通常工作如下a.在SDM的情況下(單個(gè)驅(qū)動(dòng)器鏡像),使用24列。驅(qū)動(dòng)器號(hào)在所有列中都相同。每個(gè)項(xiàng)對(duì)應(yīng)于組成該存儲(chǔ)區(qū)的物理驅(qū)動(dòng)器上的一個(gè)物理區(qū)域。前12個(gè)項(xiàng)指向包含該數(shù)據(jù)的一個(gè)副本的區(qū)域。后12個(gè)項(xiàng)指向包含該數(shù)據(jù)的第二個(gè)副本的區(qū)域。b.DDM(雙驅(qū)動(dòng)器鏡像)的情況與SDM的情況相同,只是前12個(gè)項(xiàng)的驅(qū)動(dòng)器號(hào)與后12個(gè)項(xiàng)中的驅(qū)動(dòng)器號(hào)不同。c.在條帶化的情況下,可以使用三個(gè)或者更多列。例如,如果跨三個(gè)驅(qū)動(dòng)器使用條帶化,則需要來自三個(gè)不同驅(qū)動(dòng)器的六個(gè)區(qū)域(即使用18個(gè)項(xiàng)),前6項(xiàng)包含相同驅(qū)動(dòng)器號(hào),接下來的6項(xiàng)包含另一個(gè)驅(qū)動(dòng)器號(hào),以及隨后的6項(xiàng)包含第三驅(qū)動(dòng)器號(hào),未使用的項(xiàng)置為0。下表顯示存儲(chǔ)區(qū)區(qū)域轉(zhuǎn)換表的表示法當(dāng)讀/寫請(qǐng)求到達(dá)時(shí),對(duì)ZM提供存儲(chǔ)區(qū)號(hào)和到該存儲(chǔ)區(qū)的偏移。ZM查看ZR轉(zhuǎn)換表中用于解決該存儲(chǔ)區(qū)的冗余機(jī)制,并使用該偏移用于計(jì)算哪個(gè)驅(qū)動(dòng)器/區(qū)域包含必須讀/寫的扇區(qū)。然后該驅(qū)動(dòng)器/區(qū)域信息提供給L1層以進(jìn)行實(shí)際的讀/寫。在“使用(usage)”列中的另外可能項(xiàng)是“空閑”?!翱臻e”指存儲(chǔ)區(qū)被定義但當(dāng)前沒有使用。聚簇管理器分配并再分配數(shù)據(jù)存儲(chǔ)區(qū)集合中的聚簇。布局管理器提供存儲(chǔ)區(qū)關(guān)于其區(qū)域的的運(yùn)行時(shí)再布局。這可根據(jù)磁盤插入/除去或者故障而發(fā)生。層1(L1)軟件知道物理驅(qū)動(dòng)器和物理扇區(qū)。除了其他,L1軟件分配物理驅(qū)動(dòng)器的區(qū)域用于存儲(chǔ)區(qū)管理器來使用。在這個(gè)示例性實(shí)施例中,每個(gè)區(qū)域具有用于四驅(qū)動(dòng)器陣列系統(tǒng)的1/12GB大小(即174762扇區(qū))。具有更大數(shù)量驅(qū)動(dòng)器(8,12或16)的系統(tǒng)將具有不同的區(qū)域大小。為了創(chuàng)建包含具有SD3(在三驅(qū)動(dòng)器上條帶化;兩個(gè)數(shù)據(jù)加奇偶校驗(yàn))的1GB數(shù)據(jù)存儲(chǔ)區(qū),我們應(yīng)當(dāng)使用各在三驅(qū)動(dòng)器中的六個(gè)區(qū)域(每個(gè)驅(qū)動(dòng)器為6×1/12=GB)。當(dāng)存儲(chǔ)區(qū)被移動(dòng)或者重配置時(shí),例如根據(jù)鏡像到條帶化,使用這種區(qū)域模式允許我們提供更好的磁盤空間利用。L1軟件利用區(qū)域位圖(bitmap)跟蹤物理驅(qū)動(dòng)器上的可用空間。每個(gè)驅(qū)動(dòng)器都有一個(gè)位圖。每個(gè)區(qū)域都用位圖中的兩位表示,用于跟蹤該區(qū)域是否空閑、使用、或者損壞。當(dāng)L2軟件(ZM)需要?jiǎng)?chuàng)建存儲(chǔ)區(qū)時(shí),它從L1層獲得一組區(qū)域。構(gòu)成存儲(chǔ)區(qū)的區(qū)域不必在磁盤中連續(xù)。向L1的請(qǐng)求包括a.數(shù)據(jù)讀/寫(到一組區(qū)域中的聚簇)b.控制數(shù)據(jù)讀/寫(表格、數(shù)據(jù)結(jié)構(gòu)、DIC等)c.分配區(qū)域的物理空間(1驅(qū)動(dòng)器內(nèi)的實(shí)際物理扇區(qū))d.解除分配區(qū)域e.向物理驅(qū)動(dòng)器的物理聚簇的原始讀/寫(rawread/write)f.從一個(gè)區(qū)域向另一個(gè)復(fù)制數(shù)據(jù)g.將區(qū)域標(biāo)記為損壞??臻e區(qū)域位圖可以是大型的,因此查找空閑項(xiàng)(最糟的情況是沒有空閑的項(xiàng))的搜索可能緩慢。為了改進(jìn)性能,部分位圖可以預(yù)加載到內(nèi)存中,而且空閑區(qū)域的鏈接列表可以存儲(chǔ)在內(nèi)存中。每個(gè)活動(dòng)存儲(chǔ)區(qū)都有列表。如果到達(dá)列表上的低水位線,可以從磁盤讀取更多的空閑項(xiàng)作為背景活動(dòng)。磁盤管理器運(yùn)行在層0。如下表所示,有兩個(gè)子層,分別是抽象層和與物理存儲(chǔ)陣列通信的設(shè)備驅(qū)動(dòng)器。設(shè)備驅(qū)動(dòng)器層同樣可以包含多個(gè)層。例如,對(duì)使用USB驅(qū)動(dòng)器的存儲(chǔ)陣列,在USB輸送層頂端有ATA或者SCSI棧。抽象層提供獨(dú)立于存儲(chǔ)陣列中使用的驅(qū)動(dòng)器種類的基本讀/寫功能??墒褂靡粋€(gè)或者多個(gè)磁盤存取隊(duì)列來對(duì)盤存取請(qǐng)求進(jìn)行排隊(duì)。在我們的系統(tǒng)中,盤存取速度將是一個(gè)關(guān)鍵的性能瓶頸。我們想要保證磁盤接口盡可能在所有時(shí)間保持忙碌,從而減少一般的系統(tǒng)延遲并改進(jìn)性能。請(qǐng)求盤的接口應(yīng)當(dāng)具有異步接口,使用回調(diào)(callback)處理器用于當(dāng)已經(jīng)結(jié)束盤操作時(shí)來完成操作。一個(gè)盤請(qǐng)求的完成將自動(dòng)啟動(dòng)隊(duì)列中的下一個(gè)請(qǐng)求。每個(gè)驅(qū)動(dòng)器有一個(gè)隊(duì)列,或者全部驅(qū)動(dòng)器用一個(gè)隊(duì)列。層1將按邏輯驅(qū)動(dòng)器號(hào)來引用驅(qū)動(dòng)器。層0將邏輯驅(qū)動(dòng)器編號(hào)轉(zhuǎn)換為物理驅(qū)動(dòng)器參考(例如/dev/sda或作為open()調(diào)用的結(jié)果文件設(shè)備號(hào))。為靈活起見(經(jīng)USB擴(kuò)展),應(yīng)當(dāng)每個(gè)邏輯驅(qū)動(dòng)器一個(gè)隊(duì)列。下面是對(duì)象定義和數(shù)據(jù)流的一些示例。MSG對(duì)象從主機(jī)引入LbaLengthLUNDataREPLY對(duì)象引出到主機(jī)StatusHostLengthData數(shù)據(jù)讀數(shù)據(jù)讀流程rc=lockm.islocked(MSG)rc=catm.read(MSG,REPLY)status=zonem.read(zone,offset,length,buffer)regionm.read(logical_disk,region_number,region_offset,length,buffer)diskm.read((logical_disk,offset,length,buffer)數(shù)據(jù)寫數(shù)據(jù)寫流程diskutildaemon.spaceavailable()journalm.write(MSG)lockm.lock(msg)zonem.write(journal_zone,offset,length,buffer)regionm.write-日志項(xiàng)diskm.writeregionm.write-結(jié)束標(biāo)記diskm.writecatm.write(MSG)catm.readcluster(1ba,offset,length,buffer)-如果需要向聚簇歸并扇區(qū)-歸并“if(1ba已經(jīng)分配)”catm.readhashkey(1ba)hashm.lookup(hashkey,zone,offset)“if(refcount=1)”hashentry.getrefcount()hashm.remove(hashentry)hashm.add(shal,zone,offset)zonem.write(zone,offset,length,buffer)-寫數(shù)據(jù)“else”hashentry.removeref()clusterm.allocate(zone.offset)-分配新聚簇zonem.createzone(zone)regionm.unusedregions(logical_disk)regionm.allocate(logical_disk,number_regions,region_list)zonem.write(...)-寫數(shù)據(jù)hashm.add(...)-向散列表增加新項(xiàng)“endif”hashdaemon.add(1ba,sha1)-增加到散列新進(jìn)程Qcatm.writehashkey(1ba,hashkey)-向CAT復(fù)制新散列關(guān)鍵字“else”catm.update(1ba,zone,offset,hashkey)-用新項(xiàng)更新CAT“endif”journalm.complete(MSG)lockm.unlock(MSG)-更新r/w指針下面是物理盤布局的說明。如上所述,每個(gè)盤都劃分為固定尺寸的區(qū)域。在這個(gè)示例性實(shí)施例中,每個(gè)區(qū)域具有用于四驅(qū)動(dòng)器陣列系統(tǒng)的1/12GB大小(即174763扇區(qū))。具有更大數(shù)量驅(qū)動(dòng)器(8,12或16)的系統(tǒng)將具有不同的區(qū)域大小。開始,保留區(qū)域號(hào)0和1用于區(qū)域管理器并且不用于分配。區(qū)域號(hào)1是區(qū)域號(hào)0的鏡像。對(duì)給定的硬盤,區(qū)域管理器所使用的所有內(nèi)部數(shù)據(jù)都存儲(chǔ)在這個(gè)硬盤的區(qū)域號(hào)0和1中。這個(gè)信息并不重復(fù)(或鏡像)到其他驅(qū)動(dòng)器。如果區(qū)域0或1中有錯(cuò)誤,可以分配其他區(qū)域來保留該數(shù)據(jù)。盤信息結(jié)構(gòu)指針指向這些區(qū)域。每個(gè)盤將包含識(shí)別該盤的DIS、它所屬于的盤組和該盤的布局信息。該硬盤上的第一扇區(qū)被保留。DIS存儲(chǔ)在第一扇區(qū)后的第一非損壞聚簇中。DIS包含相當(dāng)1KB的數(shù)據(jù)。有兩個(gè)DIS的副本。DIS的副本將存儲(chǔ)在其所屬于的盤上。另外,該系統(tǒng)中的每個(gè)盤都將包含該系統(tǒng)中盤的全部DIS副本。下表顯示DIS格式區(qū)域管理器在區(qū)域信息結(jié)構(gòu)中存儲(chǔ)其內(nèi)部數(shù)據(jù)。下表顯示該區(qū)域信息結(jié)構(gòu)格式存儲(chǔ)區(qū)信息結(jié)構(gòu)提供可以發(fā)現(xiàn)存儲(chǔ)區(qū)表的存儲(chǔ)區(qū)管理器上的信息。下面顯示該存儲(chǔ)區(qū)信息結(jié)構(gòu)格式高級(jí)信息存儲(chǔ)區(qū)包含存儲(chǔ)區(qū)表和其他由高級(jí)管理者使用的表。這將使用鏡像進(jìn)行保護(hù)。下表顯示該存儲(chǔ)區(qū)表節(jié)點(diǎn)格式下面描述存儲(chǔ)區(qū)信息布局。存儲(chǔ)區(qū)表節(jié)點(diǎn)的鏈接列表以如下方式放置在ZIS后這種信息存儲(chǔ)在存儲(chǔ)區(qū)表區(qū)域中。圖16示出了根據(jù)本發(fā)明示例性實(shí)施例的驅(qū)動(dòng)器布局。前兩個(gè)區(qū)域是互為副本。第三(可選)存儲(chǔ)區(qū)表區(qū)域包含該存儲(chǔ)區(qū)表。在具有一個(gè)以上驅(qū)動(dòng)器的系統(tǒng)中,只有兩個(gè)驅(qū)動(dòng)器包含ZTR。在僅具有一個(gè)驅(qū)動(dòng)器的系統(tǒng)中,兩個(gè)區(qū)域用于保留該ZTR的兩個(gè)(鏡像)副本。DIS包含有關(guān)RIS和ZIS位置的信息。注意RIS的第一副本不必在區(qū)域0中(例如,如果區(qū)域0包含壞扇區(qū),則可以位于不同區(qū)域)。存儲(chǔ)區(qū)管理器需要在系統(tǒng)啟動(dòng)時(shí)加載該存儲(chǔ)區(qū)表。為此,其從DIS提取區(qū)域號(hào)和偏移。這將指向ZIS的開頭。特定模塊(例如CAT管理器)在存儲(chǔ)區(qū)中存儲(chǔ)它們的控制結(jié)構(gòu)和數(shù)據(jù)表。層3和更高層中的模塊的所有控制結(jié)構(gòu)由存儲(chǔ)在存儲(chǔ)區(qū)0中的結(jié)構(gòu)來引用。這意味著,例如,實(shí)際CAT(聚簇分配表)位置由存儲(chǔ)區(qū)0中存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)來引用。下表顯示存儲(chǔ)區(qū)0信息表格式CAT鏈接列表是描述包含CAT的存儲(chǔ)區(qū)的節(jié)點(diǎn)鏈接列表。下表顯示CAT連接列表節(jié)點(diǎn)格式散列表鏈接列表是描述保持散列表的存儲(chǔ)區(qū)的節(jié)點(diǎn)的鏈接列表。下表顯示該散列表鏈接列表節(jié)點(diǎn)格式圖17示例存儲(chǔ)區(qū)0的布局以及其他存儲(chǔ)區(qū)如何被引用,根據(jù)本發(fā)明示例性實(shí)施例。如上所述,冗余集是為數(shù)據(jù)集提供冗余的一組扇區(qū)/聚簇。備份某個(gè)區(qū)域包括將一個(gè)區(qū)域的內(nèi)容復(fù)制到另一個(gè)區(qū)域。在數(shù)據(jù)讀取出錯(cuò)的情況下,較低級(jí)軟件(盤管理器或者設(shè)備驅(qū)動(dòng)器)在最初失敗嘗試之后再做兩次讀請(qǐng)求的嘗試。故障狀態(tài)傳遞回存儲(chǔ)區(qū)管理器。存儲(chǔ)區(qū)管理器接著嘗試根據(jù)盤陣列中冗余聚簇來重構(gòu)所請(qǐng)求(通過讀)數(shù)據(jù)。該冗余數(shù)據(jù)可以是鏡像的聚簇(用于SDM、DDM)或者一組包括奇偶校驗(yàn)的聚簇(條帶化實(shí)施)。接著重構(gòu)數(shù)據(jù)傳遞回主機(jī)。如果ZM不能重構(gòu)該數(shù)據(jù),則將讀報(bào)錯(cuò)傳遞回主機(jī)。存儲(chǔ)區(qū)管理器發(fā)送差錯(cuò)通知分組給差錯(cuò)管理器。圖18示例根據(jù)本發(fā)明示例性實(shí)施例的讀報(bào)錯(cuò)處理。在數(shù)據(jù)寫出錯(cuò)的情況下,較低級(jí)軟件(盤管理器或者設(shè)備驅(qū)動(dòng)器)在最初失敗嘗試之后再兩次嘗試寫請(qǐng)求。故障狀態(tài)傳遞回存儲(chǔ)區(qū)管理器。存儲(chǔ)區(qū)管理器發(fā)送報(bào)錯(cuò)通知分組給差錯(cuò)管理器。當(dāng)數(shù)據(jù)寫在這個(gè)級(jí)別執(zhí)行時(shí),冗余信息同樣寫入磁盤。這樣,只要僅一個(gè)聚簇具有寫差錯(cuò),后續(xù)的讀可以重構(gòu)該數(shù)據(jù)。如果有多個(gè)盤差錯(cuò)并且冗余信息不能讀或者寫,則有至少兩種可能途徑a.向主機(jī)返回寫差錯(cuò)狀態(tài)。把與該冗余集相關(guān)聯(lián)的所有區(qū)域備份至新分配的不包含壞扇區(qū)的區(qū)域。b.延遲寫。把與該冗余集相關(guān)聯(lián)的所有區(qū)域備份至新分配的不包含壞扇區(qū)的區(qū)域。隨后,在新分配區(qū)域中的適當(dāng)聚簇上寫(連同全部冗余部分,例如奇偶校驗(yàn)等)。單獨(dú)的寫隊(duì)列將用于包含已經(jīng)被延遲的寫。因?yàn)閷憼顟B(tài)可能已經(jīng)發(fā)送到主機(jī)作為日志成功寫入的結(jié)果,所以方法(a)是有問題的,因此主機(jī)不可能知道已經(jīng)有差錯(cuò)。一種替換的是報(bào)告讀的故障,但是允許寫。CAT中的某個(gè)位用于跟蹤應(yīng)當(dāng)返回壞的讀的特別LBA。圖19示例根據(jù)本發(fā)明示例性實(shí)施例寫差錯(cuò)處理。差錯(cuò)管理器(EM)檢查聚簇以發(fā)現(xiàn)其是否真的損壞。如果是,則認(rèn)為整個(gè)區(qū)域損壞。該區(qū)域中的內(nèi)容復(fù)制到相同盤的新分配區(qū)域上。然后標(biāo)記當(dāng)前區(qū)域損壞。當(dāng)在區(qū)域上復(fù)制時(shí),當(dāng)遇到壞扇區(qū)時(shí),差錯(cuò)管理器將在必要時(shí)重構(gòu)數(shù)據(jù)。如20是示例根據(jù)本發(fā)明示例性實(shí)施例由差錯(cuò)管理器備份壞區(qū)域的邏輯流程圖。如果有數(shù)據(jù)讀差錯(cuò)且差錯(cuò)管理器不能重構(gòu)給定聚簇的數(shù)據(jù)(例如,由于在整個(gè)冗余集的讀差錯(cuò)),那么接著使用零代替不能重構(gòu)的數(shù)據(jù)。在這種情況下,將同樣必須備份其他包含壞扇區(qū)的區(qū)域(來自相同冗余集)。再次將使用零代替不能重構(gòu)的數(shù)據(jù)。一旦執(zhí)行了冗余集復(fù)制,EM禁用對(duì)應(yīng)于存儲(chǔ)區(qū)這部分的聚簇的存取。然后更新存儲(chǔ)區(qū)表以指向新分配區(qū)域。隨后存取再啟用的聚簇。這個(gè)示例性實(shí)施例設(shè)計(jì)支持八個(gè)快照(其允許使用一個(gè)字節(jié)指示特定快照實(shí)例是否使用散列/聚簇項(xiàng))。有兩個(gè)表涉及快照1.需要存在每個(gè)快照的CAT表,以捕獲邏輯扇區(qū)地址與包含用于LSA的數(shù)據(jù)的盤上的聚簇之間的關(guān)系。最終,每快照CAT必須是在快照發(fā)生時(shí)CAT的副本。2.系統(tǒng)散列表,其在散列值和數(shù)據(jù)聚簇之間映射。散列函數(shù)返回相同結(jié)果,無論使用哪個(gè)快照實(shí)例,并且對(duì)全部快照結(jié)果都是一樣的。這樣,這個(gè)表必須理解唯一聚簇是否由任何快照使用。散列聚簇項(xiàng)不能被釋放,或者被新數(shù)據(jù)替換,除非沒有使用該散列項(xiàng)的快照??偸怯挟?dāng)前和被添加的快照。當(dāng)散列項(xiàng)創(chuàng)建或者更新時(shí),我們將需要把當(dāng)前快照號(hào)應(yīng)用到散列項(xiàng)。當(dāng)制作快照時(shí),將遞增當(dāng)前快照號(hào)。通過查找散列表并且發(fā)現(xiàn)任何具有退出快照位設(shè)置的散列值并清空該位,由此來釋放不再被任何快照需要的聚簇/散列項(xiàng)。如果該快照字節(jié)現(xiàn)在是零,則散列項(xiàng)可以從該表中刪除,并且可以釋放該聚簇。為了預(yù)防與添加到散列樹的任何新項(xiàng)的沖突(因?yàn)樾驴煺諗?shù)與退出快照數(shù)相同),僅允許批準(zhǔn)7個(gè)快照,退出最后的(第八個(gè))快照??梢园幢尘盎顒?dòng)來查找散列表。為了創(chuàng)建快照,無論主CAT何時(shí)更新都可以寫入第二CAT存儲(chǔ)區(qū)。這種更新可以被排隊(duì),并且影子CAT可以按其他任務(wù)來更新。為了快照,影子CAT成為快照CAT。一旦進(jìn)行快照,可以離開后臺(tái)處理以將這個(gè)快照表復(fù)制到新存儲(chǔ)區(qū)成為新快照CAT??梢允褂藐?duì)列,使得不處理影子CAT隊(duì)列,直到CAT復(fù)制完成。如果在更新影子CAT之前發(fā)生故障(隊(duì)列中的項(xiàng)可能丟失的情況),則在陣列聯(lián)機(jī)之前可以根據(jù)最初CAT表執(zhí)行再投影。另外,當(dāng)需要快照時(shí),“增量”的集合加上最初CAT副本可以組成快照。然后后臺(tái)任務(wù)可根據(jù)這些信息重建完整快照CAT。這會(huì)需要一點(diǎn)或者不需要停機(jī)時(shí)間來做此快照。其間,可能要為后續(xù)的快照收集另一組“增量”。如上所述,所謂“垃圾收集器”可用于釋放不再被主機(jī)文件系統(tǒng)使用的聚簇(例如當(dāng)刪除文件時(shí))。一般而言,通過發(fā)現(xiàn)空閑塊、計(jì)算它們的主LSA、并根據(jù)該LSA分配它們的CAT項(xiàng)進(jìn)行垃圾收集。如果沒有CAT項(xiàng)用于特定LSA,則該聚簇已經(jīng)空閑。但是如果CAT項(xiàng)被定位,則遞增引用計(jì)數(shù),而且如果該計(jì)數(shù)命中零,該聚簇空閑。垃圾收集的一個(gè)問題是難于將已經(jīng)由主文件系統(tǒng)使用的塊與先前已經(jīng)使用并且在某個(gè)點(diǎn)標(biāo)記為空閑的一個(gè)區(qū)分開來。當(dāng)主文件系統(tǒng)寫入塊時(shí),存儲(chǔ)設(shè)備分配聚簇用于數(shù)據(jù),以及CAT項(xiàng)來描述它。從這點(diǎn)上,聚簇將一般的表現(xiàn)為在用(inuse),即使主文件系統(tǒng)隨后停止使用它的塊(即,聚簇將仍然通過有效CAT的項(xiàng)處于在用狀態(tài))。例如,特定主文件系統(tǒng)使用位圖(bitmap)來追蹤它的使用盤塊。一開始,位圖將指示全部的塊為空閑,例如,通過將全部位清空。由于使用文件系統(tǒng),因此主文件系統(tǒng)將通過使用它的空閑塊位圖來分配塊。存儲(chǔ)系統(tǒng)將使用通過上述的分配聚簇和CAT項(xiàng)來把這些文件系統(tǒng)分配與物理存儲(chǔ)相關(guān)聯(lián)。當(dāng)主文件系統(tǒng)把一些塊釋放回到它的空閑池時(shí),其只需要在其空閑塊位圖中清空相應(yīng)的位。在存儲(chǔ)系統(tǒng)上,這可以設(shè)想成寫入恰好包含該主機(jī)的空閑塊位圖的聚簇,就像沒有I/O到空閑的實(shí)際聚簇本身(雖然可能有到空閑聚簇的I/O,例如,如果主文件系統(tǒng)以某種增強(qiáng)安全模式運(yùn)行,其中不像把零或者隨機(jī)數(shù)據(jù)的強(qiáng)保密散列寫入聚簇以使得減少舊聚簇內(nèi)容可能被攻擊者讀取的機(jī)會(huì))。另外,當(dāng)滿意新分配請(qǐng)求時(shí),不保證主文件系統(tǒng)會(huì)重用以前被釋放的塊。因此,如果主文件系統(tǒng)繼續(xù)分配那些從存儲(chǔ)系統(tǒng)的視點(diǎn)來看是新的、即以前未使用的塊,則該存儲(chǔ)系統(tǒng)將快速耗盡空閑聚簇,限于無論什么空間都可以經(jīng)由壓縮回收。例如,假定文件系統(tǒng)塊是4K,如果主機(jī)分配文件系統(tǒng)塊100至500,隨后釋放塊300至500,然后接著分配塊1000至1100,整個(gè)文件系統(tǒng)使用的將是300塊,而陣列將有500個(gè)聚簇處于在用狀態(tài)。在本發(fā)明示例性實(shí)施例中,存儲(chǔ)系統(tǒng)可以通過訪問主文件系統(tǒng)布局來檢測(cè)主文件系統(tǒng)盤資源的釋放,分析它的空閑塊位圖,并使用該信息來識(shí)別不再被該文件系統(tǒng)使用的聚簇。為了存儲(chǔ)系統(tǒng)能夠以這種方式識(shí)別未使用的聚簇,存儲(chǔ)系統(tǒng)必須能夠定位并理解該文件系統(tǒng)的空閑塊位圖。因而,該存儲(chǔ)系統(tǒng)將通常支持文件系統(tǒng)的預(yù)定設(shè)置,可充分“理解”內(nèi)部工作以定位并利用這些空閑塊位圖。對(duì)不支持的文件系統(tǒng),該存儲(chǔ)系統(tǒng)可能不能夠執(zhí)行垃圾收集并將由此僅告之該陣列的實(shí)際物理尺寸以便于避免被過量使用。為了確定該文件系統(tǒng)類型(例如NTFS、FAT、ReiserFS、ext3),需要定位該文件系統(tǒng)的超塊(superblock,或者等同結(jié)構(gòu))。為了發(fā)現(xiàn)該超塊,要分析分區(qū)表(partitiontable)以定位OS分區(qū)。假定OS分區(qū)被定位,則分析OS分區(qū),以試圖定位該超塊并由此識(shí)別該文件系統(tǒng)類型。一旦該文件系統(tǒng)類型已知,則可以分析布局以查找空閑塊位圖。為了便于搜索空閑塊,可以保持主文件系統(tǒng)位圖的歷史數(shù)據(jù),例如,通過制作可以存儲(chǔ)在私有、非冗余存儲(chǔ)區(qū)的空閑塊位圖的副本,并執(zhí)行使用該副本的搜索。給定位圖的尺寸,可以每次為較少數(shù)量的聚簇保持信息而不是為整個(gè)位圖保持信息。當(dāng)執(zhí)行垃圾收集時(shí),可以把當(dāng)前空閑塊位圖與歷史副本逐個(gè)聚簇地進(jìn)行比較。可以識(shí)別任何從分配轉(zhuǎn)換成空閑的位圖項(xiàng),使得回收操作可準(zhǔn)確地定向到作為可利用的良好候選的聚簇。隨著處理每個(gè)位圖聚簇,可以用當(dāng)前副本替換歷史數(shù)據(jù)以維持位圖操作的滾動(dòng)式歷史數(shù)據(jù)??臻e塊位圖的副本將隨著時(shí)間變成時(shí)間上不連貫的聚簇的拼湊體,但是由于當(dāng)前副本總是用于定位空閑項(xiàng),因此這并不產(chǎn)生任何問題。在特定條件下,會(huì)有關(guān)于空閑塊位圖的競(jìng)爭(zhēng)條件,例如,如果主文件系統(tǒng)使用其空閑塊位圖來分配盤塊,接著寫入它的數(shù)據(jù)塊,然后將修變的位圖刷新回到盤。在這種情況下,垃圾收集器會(huì)釋放該聚簇,即使該文件系統(tǒng)在使用該聚簇。這會(huì)導(dǎo)致文件系統(tǒng)被破壞。可實(shí)現(xiàn)存儲(chǔ)系統(tǒng)以避免或者處理這樣的條件。由于垃圾收集是相當(dāng)昂貴的操作,因即是低強(qiáng)度的回收也將占用后端的I/O帶寬,因此不應(yīng)濫用垃圾收集。垃圾收集器能夠按多種方式運(yùn)行,從低強(qiáng)度的后臺(tái)惰性回收到非常高強(qiáng)度或者甚高優(yōu)先級(jí)的回收。例如,當(dāng)使用了百分之三十的空間時(shí),可以按低強(qiáng)度方式運(yùn)行垃圾收集器,或者至少?zèng)]星期一次,當(dāng)使用了50%的空間時(shí),按稍微高強(qiáng)度的方式來運(yùn)行,而當(dāng)使用了百分之九十或者更多的磁盤空間時(shí),運(yùn)行全高優(yōu)先級(jí)的回收。在每次進(jìn)行收集時(shí),可以限制要回收的目標(biāo)聚簇?cái)?shù)量和最大的可容許I/O計(jì)數(shù),從而控制垃圾收集器的回收強(qiáng)度。例如,可配置垃圾收集器,通過使用不超過10000次的I/O來回收1GB?;厥照?qǐng)求的完成失敗可用作對(duì)收集器的反饋,從而在下一次運(yùn)行時(shí)按更高強(qiáng)度的方式。還可以是“回收一切”模式,允許垃圾收集器分析整個(gè)主文件系統(tǒng)空閑塊位圖并回收可能的全部塊。在陣列(幾乎)完全裝滿時(shí),這可以作為最后的辦法來回收聚簇??梢灾芷谛缘剡\(yùn)行垃圾收集器,對(duì)其施加規(guī)則,并可決定執(zhí)行、或者可決定不執(zhí)行回收操作。還能夠明確地從其他模塊來請(qǐng)求回收操作,例如區(qū)域管理器,當(dāng)正在尋找用于構(gòu)建區(qū)域的聚簇時(shí),可請(qǐng)求回收操作。垃圾收集功能可以與狀態(tài)指示符機(jī)制相結(jié)合。例如,在某些點(diǎn),存儲(chǔ)系統(tǒng)可以處于“紅色”條件,盡管正在運(yùn)行的垃圾收集操作可以釋放足夠空間以消除“紅色”條件??刹捎酶郊又甘酒鳡顟B(tài)以顯示相關(guān)狀態(tài)信息(例如紅色指示器燈光可以閃爍用來指示垃圾收集操作正在進(jìn)行)。圖21是根據(jù)本發(fā)明示例性實(shí)施例的存儲(chǔ)陣列的相關(guān)部件的示意性框圖。除了其他,存儲(chǔ)陣列包括底盤2502,在其上存儲(chǔ)管理器2504與多個(gè)存儲(chǔ)設(shè)備25081-2508N通信,這些存儲(chǔ)設(shè)備分別通過多個(gè)插槽25061-2506N耦合到底盤。每個(gè)插槽25061-2506N都可以與一個(gè)或者多個(gè)指示器25071-2507N相關(guān)聯(lián)。除了其他,存儲(chǔ)管理器2504典型包括用于實(shí)施上述功能的各種硬件和軟件組件。硬件組件典型包括存儲(chǔ)器用于存儲(chǔ)諸如程序代碼、數(shù)據(jù)結(jié)構(gòu)、以及數(shù)據(jù)的內(nèi)存,和用于執(zhí)行該程序代碼的微處理器系統(tǒng)。虛擬熱后備(virtualhotspare)如上所述,在許多存儲(chǔ)系統(tǒng)中,熱后備存儲(chǔ)設(shè)備維持就緒狀態(tài),使得在其他存儲(chǔ)設(shè)備故障的情況下,熱后備可以快速被聯(lián)機(jī)。在本發(fā)明特定實(shí)施例中,不是維持物理上分離的熱后備,而是跨多個(gè)存儲(chǔ)設(shè)備由未使用的存儲(chǔ)容量來創(chuàng)建虛擬熱后備。不同于物理熱后備,如果以及當(dāng)對(duì)于根據(jù)(多個(gè))其余存儲(chǔ)設(shè)備恢復(fù)的數(shù)據(jù)的存儲(chǔ)發(fā)生存儲(chǔ)設(shè)備故障時(shí),這種未使用存儲(chǔ)容量是可用的。該虛擬熱后備特征需要陣列上的足夠可用空間,以保證在盤故障情況下,數(shù)據(jù)可以按冗余方式再布局。因而,根據(jù)運(yùn)行,存儲(chǔ)系統(tǒng)典型地確定實(shí)現(xiàn)虛擬熱后備可能需要的未使用存儲(chǔ)容量的量(例如,根據(jù)存儲(chǔ)設(shè)備的數(shù)量、各存儲(chǔ)設(shè)備的容量、數(shù)據(jù)存儲(chǔ)的數(shù)量、以及以什么方式存儲(chǔ)數(shù)據(jù)),并且,如果需要附加存儲(chǔ)容量用于虛擬熱后備的話則產(chǎn)生信號(hào)(例如,使用綠色/黃色/紅色光指示狀態(tài)和插槽,如上所述)。隨著存儲(chǔ)區(qū)的分配,按每個(gè)盤保持記錄,多少個(gè)區(qū)域需要再布局該存儲(chǔ)區(qū)。下表示例使用四個(gè)驅(qū)動(dòng)器的虛擬熱后備下表示例具有使用三個(gè)驅(qū)動(dòng)器的虛擬熱后備在這個(gè)示例性實(shí)施例中,虛擬熱后備并非在僅有1個(gè)或者2個(gè)驅(qū)動(dòng)器的陣列上可用。根據(jù)每個(gè)存儲(chǔ)區(qū)的信息和陣列中盤的數(shù)量,該陣列確定每個(gè)可能盤故障的再布局情況并保證對(duì)每種情況每個(gè)驅(qū)動(dòng)器上都有足夠的可用空間。產(chǎn)生的信息可以反饋回再布局引擎和存儲(chǔ)區(qū)管理器,使得數(shù)據(jù)可以在數(shù)據(jù)存儲(chǔ)和熱后備特征之間正確平衡。注意,根據(jù)這些由存儲(chǔ)區(qū)布局?jǐn)?shù)據(jù)的計(jì)算,熱后備特征需要足夠備用工作空間區(qū)域,使得可發(fā)生再布局。圖22是示出根據(jù)本發(fā)明示例性實(shí)施例的管理虛擬熱后備的示例性邏輯的邏輯流程圖???102中,該邏輯確定每個(gè)可能盤故障的再布局情形。在框2104中,該邏輯確定最壞情況下冗余數(shù)據(jù)再布局的每個(gè)驅(qū)動(dòng)器需要的空間量。框2106中,該邏輯確定在最壞情況下數(shù)據(jù)冗余再布局需要的后備工作空間區(qū)域的數(shù)量???108中,該邏輯確定每個(gè)驅(qū)動(dòng)器上需要的空間總量,以允許在最壞情況下再布局?jǐn)?shù)據(jù)冗余(實(shí)際上是再布局所需要的空間和備用工作空間區(qū)域的和)???110中,該邏輯確定存儲(chǔ)系統(tǒng)是否包含足夠的可用的存儲(chǔ)量。如果有足夠數(shù)量的可用存儲(chǔ)(框2112中的是),則該邏輯迭代在框2199終止。但是,如果沒有足夠量的可用存儲(chǔ)(框2112中的否),則該邏輯在框2114中確定哪個(gè)驅(qū)動(dòng)器/插槽需要更新。接著在框2116,該邏輯發(fā)出信號(hào),指出需要附加存儲(chǔ)空間并指示哪個(gè)驅(qū)動(dòng)器/插槽需要更新。該邏輯迭代在框2199終止。圖23是示出根據(jù)本發(fā)明示例性實(shí)施例的用于確定每個(gè)可能盤故障的布局情形的示例性邏輯的邏輯流程圖,如圖22的框2102中???202中,該邏輯分配存儲(chǔ)區(qū)。然后,在框2204中,該邏輯確定按每個(gè)盤需要多少個(gè)存儲(chǔ)區(qū)用于再布局存儲(chǔ)區(qū)。該邏輯迭代在框2299終止。圖24是示出根據(jù)本發(fā)明示例性實(shí)施例的包括虛擬熱后備功能的示例性邏輯的邏輯流程圖???302中,該邏輯維持在最壞情況下的充足數(shù)量的可用存儲(chǔ)以使得可再布局?jǐn)?shù)據(jù)冗余。當(dāng)在框2304確定了驅(qū)動(dòng)器喪失(例如移除或者故障),該邏輯在框2306自動(dòng)重構(gòu)一個(gè)或者多個(gè)其余驅(qū)動(dòng)器,以恢復(fù)數(shù)據(jù)的容錯(cuò)。該邏輯迭代在框2399終止。圖25是示出根據(jù)本發(fā)明示例性實(shí)施例的自動(dòng)重構(gòu)一個(gè)或者多個(gè)其余設(shè)備用于恢復(fù)數(shù)據(jù)容錯(cuò)的示例邏輯的邏輯流程圖,如圖24的框2306???402中,該邏輯將跨四個(gè)或者更多存儲(chǔ)設(shè)備的第一條帶化模式轉(zhuǎn)換為跨三個(gè)或者更多剩余存儲(chǔ)設(shè)備的第二條帶化模式???404中,該邏輯可以將跨三個(gè)存儲(chǔ)設(shè)備的條帶化模式轉(zhuǎn)換為跨兩個(gè)剩余存儲(chǔ)設(shè)備的鏡像模式。當(dāng)然,該邏輯可以按其他方式轉(zhuǎn)換以使得隨著驅(qū)動(dòng)器的喪失而再布局?jǐn)?shù)據(jù)冗余。該邏輯迭代在框2499終止。再參考圖21,存儲(chǔ)管理器2504典型地包括適當(dāng)部件和邏輯用于實(shí)施如上所述的虛擬熱后備功能。動(dòng)態(tài)升級(jí)上述用于處理存儲(chǔ)的動(dòng)態(tài)擴(kuò)展和收縮的邏輯可以被擴(kuò)充用于提供可動(dòng)態(tài)升級(jí)的存儲(chǔ)設(shè)備,其中,存儲(chǔ)設(shè)備可根據(jù)需要用更大的存儲(chǔ)設(shè)備來替換,并且現(xiàn)有數(shù)據(jù)跨各存儲(chǔ)設(shè)備重新配置,使得冗余得到維持或者增強(qiáng),并且該更大的存儲(chǔ)設(shè)備所提供的附加存儲(chǔ)空間將包括在跨多個(gè)存儲(chǔ)空間的可用存儲(chǔ)空間的池(pool)中。因而,當(dāng)用較大存儲(chǔ)設(shè)備替換較小存儲(chǔ)設(shè)備時(shí),附加存儲(chǔ)空間可用于改進(jìn)已存儲(chǔ)數(shù)據(jù)和存儲(chǔ)附加數(shù)據(jù)的冗余。無論何時(shí)需要更多存儲(chǔ)空間,向用戶提供適當(dāng)信號(hào)(例如使用如上所述的綠色/黃色/紅色燈光),而用戶可以簡(jiǎn)單移除存儲(chǔ)設(shè)備并用更大存儲(chǔ)設(shè)備替換它。圖26是示出根據(jù)本發(fā)明示例性實(shí)施例的用于更新存儲(chǔ)設(shè)備的邏輯流程圖???602中,該邏輯在第一存儲(chǔ)設(shè)備上按照存儲(chǔ)在其中的數(shù)據(jù)在其他存儲(chǔ)設(shè)備上冗余出現(xiàn)的方式來存儲(chǔ)數(shù)據(jù)。框2604中,該邏輯檢測(cè)用比第一存儲(chǔ)設(shè)備具有更大存儲(chǔ)容量的替換設(shè)備來替換第一存儲(chǔ)設(shè)備的替換???606中,該邏輯使用冗余存儲(chǔ)在其他設(shè)備上的數(shù)據(jù)將存儲(chǔ)在第一設(shè)備的數(shù)據(jù)自動(dòng)再生到的該替換設(shè)備上???608中,該邏輯使替換設(shè)備上的附加存儲(chǔ)空間可用于存儲(chǔ)新數(shù)據(jù)冗余???610中,該邏輯可以在替換設(shè)備上的附加存儲(chǔ)空間中存儲(chǔ)新數(shù)據(jù)冗余,如果沒有其他設(shè)備具有充足的可用存儲(chǔ)容量用于提供新數(shù)據(jù)的冗余的話。框2612中,如果至少一個(gè)其他設(shè)備具有充足的可用存儲(chǔ)空間用于提供新數(shù)據(jù)冗余,則該邏輯跨多個(gè)存儲(chǔ)設(shè)備存儲(chǔ)新數(shù)據(jù)冗余。再參考圖21,存儲(chǔ)管理器2504典型包括適當(dāng)部件和邏輯用于實(shí)施如上所述的動(dòng)態(tài)更新功能。其他本發(fā)明的實(shí)施例可以用于向主機(jī)計(jì)算機(jī)提供存儲(chǔ)容量,例如按美國(guó)臨時(shí)申請(qǐng)第60/625,495所述的方式使用外圍連接協(xié)議,所述申請(qǐng)以GeoffreyS.Barrall的名義于2004年11月5日提交,通過引用全文結(jié)合于此以供參考。應(yīng)當(dāng)注意,散列算法可能不產(chǎn)生嚴(yán)格唯一的散列值。因而,可以想到散列算法對(duì)具有不相同內(nèi)容的兩個(gè)數(shù)據(jù)塊產(chǎn)生相同散列值。散列函數(shù)(其通常結(jié)合散列算法)典型包括確認(rèn)唯一性的機(jī)制。例如,在上述本發(fā)明的示例性實(shí)施例中,如果一個(gè)塊的散列值與另外塊的散列值不同,則認(rèn)為這些塊的內(nèi)容不相同。但是如果一個(gè)塊的散列值與另一個(gè)塊的散列值相同,那么散列函數(shù)可以比較這兩個(gè)塊的內(nèi)容或者利用一些其他機(jī)制(例如不同散列函數(shù))以確定內(nèi)容是否相同。應(yīng)當(dāng)注意,這里使用的該邏輯流程圖用于示例本發(fā)明的各個(gè)方面,而不應(yīng)解釋為將本發(fā)明限制在任何特殊邏輯流程或者邏輯工具。在不改變總體結(jié)果的前提下,或者不以另外的方式背離本發(fā)明范圍的情況下,所述邏輯可劃分為不同的邏輯塊(例如程序、模塊、函數(shù)、或者子程序)。通常,可以增加、改變、省略邏輯部件,可以按不同順序執(zhí)行,或者使用不同邏輯結(jié)構(gòu)來實(shí)施(例如邏輯門、循環(huán)元語、條件邏輯、和其他邏輯機(jī)構(gòu)),而不改變整體結(jié)果或者以其他方式脫離本發(fā)明的真實(shí)范圍。本發(fā)明可以按多種不同形式來實(shí)施,包括但不限于使用處理器(例如微處理器、微控制器、數(shù)字信號(hào)處理器、或者通用計(jì)算機(jī))的計(jì)算機(jī)程序邏輯、使用可編程邏輯設(shè)備(例如現(xiàn)場(chǎng)可編程門陣列(FPGA)或者其他PLD)的可編程邏輯、離散組件、集成電路(例如特定用途集成電路(ASIC))、或者包括其任意組合的其他裝置。實(shí)施全部或者部分這里前述功能的計(jì)算機(jī)編程邏輯可以按多種形式實(shí)施,包括但不限于源代碼形式、計(jì)算機(jī)可執(zhí)行形式、各種中間形式(例如由匯編程序、編譯程序、連接程序、或者定位程序等產(chǎn)生的形式)。源代碼可以包括按任何各種編程語言實(shí)現(xiàn)的計(jì)算機(jī)程序指令序列(例如對(duì)象代碼、匯編語言、或者例如Fortran、C、C++、JAVA、或HTML等高級(jí)語言),在各種操作系統(tǒng)或者操作環(huán)境下使用。源代碼可以定義并使用各種數(shù)據(jù)結(jié)構(gòu)和通信消息。源代碼可以是計(jì)算機(jī)可執(zhí)行形式(例如經(jīng)由解釋程序)、或者源代碼可以轉(zhuǎn)換(例如經(jīng)由轉(zhuǎn)換器、匯編器、或者編譯器)為計(jì)算機(jī)可執(zhí)行形式。所述計(jì)算機(jī)程序可以持久地或者暫時(shí)地按任何形式(例如源代碼形式、計(jì)算機(jī)可執(zhí)行形式、或者中間形式)固定在有形存儲(chǔ)介質(zhì)中,例如半導(dǎo)體存儲(chǔ)裝置(例如RAM、ROM、PROM、EEPROM、或者可編程閃存RAM)、磁存儲(chǔ)設(shè)備(例如軟盤或者硬盤)、光存儲(chǔ)設(shè)備(例如CD-ROM)、PC卡(例如PCMCIA卡)、或者其他存儲(chǔ)器設(shè)備。該計(jì)算機(jī)程序可以按任何形式固定在信號(hào)中,該信號(hào)傳輸給使用各種通信技術(shù)的計(jì)算機(jī),包括但不限于模擬技術(shù)、數(shù)字技術(shù)、光技術(shù)、無線技術(shù)(例如藍(lán)牙)、網(wǎng)絡(luò)技術(shù)、以及互聯(lián)網(wǎng)技術(shù)。該計(jì)算機(jī)程序可以按任何形式來發(fā)布,如使用附帶有打印的文檔或者電子文檔的可移動(dòng)存儲(chǔ)介質(zhì)(例如壓縮包軟件)、預(yù)裝入計(jì)算機(jī)系統(tǒng)(例如在系統(tǒng)ROM或者硬盤上)、或者通過通信系統(tǒng)(例如因特網(wǎng)或者萬維網(wǎng))從服務(wù)器或者電子公告板來發(fā)布。實(shí)施全部或者部分這里的上述功能的硬件邏輯(包括用于可編程邏輯設(shè)備的可編程邏輯)可以使用傳統(tǒng)人工方法設(shè)計(jì),或者可以使用各種工具來設(shè)計(jì)、捕獲、模擬、或者建立電子文檔,例如計(jì)算機(jī)輔助設(shè)計(jì)(CAD)、硬件描述語言(例如VHEL或者AHDL)、或者PLD編程語言(例如PALASM、ABEL、或者CUPL)。所述可編程邏輯可以永久或者暫時(shí)固定在有形存儲(chǔ)介質(zhì)中,例如半導(dǎo)體存儲(chǔ)設(shè)備(例如RAM、ROM、PROM、EEPROM、或者可編程閃存RAM)、磁存儲(chǔ)設(shè)備(例如軟盤或者硬盤)、光存儲(chǔ)設(shè)備(例如CD-ROM)、或者其他存儲(chǔ)器設(shè)備。該可編程邏輯可以按任何形式固定在信號(hào)中,該信號(hào)傳輸給使用各種通信技術(shù)的計(jì)算機(jī),包括但不限于模擬技術(shù)、數(shù)字技術(shù)、光技術(shù)、無線技術(shù)(例如藍(lán)牙)、網(wǎng)絡(luò)技術(shù)、以及互聯(lián)網(wǎng)技術(shù))。該可編程邏輯可以按任何形式來發(fā)布,如使用帶有打印文檔或者電子文檔的可移動(dòng)存儲(chǔ)介質(zhì)(例如壓縮包軟件)、預(yù)裝入計(jì)算機(jī)系統(tǒng)(例如在系統(tǒng)ROM或者硬盤上)、或者通過通信系統(tǒng)(例如因特網(wǎng)或者萬維網(wǎng))從服務(wù)器或者電子公告板發(fā)布。本發(fā)明涉及下列美國(guó)專利申請(qǐng),通過引用全文并入此處代理卷號(hào)2950103、名稱為DynamicallyExpandableandContractibleFault-TolerantStorageSystemPermittingVariouslySizedStorageDevicesandMethod;代理卷號(hào)2950104、名稱為DynamicallyUpgradeableFault-TolerantStorageSystemPermittingVariouslySizedStorageDevicesandMethod;andAttorneyDocketNo.2950/105entitledDynamicallyExpandable;代理卷號(hào)2950105、名稱為DynamicallyExpandableandContractibleFault-TolerantStorageSystemWithVirtualHotSpare。在不脫離本發(fā)明真實(shí)范圍下,本發(fā)明可以實(shí)施為其他特殊形式。所述實(shí)施例在所有方面都應(yīng)當(dāng)認(rèn)為作為說明而不是限制。權(quán)利要求1.一種在存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)的方法,該組至少有一個(gè)存儲(chǔ)裝置,所述方法包括從多種冗余模式中自動(dòng)確定混合冗余模式,用于在所述存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),以提供容錯(cuò)功能,并且當(dāng)所述存儲(chǔ)裝置組正好包含不同存儲(chǔ)容量的多個(gè)裝置時(shí),用于提供改進(jìn)的存儲(chǔ)效率;以及利用所述混合冗余模式在該存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)。2.根據(jù)權(quán)利要求1的方法,還包括自動(dòng)再配置以前利用第一種冗余模式存儲(chǔ)在第一種布置的存儲(chǔ)裝置上的數(shù)據(jù),以利用下述之一進(jìn)行存儲(chǔ)(a)相同布置的存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的存儲(chǔ)裝置上的第二種冗余模式,(c)不同布置的存儲(chǔ)裝置上的相同冗余模式,其用于在無數(shù)據(jù)損失的情況下適應(yīng)空間的擴(kuò)展和收縮中的至少一個(gè),所述擴(kuò)展是通過向該組中添加其它存儲(chǔ)裝置實(shí)現(xiàn)的,而所述收縮是通過從該組中移除存儲(chǔ)裝置實(shí)現(xiàn)的。3.一種在存儲(chǔ)裝置組中按允許所述組動(dòng)態(tài)擴(kuò)展和收縮的方式存儲(chǔ)數(shù)據(jù)的方法,所述組有至少一個(gè)存儲(chǔ)裝置,所述方法包括利用第一種冗余模式在所述存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù);以及根據(jù)所述存儲(chǔ)裝置組的構(gòu)成的變化,利用下述之一自動(dòng)再配置該存儲(chǔ)裝置組上的數(shù)據(jù)(a)相同布置的存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的存儲(chǔ)裝置上的第二種冗余模式,(c)不同布置的存儲(chǔ)裝置上的相同冗余模式。4.根據(jù)權(quán)利要求1、2或3中任意一個(gè)的方法,其中從包括下述的組中選擇所述冗余模式鏡像、具有奇偶校驗(yàn)的條帶化、RAID6、雙奇偶校驗(yàn)、對(duì)角線奇偶校驗(yàn)、低密度奇偶校驗(yàn)檢測(cè)碼以及turbo碼。5.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把跨兩個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為單個(gè)存儲(chǔ)裝置的鏡像模式。6.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把跨第一對(duì)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨第二對(duì)存儲(chǔ)裝置的鏡像模式。7.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把跨三個(gè)存儲(chǔ)裝置的條帶化模式轉(zhuǎn)換為跨兩個(gè)存儲(chǔ)裝置的鏡像模式。8.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把跨第一組多個(gè)存儲(chǔ)裝置的第一條帶化模式轉(zhuǎn)換為跨第二組多個(gè)存儲(chǔ)裝置的第二條帶化模式。9.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把跨一個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨兩個(gè)存儲(chǔ)裝置的鏡像模式。10.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把在一個(gè)存儲(chǔ)裝置上的鏡像模式轉(zhuǎn)換為另一個(gè)存儲(chǔ)裝置上的鏡像模式。11.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把跨兩個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨三個(gè)存儲(chǔ)裝置的條帶化模式。12.根據(jù)權(quán)利要求2或3中任意一個(gè)的方法,其中再配置數(shù)據(jù)包括把跨第一組多個(gè)存儲(chǔ)裝置的第一條帶化模式轉(zhuǎn)換為跨包括添加到所述組的存儲(chǔ)裝置的第二組多個(gè)存儲(chǔ)裝置的第二條帶化模式。13.根據(jù)權(quán)利要求1,2或3中任意一個(gè)的方法,還包括把對(duì)象分析為塊,每個(gè)塊都有特定的內(nèi)容;以及只在存儲(chǔ)系統(tǒng)中存儲(chǔ)具有唯一性內(nèi)容的塊。14.根據(jù)權(quán)利要求13的方法,其中只存儲(chǔ)具有唯一性內(nèi)容的塊包括根據(jù)預(yù)定散列函數(shù)在存儲(chǔ)系統(tǒng)中只存儲(chǔ)被標(biāo)識(shí)為具有唯一性內(nèi)容的塊。15.根據(jù)權(quán)利要求14的方法,其中根據(jù)預(yù)定散列函數(shù)只存儲(chǔ)被標(biāo)識(shí)為具有唯一性內(nèi)容的塊包括計(jì)算每個(gè)塊的散列號(hào);以及在存儲(chǔ)系統(tǒng)中存儲(chǔ)用于與所存儲(chǔ)的塊的散列號(hào)相聯(lián)系的對(duì)象的唯一標(biāo)識(shí)符和其位置信息。16.根據(jù)前述15個(gè)權(quán)利要求中任意一個(gè)的方法,其中存儲(chǔ)用于對(duì)象的唯一標(biāo)識(shí)符包括使用對(duì)象表,所述對(duì)象表列出了用于每個(gè)對(duì)象的唯一標(biāo)識(shí)符以及用于所存儲(chǔ)的塊的散列號(hào)。17.根據(jù)前述15個(gè)權(quán)利要求中任意一個(gè)的方法,其中存儲(chǔ)位置信息包括,在塊表中存儲(chǔ)列表,該列表用于每個(gè)存于其中的塊,包括塊在存儲(chǔ)系統(tǒng)中的物理位置的表示。18.根據(jù)前述13個(gè)權(quán)利要求中任意一個(gè)的方法,還包括把存儲(chǔ)在存儲(chǔ)系統(tǒng)中的對(duì)象轉(zhuǎn)換為單個(gè)存儲(chǔ)裝置以及文件系統(tǒng)和對(duì)象存儲(chǔ)系統(tǒng)中的至少一個(gè)的表示。19.根據(jù)前述13個(gè)權(quán)利要求中任意一個(gè)的方法,還包括管理存儲(chǔ)系統(tǒng)中塊的物理存儲(chǔ)分配,從而提供容錯(cuò)存儲(chǔ),即使當(dāng)在存儲(chǔ)系統(tǒng)可能包括不同容量的存儲(chǔ)裝置時(shí)。20.根據(jù)前述15個(gè)權(quán)利要求中任意一個(gè)的方法,還包括一旦從存儲(chǔ)系統(tǒng)中取出特定的塊,就根據(jù)所存儲(chǔ)的塊的散列號(hào)檢驗(yàn)所取出塊的內(nèi)容。21.根據(jù)權(quán)利要求20的方法,其中根據(jù)所存儲(chǔ)的塊的散列號(hào)檢驗(yàn)所取出塊的內(nèi)容包括計(jì)算取出塊的散列號(hào);以及把計(jì)算出的散列號(hào)與對(duì)應(yīng)的為所述塊存儲(chǔ)的散列號(hào)進(jìn)行比較。22.一種在存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù)的方法,所述方法包括利用至少一種冗余模式在所述存儲(chǔ)裝置組上存儲(chǔ)數(shù)據(jù);檢測(cè)存儲(chǔ)裝置從所述組中的移除;利用剩下的存儲(chǔ)裝置再配置被移除的存儲(chǔ)裝置中的數(shù)據(jù)部分;檢測(cè)被移除的存儲(chǔ)裝置是否重新插入所述組中;釋放對(duì)應(yīng)于所述部分的重新插入的存儲(chǔ)裝置中的區(qū)域;以及刷新所述重新插入的存儲(chǔ)裝置的可能在移除和重新插入之間被更改的任伺剩余部分。23.一種用于存儲(chǔ)數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括存儲(chǔ)裝置組,該組具有至少一個(gè)存儲(chǔ)裝置;以及存儲(chǔ)管理器,用于利用混合冗余模式在所述存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),所述存儲(chǔ)管理器自動(dòng)從多種冗余模式中確定所述混合冗余模式,用于在所述存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),以提供容錯(cuò)功能,并且當(dāng)所述存儲(chǔ)裝置組正好包含存儲(chǔ)容量不同的多個(gè)裝置時(shí),用于提供改進(jìn)的存儲(chǔ)效率。24.根據(jù)權(quán)利要求23所述的系統(tǒng),其中所述存儲(chǔ)管理器自動(dòng)再配置以前利用第一種冗余模式存儲(chǔ)在第一種布置的存儲(chǔ)裝置上的數(shù)據(jù),以利用下述之一進(jìn)行存儲(chǔ)(a)相同布置的存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的存儲(chǔ)裝置上的第二種冗余模式,以及(c)不同布置的存儲(chǔ)裝置上的相同冗余模式,其用于在無數(shù)據(jù)損失的情況下適應(yīng)空間的擴(kuò)展和收縮中的至少一個(gè),所述擴(kuò)展是通過向組中添加其它存儲(chǔ)裝置實(shí)現(xiàn)的,而所述收縮是通過從組中移除存儲(chǔ)裝置實(shí)現(xiàn)的。25.一種用于存儲(chǔ)數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括存儲(chǔ)裝置組,該組具有至少一個(gè)存儲(chǔ)裝置;以及存儲(chǔ)管理器,用于在所述存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù),所述存儲(chǔ)管理器利用第一種冗余模式在所述存儲(chǔ)裝置組中存儲(chǔ)數(shù)據(jù);以及根據(jù)所述存儲(chǔ)裝置組的構(gòu)成的變化,利用下述之一自動(dòng)再配置該存儲(chǔ)裝置組上的數(shù)據(jù)(a)相同布置的存儲(chǔ)裝置上的第二種冗余模式,(b)不同布置的存儲(chǔ)裝置上的第二種冗余模式,(c)不同布置的存儲(chǔ)裝置上的相同冗余模式。26.根據(jù)權(quán)利要求23、24或25中任意一個(gè)的系統(tǒng),其中從包括下述的組中選擇所述冗余模式鏡像、具有奇偶校驗(yàn)的條帶化、RAID6、雙奇偶校驗(yàn)、對(duì)角線奇偶校驗(yàn)、低密度奇偶校驗(yàn)檢測(cè)碼以及turbo碼。27.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把跨兩個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為單個(gè)存儲(chǔ)裝置的鏡像模式。28.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把跨第一對(duì)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨第二對(duì)存儲(chǔ)裝置的鏡像模式。29.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把跨三個(gè)存儲(chǔ)裝置的條帶化模式轉(zhuǎn)換為跨兩個(gè)存儲(chǔ)裝置的鏡像模式。30.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把跨第一組多個(gè)存儲(chǔ)裝置的第一條帶化模式轉(zhuǎn)換為跨第二組多個(gè)存儲(chǔ)裝置的第二條帶化模式。31.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把跨一個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨兩個(gè)存儲(chǔ)裝置的鏡像模式。32.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把在一個(gè)存儲(chǔ)裝置上的鏡像模式轉(zhuǎn)換為另一個(gè)存儲(chǔ)裝置上的鏡像模式。33.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把跨兩個(gè)存儲(chǔ)裝置的鏡像模式轉(zhuǎn)換為跨三個(gè)存儲(chǔ)裝置的條帶化模式。34.根據(jù)權(quán)利要求24或25中任意一個(gè)的系統(tǒng),其中所述存儲(chǔ)管理器把跨第一組多個(gè)存儲(chǔ)裝置的第一條帶化模式轉(zhuǎn)換為跨包括添加到所述組的存儲(chǔ)裝置的第二組多個(gè)存儲(chǔ)裝置的第二條帶化模式。35.根據(jù)權(quán)利要求23,24或25中任意一個(gè)的系統(tǒng),還包括塊分析器,用于把對(duì)象分析為塊,每個(gè)塊都有特定的內(nèi)容,其中所述存儲(chǔ)管理器只在存儲(chǔ)裝置組中存儲(chǔ)具有唯一性內(nèi)容的塊。36.根據(jù)權(quán)利要求35所述的系統(tǒng),還包括散列代碼生成器,用于為每個(gè)塊生成散列號(hào),所述散列代碼生成器以及物理存儲(chǔ)管理器與對(duì)象表存儲(chǔ)裝置和塊表存儲(chǔ)裝置通信,使得所述對(duì)象表列出與所存儲(chǔ)的塊的散列號(hào)相聯(lián)系的對(duì)象的唯一標(biāo)識(shí)符,并且所述塊表為每個(gè)存于其中的塊列出其在所述存儲(chǔ)裝置組中的物理位置的表示。37.根據(jù)權(quán)利要求35所述的系統(tǒng),還包括容錯(cuò)管理器,與所述存儲(chǔ)管理器通信,用于管理在所述存儲(chǔ)裝置組中塊的物理存儲(chǔ)分配,以提供容錯(cuò)存儲(chǔ),即使在所述存儲(chǔ)裝置組可能包括各種容量的存儲(chǔ)裝置時(shí)。38.根據(jù)權(quán)利要求36所述的系統(tǒng),其中一旦從所述存儲(chǔ)裝置組中取出的特定塊,所述物理存儲(chǔ)管理器就根據(jù)所存儲(chǔ)的塊的散列號(hào)檢驗(yàn)所取出塊的內(nèi)容。39.根據(jù)權(quán)利要求38所述的系統(tǒng),其中所述物理存儲(chǔ)管理器計(jì)算所取出塊的散列號(hào);以及把計(jì)算出的散列號(hào)與相應(yīng)的為所述塊存儲(chǔ)的散列號(hào)進(jìn)行比較。40.一種在存儲(chǔ)系統(tǒng)中釋放未使用的存儲(chǔ)塊的方法,該方法包括標(biāo)識(shí)空閑塊;為所述空閑塊確定邏輯扇區(qū)地址;根據(jù)所述邏輯扇區(qū)地址為所述空閑塊標(biāo)識(shí)聚簇存取表項(xiàng);遞減與所述聚簇存取表項(xiàng)相關(guān)的引用計(jì)數(shù);以及如果被遞減的引用計(jì)數(shù)為0的話就釋放所述塊。41.根據(jù)權(quán)利要求40所述的方法,其中標(biāo)識(shí)所述空閑塊包括標(biāo)識(shí)與主機(jī)文件系統(tǒng)關(guān)聯(lián)的空閑塊位圖;以及分析所述空閑塊位圖以標(biāo)識(shí)不再被文件系統(tǒng)使用的聚簇。42.根據(jù)權(quán)利要求41所述的方法,其中標(biāo)識(shí)與主機(jī)文件系統(tǒng)關(guān)聯(lián)的空閑塊位圖包括維持分區(qū)表;分析分區(qū)表以定位操作系統(tǒng)的分區(qū);分析該操作系統(tǒng)分區(qū)以定位超塊;以及根據(jù)超塊標(biāo)識(shí)主機(jī)文件系統(tǒng)。43.根據(jù)權(quán)利要求41所述的方法,還包括制作空閑塊位圖的工作副本,其中所述空閑塊位圖的工作副本被分析以標(biāo)識(shí)文件系統(tǒng)不再使用的聚簇。全文摘要一種允許各種規(guī)模的存儲(chǔ)裝置的動(dòng)態(tài)地可擴(kuò)展和可收縮的容錯(cuò)存儲(chǔ)系統(tǒng)。如果可能的話,就冗余地跨一個(gè)或多個(gè)存儲(chǔ)裝置存儲(chǔ)數(shù)據(jù)。隨著存儲(chǔ)裝置的添加或刪除,自動(dòng)再配置跨一個(gè)或多個(gè)存儲(chǔ)裝置的數(shù)據(jù)布局,以盡可能地為數(shù)據(jù)提供適當(dāng)級(jí)別的冗余??梢圆捎没谏⒘泻瘮?shù)的壓縮技術(shù),從而降低存儲(chǔ)器的消耗。還公開了釋放未使用存儲(chǔ)塊的技術(shù)。文檔編號(hào)G06F3/06GK101095116SQ200580045895公開日2007年12月26日申請(qǐng)日期2005年11月4日優(yōu)先權(quán)日2004年11月5日發(fā)明者杰弗里·S·巴拉爾申請(qǐng)人:數(shù)據(jù)機(jī)器人技術(shù)公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
家居| 恩平市| 马关县| 新建县| 施秉县| 崇仁县| 扶余县| 策勒县| 华坪县| 香港| 龙门县| 原平市| 保德县| 温州市| 新丰县| 广河县| 舟山市| 四会市| 武宁县| 清水河县| 新田县| 武义县| 辉南县| 镇坪县| 泰宁县| 贡嘎县| 大同县| 烟台市| 昌宁县| 南投市| 东台市| 泌阳县| 上蔡县| 湘潭县| 合水县| 桐梓县| 肇源县| 岳池县| 阿巴嘎旗| 岚皋县| 探索|