專利名稱:非易失性介質(zhì)骯臟區(qū)段跟蹤的制作方法
非易失性介質(zhì)骯臟區(qū)段跟蹤
背景技術(shù):
在計算領(lǐng)域內(nèi),許多情形涉及由存儲設(shè)備集合(例如根據(jù)廉價盤冗余陣列(RAID)陣列互操作的硬盤驅(qū)動器陣列)提供的存儲集合,并且其可以由各種設(shè)備和處理訪問以便存儲及獲取各種類型的數(shù)據(jù)。在許多這樣的情形中,存儲在存儲集合的不同部分中的數(shù)據(jù)可能具有一定關(guān)系。作為第一個例子,存儲在存儲集合中的第一數(shù)據(jù)集合和第二數(shù)據(jù)集合可能彼此參照,比如數(shù)據(jù)庫系統(tǒng)中的相關(guān)記錄。作為第二個例子,可以保留數(shù)據(jù)的兩個或更多完全相同的版本,以便提供許多優(yōu)點。舉例來說,兩個存儲設(shè)備可以存儲相同的數(shù)據(jù)集合并且對其提供訪問,從而實際上將針對數(shù)據(jù)的訪問速率加倍。還可以保留數(shù)據(jù)的完全相同的拷貝以便保護數(shù)據(jù)的完整性;例如如果數(shù)據(jù)的第一份拷貝由于數(shù)據(jù)破壞或硬件故障(例如硬盤驅(qū)動器崩潰)之類的故障而丟失,則可以訪問所述數(shù)據(jù)集合的完全相同的第二份拷貝并且對其進行復(fù)制以便從故障恢復(fù)。作為第三個這樣的例子,可以把數(shù)據(jù)相關(guān)聯(lián)以便檢測和/或防護數(shù)據(jù)發(fā)生錯誤或 非意定改變。舉例來說,設(shè)備的讀取或存儲邏輯中的錯誤、緩沖區(qū)欠載或溢出、存儲介質(zhì)中的瑕疵或者外部干擾(比如宇宙射線)都可能不時導(dǎo)致在存儲于存儲介質(zhì)上的數(shù)據(jù)或者在從存儲介質(zhì)讀取數(shù)據(jù)的過程中發(fā)生非有意的改變。因此,在許多這樣的情形中,對于存儲在存儲設(shè)備上的數(shù)據(jù)的對應(yīng)部分可以計算并存儲驗證器(比如校驗和),并且其可以被用來證實數(shù)據(jù)集合的內(nèi)容已經(jīng)被有效地存儲到存儲設(shè)備上和/或從存儲設(shè)備中讀取。作為一個這樣的例子,在存儲包括比特集合的數(shù)據(jù)集合的情境中,可以對各個比特應(yīng)用異或(XOR)運算,從而得到可以被存儲并且與該數(shù)據(jù)集合相關(guān)聯(lián)的一比特校驗和。當(dāng)后來讀取所述數(shù)據(jù)集合時,可以對其應(yīng)用另一次異或運算,并且可以將結(jié)果與所述一比特校驗和進行比較。任一個比特的改變都會導(dǎo)致這些異或計算的失配,從而表明數(shù)據(jù)已被錯誤地存儲、更改或者從存儲設(shè)備錯誤地讀取??梢源_定許多類型的驗證器,其在某些特征方面可能有所不同(例如易于計算,識別出數(shù)據(jù)集合的獄一 f比特發(fā)生了改變的能力,以及能夠借以校正錯誤地讀取的數(shù)據(jù)部分的糾錯能力)。常常通過使用廉價盤冗余陣列(RAID)陣列來實現(xiàn)各種形式的數(shù)據(jù)復(fù)制,比如共用在一起以便獲得各種聚集屬性(比如改進吞吐量和自動數(shù)據(jù)鏡像)的硬盤驅(qū)動器集合。作為第一個這樣的例子,在RAID I陣列中,由具有相同尺寸的兩個或更多硬盤驅(qū)動器構(gòu)成的集合存儲所述存儲集合的完全相同的拷貝,并且對于存儲集合的任何更新都被完全相同地傳播到所有硬盤驅(qū)動器上。因此,在硬盤驅(qū)動器發(fā)生故障的情況下,甚至在發(fā)生多個此類故障的情況下,只要有一個硬盤驅(qū)動器保持可運轉(zhuǎn)并且可訪問,存儲集合就保持可訪問。作為第二個這樣的例子,RAID 4陣列涉及由兩個或更多盤構(gòu)成的集合,其中在所述陣列中包括一個不用來存儲用戶數(shù)據(jù)的盤,而是用來存儲在其他盤上所存儲的數(shù)據(jù)的驗證器。舉例來說,對于涉及分別存儲一兆兆字節(jié)數(shù)據(jù)的四個盤的RAID 4陣列,前三個盤的容量被共用從而形成用于用戶數(shù)據(jù)的三兆兆字節(jié)存儲空間,而第四個盤被包括在所述陣列中以便保存對應(yīng)于在前三個盤上所存儲的各個數(shù)據(jù)集合的驗證器(例如對于分別存儲在其他三個盤上的每三個64比特字,第四個盤包括64比特驗證器以便驗證所述三個64比特字的完整性)。RAID陣列控制器包括被配置成針對所提供的硬盤驅(qū)動器集合實施所選RAID級別的細節(jié)的電路(例如在接收到數(shù)據(jù)集合之后,將數(shù)據(jù)自動分配在三個用戶數(shù)據(jù)盤上,計算所述數(shù)據(jù)集合的驗證器,并且將驗證器存儲在第四個盤上)。所使用的RAID技術(shù)還可以實現(xiàn)附加的保護或特征;例如如果RAID 4陣列中的任何單個存儲設(shè)備發(fā)生故障,則可以通過使用剩余的存儲設(shè)備完全重建存儲在故障設(shè)備上的數(shù)據(jù)。
發(fā)明內(nèi)容
提供本概要是為了以簡化形式介紹將在下面的詳細描述部分中進一步描述的概念的選擇。本概要不意圖標(biāo)識出所要求保護的主題內(nèi)容的關(guān)鍵特征或本質(zhì)特征,也不意圖被使用來限制所要求保護的主題內(nèi)容的范圍。在存儲系統(tǒng)上寫入相關(guān)聯(lián)的數(shù)據(jù)集合時,在寫入期間可能會發(fā)生導(dǎo)致相關(guān)聯(lián)的各個數(shù)據(jù)集合之間的不一致的問題。作為第一個例子,在鏡像的數(shù)據(jù)集合中,在對其中一個鏡像進行寫入時可能會發(fā)生錯誤,比如由于宇宙射線、物理介質(zhì)中的瑕疵或者讀取/寫入處 理中的邏輯錯誤而導(dǎo)致數(shù)據(jù)的非有意改變。其結(jié)果是,數(shù)據(jù)集合的各個鏡像可能不匹配,并且可能難以選擇數(shù)據(jù)的正確版本。作為第二個例子,由于存儲數(shù)據(jù)集合及其驗證器(或者反之亦然)之間的延遲可能會出現(xiàn)問題。舉例來說,許多存儲設(shè)備只支持每次對一個位置的寫入(例如處于硬盤驅(qū)動器的寫入頭下方的位置,或者由固態(tài)存儲設(shè)備中的地址寄存器指定的位置),并且對于數(shù)據(jù)的順序存儲涉及在驗證器之前寫入數(shù)據(jù)集合,或者反之亦然。作為另一個例子,如果數(shù)據(jù)集合和驗證器被存儲在不同的存儲設(shè)備上,則可能難以把第一存儲設(shè)備存儲數(shù)據(jù)集合的時刻與第二存儲設(shè)備存儲數(shù)據(jù)集合的驗證器的時刻同步。其結(jié)果是,存儲數(shù)據(jù)集合和相應(yīng)的驗證器不是按照同步方式發(fā)生的,而是按照順序方式發(fā)生的。許多故障來源可能會中斷存儲處理,比如掉電、硬件故障、軟件崩潰或者從陣列當(dāng)中意外地移除存儲設(shè)備。如果在存儲數(shù)據(jù)集合之后并且在存儲驗證器之前的時刻發(fā)生這樣的故障,則后面在讀取期間可能會出現(xiàn)危害對于數(shù)據(jù)準(zhǔn)確性的置信度的驗證器錯誤。除了正由(多個)存儲設(shè)備主動寫入的數(shù)據(jù)之外,故障還可能會干擾尚未完成的其他寫入,比如存儲在寫入緩沖區(qū)中的數(shù)據(jù)和被調(diào)度為即將寫入的數(shù)據(jù)。在這些和其他情形中,可以通過驗證處理來檢測數(shù)據(jù)集合的一致性,例如通過對各個完全相同的數(shù)據(jù)集合進行比較或者對具有相應(yīng)數(shù)據(jù)的各個驗證器進行比較。相應(yīng)地,在檢測到災(zāi)難性故障之后,可以“清潔”一個或更多存儲設(shè)備上的數(shù)據(jù),這是通過驗證所述數(shù)據(jù)并且可能校正不一致而實現(xiàn)的。但是雖然可能很容易地檢測到故障的發(fā)生(例如錯誤的關(guān)閉或者對于故障存儲設(shè)備的替換),但是可能無法確定在進行寫入時存儲設(shè)備的哪些部分正被寫入并且可能已經(jīng)由于故障而受損。如果沒有這樣的信息,可能必須通過驗證存儲集合中的每一個數(shù)據(jù)集合來清潔整個存儲集合(例如把鏡像的數(shù)據(jù)集合的每一份拷貝的全部內(nèi)容進行比較以檢測不一致,并且測試存儲集合中的每一個數(shù)據(jù)集合的驗證器)。清潔整個存儲集合可能會花費很長時間,特別鑒于存儲集合容量已經(jīng)增長到千兆兆字節(jié)的范圍,從而甚至在短暫的災(zāi)難性故障時間段之后也會導(dǎo)致長時間的恢復(fù)時間段;并且雖然這一廣泛的清潔處理可以確保數(shù)據(jù)集合的完整性,但是對于整個卷的清潔處理(常常涉及很長時間內(nèi)沒有被寫入的數(shù)據(jù)集合甚至存儲設(shè)備)的程度可能與故障發(fā)生時可能正在進行中的寫入的相對較小的數(shù)目不成比例。
這里給出了用于把針對存儲集合的清潔集中到可能受損于故障的數(shù)據(jù)的技術(shù)。根據(jù)這些技術(shù),在對存儲集合中的位置進行寫入之前,存儲設(shè)備可以在相同的非易失性物理介質(zhì)上存儲表明所述寫入將要發(fā)生的位置的描述符,并且可以在所述寫入完成之后擦除所述描述符。按照這種方式,存儲設(shè)備可以跟蹤存儲集合的“骯臟”區(qū)域,并且在從故障恢復(fù)之后,可以僅僅對存儲集合的“骯臟”區(qū)域發(fā)起清潔。但是可以認識到,在非易失性物理介質(zhì)上記錄(以及刷新)每一項寫入的地址并且在證實對于物理介質(zhì)的寫入完成之后擦除(以及刷新)所述地址,這樣做可能會顯著增加在寫入每一個數(shù)據(jù)集合的過程中所涉及的查找和寫入的次數(shù)(例如增加到三倍),從而降低存儲集合的性能(例如等待時間和吞吐量)。在另一極端情況下,僅僅在高級別下(比如對于每個存儲設(shè)備、分區(qū)或卷)跟蹤“骯臟”信息可能使得清潔處理不夠集中。舉例來說,如果對于每個卷跟蹤“骯臟”信息,則清潔處理可能集中于在寫入時處于使用中的特定卷,但是該卷可能包括數(shù)以兆兆字節(jié)計的數(shù)據(jù),從而導(dǎo)致大規(guī)模的清潔處理,即使當(dāng)時僅僅在對幾兆字節(jié)的數(shù)據(jù)進行寫入也是如此。因此,根據(jù)這里給出的技術(shù),可以把存儲集合分配成具有區(qū)段尺寸的各個區(qū)段,并且可以對于每一個區(qū)段跟蹤“骯臟”信息。舉例來說,將存儲集合分配到一千兆字節(jié)的各個區(qū)段可以允許對于各個區(qū)段的相對精確的跟蹤,同時還降低了更新骯臟區(qū)段信息的頻率(例如當(dāng)在某一區(qū)段內(nèi)發(fā)起寫入時,該區(qū)段被標(biāo)記為“骯臟”,并且可以在該區(qū)段內(nèi)的大量順序?qū)懭肫陂g保持如此 標(biāo)記)。因此,對于區(qū)段尺寸的選擇可以被視為骯臟區(qū)段信息的精度(其導(dǎo)致更加集中并且更短的清潔處理)與實施骯臟區(qū)段跟蹤處理的性能成本降低之間的折中。附加的技術(shù)可以進一步降低對于骯臟區(qū)段信息的更新頻率。作為第一個例子,在寫入對應(yīng)于對其請求了寫入的區(qū)段的骯臟區(qū)段描述符之前,一個實施例可以確定該區(qū)段是否已經(jīng)在存儲介質(zhì)上被標(biāo)記為骯臟,并且可以避免冗余地將該區(qū)段標(biāo)記為骯臟。作為第二個例子,最近完成了對其的寫入的區(qū)段可能給出即將對同一區(qū)段進行后續(xù)寫入的高概率。因此,取代在寫入完成之后迅速把所述區(qū)段標(biāo)記為清潔,可以把所述“清潔”評論推遲一段短暫的持續(xù)時間;并且如果接收到對于同一區(qū)段的后續(xù)寫入,則該區(qū)段可以保持被標(biāo)記為骯臟,而無須在把所述區(qū)段標(biāo)記為清潔之后不久即把該區(qū)段標(biāo)記為骯臟。在一個這樣的實施例中,可以生成骯臟區(qū)段描述符的易失性存儲器表示并且將其用來確定何時把這樣的區(qū)段標(biāo)記為骯臟或清潔。舉例來說,所述存儲器內(nèi)表示可以記錄對于每一個區(qū)段的最近一次寫入請求的時間,并且可以把在一段已定義的持續(xù)時間內(nèi)沒有被寫入的任何區(qū)段標(biāo)記為清潔。此外,所述存儲器內(nèi)表示可以允許對于各個“清潔”區(qū)段的批量記錄,從而進一步減少在骯臟區(qū)段跟蹤處理中所涉及的存儲介質(zhì)寫入的數(shù)量。對于骯臟區(qū)段的“工作集合”的存儲器內(nèi)跟蹤的這些和其他使用可以減少對于存儲設(shè)備的訪問次數(shù),并從而降低非易失性骯臟區(qū)段跟蹤的性能成本,而不會顯著降低清潔處理的精度。這些和其他技術(shù)可以進一步降低實施骯臟區(qū)段跟蹤的性能成本,而不會在從存儲集合的故障恢復(fù)的過程中顯著延長清潔處理。為了實現(xiàn)前述和相關(guān)目的,下面的描述和附圖闡述了特定的說明性方面和實現(xiàn)方式。這僅僅表明可以采用一個或更多方面的多種方式當(dāng)中的幾種。通過結(jié)合附圖考慮下面的詳細描述,本公開內(nèi)容的其他方面、優(yōu)點和新穎特征將變得顯而易見。
圖I是一種示例性情形的圖示,其特征在于存儲集合的故障可能會損害存儲在幾個存儲設(shè)備上的鏡像數(shù)據(jù)集合。圖2是一種示例性情形的圖示,其特征在于存儲集合的故障可能損害數(shù)據(jù)集合和數(shù)據(jù)集合的驗證器(例如校驗和)的一致性。圖3是兩種技術(shù)的圖示,其可以減少由于故障導(dǎo)致數(shù)據(jù)集合中的數(shù)據(jù)受損的發(fā)生,但是可能具有高成本和/或低效率。圖4是一種示例性情形的圖示,其特征在于使用這里給出的技術(shù)來跟蹤存儲集合的物理介質(zhì)上的骯臟區(qū)段。圖5是根據(jù)這里給出的技術(shù)對存儲集合的骯臟區(qū)段進行跟蹤和非易失性介質(zhì)記錄的示例性方法的流程圖示。圖6是根據(jù)這里給出的技術(shù)按照在存儲集合的非易失性存儲介質(zhì)上表明的骯臟 區(qū)段對存儲集合進行清潔的示例性方法的流程圖示。圖7是包括被配置成具體實現(xiàn)這里所闡述的一項或更多項規(guī)定的處理器可執(zhí)行指令的示例性計算機可讀介質(zhì)的圖示。圖8是一種示例性情形的圖示,其特征在于可以根據(jù)這里給出的技術(shù)被用來跟蹤存儲集合的非易失性物理介質(zhì)上的骯臟區(qū)段的一種類型的數(shù)據(jù)結(jié)構(gòu)。圖9是用于根據(jù)這里給出的技術(shù)更新存儲設(shè)備上的骯臟區(qū)段表以便跟蹤存儲集合的骯臟區(qū)段的示例性處理的圖示。圖10是具體實現(xiàn)根據(jù)這里給出的技術(shù)跟蹤存儲集合的骯臟區(qū)段的處理的示例性狀態(tài)機的圖示。圖11是可以在其中實施這里闡述的一項或更多項規(guī)定的示例性計算環(huán)境。
具體實施例方式下面將參照附圖描述所要求保護的主題內(nèi)容,其中相同的附圖標(biāo)記始終被用來指代相同的元件。在下面的描述中,出于解釋的目的闡述了許多具體細節(jié)以便提供對于所要求保護的主題內(nèi)容的透徹理解。但是可以明顯看出,可以在沒有這些具體細節(jié)的情況下實踐所要求保護的主題內(nèi)容。在其他事例中,以方框圖的形式示出了各個結(jié)構(gòu)和設(shè)備以便于描述所要求保護的主題內(nèi)容。A、介紹
在計算領(lǐng)域內(nèi),許多情形涉及將包括存儲集合的數(shù)據(jù)存儲在一個或更多非易失性存儲設(shè)備上(例如基于盤片的磁性和/或光學(xué)硬盤驅(qū)動器、固態(tài)存儲設(shè)備以及非易失性存儲器電路)。數(shù)據(jù)存儲的許多細節(jié)可以有所變化,比如字尺寸、尋址方法、把存儲設(shè)備的存儲空間劃分成一個或更多分區(qū)以及把存儲設(shè)備內(nèi)的已分派空間暴露為計算環(huán)境內(nèi)的一個或更多卷。此外,各個存儲設(shè)備可以獨立操作或者進行松散協(xié)作以便提供存儲集合。舉例來說,在根據(jù)RAID O方案構(gòu)造的陣列中,可以從由每一個存儲設(shè)備提供的容量簡單地聚集存儲集合,其中每一個存儲設(shè)備可以獨立于其他盤操作??商鎿Q地,各個存儲設(shè)備可以被配置成通過改變緊密協(xié)調(diào)的程度提供各種特征。舉例來說,在根據(jù)RAID I方案構(gòu)造的陣列中,存儲設(shè)備集合可以分別存儲整個存儲集合的一份完全相同的拷貝;例如一兆兆字節(jié)存儲集合可以被存儲為四個一兆兆字節(jié)存儲設(shè)備上的四份完全相同的拷貝,所述存儲設(shè)備可以互操作來確保針對更改存儲集合的任何請求都被等效地應(yīng)用于所有四個存儲設(shè)備以便保持同步。這種性質(zhì)的“鏡像”檔案可以給出改進的訪問速率;例如不同的處理可以通過不同的存儲設(shè)備訪問存儲集合,從而潛在地把可以通過任何單個設(shè)備實現(xiàn)的對于存儲集合的訪問速率增大到四倍。此外,此類陣列表現(xiàn)出魯邦的耐久性;如果一個或更多硬盤驅(qū)動器發(fā)生故障(例如由于數(shù)據(jù)破壞、損壞或損失),仍然可以通過其他硬盤驅(qū)動器訪問存儲集合,并且只要至少一個硬盤驅(qū)動器保持有效且可訪問的,所述存儲集合就保持完好。但是這些特征的優(yōu)點在RAID I陣列中由于大量的容量損失而被抵消(例如使用四兆兆字節(jié)的硬盤驅(qū)動器空間來存儲一兆兆字節(jié)的數(shù)據(jù))。其他存儲方案可以以較低的容量減少提供這些安全性和性能特征中的一些(例如在RAID 4方案中,一組(/ )個驅(qū)動器的空間(S)暴露出除了一個被保留來存儲奇偶校驗信息的硬盤驅(qū)動器之外的所有硬盤驅(qū)動器的完全存儲容量,并且可以從陣列中的任一個硬盤驅(qū)動器的故障恢復(fù))。在這些和其他情形中,可以通過各種設(shè)備和處理把數(shù)據(jù)集合存儲到存儲集合。但是在使用可能損害數(shù)據(jù)的存儲的存儲集合的過程中可能發(fā)生許多形式的故障。舉例來說,當(dāng)代表各個處理的對于存儲集合的寫入正在訪問數(shù)據(jù)集合時,在寫入處理中、在存儲集合管理處理中、在對應(yīng)于軟件的設(shè)備驅(qū)動程序中或者在操作系統(tǒng)中可能會發(fā)生軟件故障;計 算機可能會丟失與存儲設(shè)備的通信(例如存儲設(shè)備可能被斷開,或者連接計算機與存儲設(shè)備的有線或無線網(wǎng)絡(luò)可能故障);或者存儲設(shè)備可能發(fā)生硬件故障(例如硬盤驅(qū)動器中的驅(qū)動器頭崩潰或者斷電)。這些和其他形式的故障可能在沒有預(yù)警的情況下突然發(fā)生,并且可能會中斷向存儲集合寫入數(shù)據(jù)的處理。在一項或更多項寫入期間發(fā)生存儲集合故障的情況下,某些類型的故障可能是可恢復(fù)的,或者可能導(dǎo)致無足輕重的數(shù)據(jù)丟失。舉例來說,故障可能在數(shù)據(jù)被寫入到存儲集合之后不久發(fā)生并且是可恢復(fù)的;可能導(dǎo)致丟失了可以被再生或者沒有價值的數(shù)據(jù);或者可能導(dǎo)致丟失相對較大的數(shù)據(jù)集合中的少量數(shù)據(jù),比如丟失了非常大的電子郵件消息檔案中的幾個電子郵件消息。但是其他類型的故障可能造成嚴(yán)重的問題。具體來說,在被寫入到存儲集合的兩個或更多數(shù)據(jù)集合之間可能存在某些關(guān)聯(lián),并且在寫入第一數(shù)據(jù)集合時發(fā)生的故障可能導(dǎo)致相關(guān)聯(lián)的數(shù)據(jù)集合中的不一致。這樣的不一致可能不僅會損害故障發(fā)生時刻正被寫入的數(shù)據(jù)集合的完整性,而且還會損害相關(guān)聯(lián)的數(shù)據(jù)集合。實際上,在某些情形中,與對于存儲集合的不完整寫入相比,寫入的完全失敗以及將要寫入的數(shù)據(jù)的丟失可能導(dǎo)致較少的問題。作為第一個例子,如果在對于鏡像的數(shù)據(jù)集合的第一份拷貝的更新期間發(fā)生故障,則所檢測到的該拷貝與另一拷貝之間的不一致可能會對全部兩份拷貝的完整性招致疑問。此外,如果在故障發(fā)生時刻全部兩份拷貝都正被更新并且隨后檢測到不一致,則可能難以確定哪一份拷貝在故障發(fā)生之前成功完成了寫入而哪一份拷貝則沒有完成。作為第二個例子,如果檢測到數(shù)據(jù)集合與其校驗和之間的不一致,則可能難以確定是數(shù)據(jù)集合還是校驗和出了錯。此外,如果校驗和是從幾個數(shù)據(jù)集合計算的,在針對一個數(shù)據(jù)集合的寫入沒能完成的情況下可能導(dǎo)致錯誤的校驗和以及不僅降低對于所述數(shù)據(jù)集合和校驗和的完整性的信任,而且還降低對于所述校驗和代表的所有其他數(shù)據(jù)集合的信任。在這些和其他情形中,如果沒能完成對于數(shù)據(jù)集合的寫入則可能導(dǎo)致會損害存儲集合中的廣泛數(shù)據(jù)范圍的可靠性的不一致,其中甚至包括只與不完整地寫入的數(shù)據(jù)集合不太相關(guān)的其他數(shù)據(jù)集合。圖I和2所給出的兩種不同情形示出了在對數(shù)據(jù)集合進行寫入時發(fā)生故障的后果。在圖I的示例性情形100中,包括各個數(shù)據(jù)集合104(例如比特、字節(jié)、字、扇區(qū)、文件或記錄)的存儲集合102被存儲在存儲設(shè)備106的集合上,其中在各個數(shù)據(jù)集合104之間存在鏡像關(guān)系。具體來說,在該示例性情形100中,存儲設(shè)備106被配置成存儲數(shù)據(jù)集合104的完全相同的拷貝,比如在RAID I方案中那樣。(可以按照物理方式施行鏡像,例如把相同的數(shù)據(jù)寫入到尺寸完全相同的存儲設(shè)備106的集合上的每一個物理位置,或者按照邏輯方式施行鏡像,例如把數(shù)據(jù)寫入到對應(yīng)于存儲集合102的邏輯地址的每一個存儲設(shè)備106的物理位置。)相應(yīng)地,在第一時間點112,當(dāng)請求在存儲集合102中的特定位置108處寫入110特定數(shù)據(jù)集合104時,各個存儲設(shè)備106可以分別對所請求的位置108施行寫入110。但是正如該示例性情形100中進一步示出的那樣,可能會由于各個存儲設(shè)備106的不完全同步而出現(xiàn)問題;例如可能由不同的存儲設(shè)備106在不同時間發(fā)起、施行以及完成對于每一個存儲設(shè)備106的寫入110。這樣的定時差異可能是由于硬件差異導(dǎo)致的(例如第一存儲設(shè)備106可能迅速把數(shù)據(jù)集合104提交到物理介質(zhì),而第二存儲設(shè)備106則可能首先把數(shù)據(jù)集合104存儲在寫入緩沖區(qū)中),但是甚至對于裝備完全相同的存儲設(shè)備也可能發(fā)生(例如不同的存儲設(shè)備106的輸入/輸出隊列的差異,或者不同的硬盤驅(qū)動器的寫入頭在寫入請求開始時的初始扇區(qū)位置的差異)。其結(jié)果是,在第二時間點114,對于其中兩個存儲設(shè)備 106的寫入110可能已經(jīng)完成,而第三存儲設(shè)備106則繼續(xù)完成寫入110 (并且實際上可能尚未開始把數(shù)據(jù)集合104提交到存儲集合102)。例如如果在第一存儲設(shè)備106完成寫入110之后并且在第二存儲設(shè)備106完成相同的寫入110之前發(fā)生故障的話,則存儲設(shè)備106的這樣的同步偏離可能會導(dǎo)致嚴(yán)重的問題。舉例來說,在第三時間點116,當(dāng)正對存儲設(shè)備106施行第三寫入110時,發(fā)生中斷對于所有存儲設(shè)備106的寫入110的故障118。即使故障118是暫時性的(例如瞬時失電),并且甚至是瞬息性的,由于存儲設(shè)備106中的定時差異,故障118仍然可能導(dǎo)致不一致122 (例如在故障118之前寫入110可能已經(jīng)在第一和第二存儲設(shè)備106上完成,但是沒有在第三存儲設(shè)備106上完成)。在從故障118恢復(fù)的同時,在識別出預(yù)期是完全相同的各個數(shù)據(jù)集合104之間的不一致122之后,可能難以選擇確定哪一個數(shù)據(jù)集合108是準(zhǔn)確的。在該示例性情形100中,可能符合邏輯的做法是選擇存儲在多數(shù)存儲設(shè)備106上的數(shù)據(jù)集合108的版本。但是該示例性情形100的次要變型可能使得這樣的選擇不那么符合邏輯;例如在涉及偶數(shù)個存儲設(shè)備106的情形中可能會出現(xiàn)不一致122,從而可能無法進行多數(shù)選擇。在例如圖I的示例性情形100之類的情形中,不一致122可能僅僅適用于最近被寫入的數(shù)據(jù)集合110。但是在其他情形中,類似的故障118還可能危害在長時間內(nèi)沒有被寫入或者甚至被訪問的數(shù)據(jù)集合104的可靠性,甚至?xí):Υ鎯υ诠收?18發(fā)生時并未處于使用中的其他存儲設(shè)備106上的那些數(shù)據(jù)集合104。在圖2的示例性情形200中,按照RAID 4方案配置由四個存儲設(shè)備106構(gòu)成的集合,其中存儲集合102被分派在三個存儲設(shè)備106上,并且第四存儲設(shè)備106被配置成存儲對應(yīng)于存儲在前三個存儲設(shè)備106上的各個數(shù)據(jù)集合104的驗證器202的集合。驗證器202可以包括校驗和,比如通過把存儲在每一個其他存儲設(shè)備106上的相應(yīng)位置處的各個比特異或在一起而計算出來的奇偶校驗位。(例如對于存儲在每一個存儲設(shè)備106的存儲集合102中的特定物理或邏輯位置處的一兆字節(jié)數(shù)據(jù)集合104,可以把每一個所述一兆字節(jié)數(shù)據(jù)集合104異或在一起,以便生成存儲在第四存儲設(shè)備106上的一兆字節(jié)的奇偶校驗數(shù)據(jù)。)這一互操作可以允許存儲設(shè)備106在某些形式的數(shù)據(jù)丟失下保持存儲集合102的完整性。例如如果前三個存儲設(shè)備106當(dāng)中的任一個丟失,則可以通過把存儲在另外兩個存儲設(shè)備106上的數(shù)據(jù)與存儲在第四存儲設(shè)備106上的相應(yīng)的奇偶校驗數(shù)據(jù)異或在一起來重建存儲集合102的存儲在所丟失的存儲設(shè)備106上的部分;并且如果第四存儲設(shè)備106丟失,則可以從存儲在前三個存儲設(shè)備上的相應(yīng)的數(shù)據(jù)集合104簡單地把奇偶校驗數(shù)據(jù)重新生成到替換的存儲設(shè)備106上。按照這種方式,如圖2的示例性情形200中所示的各個存儲設(shè)備106的互操作即使在突然并且永久性地丟失任一個存儲設(shè)備106的情況下也允許容錯。但是該示例性情形200中的存儲設(shè)備106也表現(xiàn)出在圖I的示例性情形100中給出的不完全同步。舉例來說,在第一時間點204,可以發(fā)起對于存儲在第二存儲設(shè)備106上的數(shù)據(jù)集合104的寫入110,這涉及到更新對應(yīng)于存儲在第四存儲設(shè)備106上的相應(yīng)數(shù)據(jù)集合104的驗證器202。但是各項寫入110可能不會同時完成;例如在第二時間點206,對于第二存儲設(shè)備106的寫入110可能已經(jīng)完成,但是在第四存儲設(shè)備106上對于驗證器202的寫入可能還沒有完成。此外,在后一項寫入110完成之前可能會發(fā)生故障118,并且第四存儲設(shè)備106可能會保留錯誤的 驗證器118。即使受到限制并且簡短,該故障118仍然可能不僅危害已被不完整地寫入到第四存儲設(shè)備106上的驗證器116和最近被完整地寫入的存儲在第二存儲設(shè)備106上的數(shù)據(jù)集合104,而且還會危害同樣由驗證器122代表的存儲在第一和第三存儲設(shè)備106上的數(shù)據(jù)集合104。舉例來說,在第三時間點208,第三存儲設(shè)備106可能會發(fā)生故障118 ;并且在第四時間點210,可以發(fā)起恢復(fù)處理以便通過把第一和第二存儲設(shè)備106上的相應(yīng)數(shù)據(jù)集合104與第四存儲設(shè)備106上的相應(yīng)驗證器202異或在一起而在替換的存儲設(shè)備118上重建數(shù)據(jù)集合104。但是由于在第二時間點206對于第四存儲設(shè)備106的寫入110的故障118導(dǎo)致的不一致122,所述異或可能導(dǎo)致在第三存儲設(shè)備106上重建錯誤的數(shù)據(jù)212。即使第三存儲設(shè)備106上的該數(shù)據(jù)集合104沒有被涉及在寫入110的故障118中,即使該數(shù)據(jù)集合104在長時間內(nèi)都沒有被寫入,并且即使在對于第四存儲設(shè)備106的寫入110的故障118期間第三存儲設(shè)備106并未處于使用中或者甚至不可訪問,仍然可能生成該錯誤數(shù)據(jù)212。因此,寫入202的單次故障可能包括存儲集合102的容錯能力(也就是說盡管實施了 RAID 4方案,但是存儲集合102仍然會失去從單個存儲設(shè)備106的故障118恢復(fù)的能力)。在其他情形中可能會出現(xiàn)甚至更加嚴(yán)重的問題;例如如果故障的寫入110是對于包括主引導(dǎo)記錄的數(shù)據(jù)集合104發(fā)生的,則存儲集合106內(nèi)的整個卷(可能包括整個存儲集合106)都可能會受到損害并且不可訪問。由于寫入110的故障118的潛在災(zāi)難性后果,可以利用各種技術(shù)來檢測及校正所導(dǎo)致的不一致122。作為第一種這樣的技術(shù),可以利用各種類型的清潔處理來檢測存儲集合102中的不一致。舉例來說,可以把數(shù)據(jù)集合104與驗證器202進行比較以檢測失配,或者可以對預(yù)期是完全相同的數(shù)據(jù)集合104的各份拷貝進行比較。甚至可以對于不與另一個數(shù)據(jù)集合104或驗證器202相關(guān)聯(lián)的數(shù)據(jù)集合104檢查諸如數(shù)據(jù)破壞之類的不一致,并且可以偶爾自動修復(fù)。但是對于整個存儲集合102的掃描在許多情形中可能是低效的和/或無法承受的。舉例來說,所述掃描可能會由于存儲集合102的尺寸、存儲集合102的吞吐量(例如可以通過相對低吞吐量的網(wǎng)絡(luò)連接訪問地理上分布式的存儲集合102)和/或掃描的復(fù)雜度(例如復(fù)雜奇偶校驗檢查的數(shù)學(xué)加強的計算)而延長。在掃描期間,如圖2的示例性情形200中所描繪的那樣,在存儲設(shè)備106發(fā)生故障118的情況下存儲集合102仍然可能是不一致并且脆弱的,并且由于可能會提供錯誤的數(shù)據(jù),因此允許處理訪問存儲集合102的做法可能是不明智的。因此可能必須阻斷這樣的處理直到掃描完成為止(或者至少直到已經(jīng)清潔了所述處理所利用的數(shù)據(jù)集合104為止),從而導(dǎo)致服務(wù)斷供或停用時間。此外,對于整個存儲集合102的該長時間并且高成本的掃描可能由甚至單個存儲設(shè)備106的可能是短暫的故障118而觸發(fā),并且可能與故障118期間的待定寫入110的數(shù)目不成比例。實際上,即使在故障118發(fā)生時沒有在進行寫入110,如果無法確定待定寫入110的數(shù)目,則由于可能發(fā)生導(dǎo)致災(zāi)難性結(jié)果的不一致122,也可能必須調(diào)用對于整個存儲集合102的掃描。鑒于這些考慮,可能期望提供用以在存儲集合102的正常操作期間存儲關(guān)于待定寫入110的信息的機制,以防突然發(fā)生硬件和/或軟件故障118。該信息可以被記錄為關(guān)于存儲集合102的“骯臟”狀態(tài)的信息,所述“骯臟”狀態(tài)可能在故障發(fā)生時導(dǎo)致不一致122。此外,可能期望將該信息記錄在非易失性存儲器中,以便在發(fā)生電力故障時保留所述信息。這一跟蹤可以允許在故障118之后調(diào)用清潔處理,從而可以把清潔處理限制到僅僅掃描存儲集合102在故障118發(fā)生時刻涉及在待定寫入110中的區(qū)域。圖3給出了用于把“骯臟”狀態(tài)記錄在對應(yīng)于由存儲設(shè)備106的集合提供的存儲集 合102的非易失性存儲器中的兩種技術(shù)。作為第一種示例性技術(shù)300,對于存儲在存儲集合102中的每一個數(shù)據(jù)比特,可以存儲“骯臟”指示符302,其表明對于該比特的待定寫入202。對應(yīng)于某一比特的“骯臟”指示符302可以在發(fā)起對于該比特的寫入202之前設(shè)定,并且可以在寫入202完成之后被清除。為了清潔存儲集合102,可以檢查各個比特的“骯臟”指示符302,并且被設(shè)定的任何“骯臟”指示符302可以發(fā)起對于相關(guān)聯(lián)的比特的清潔(例如通過把來自存儲在不同存儲設(shè)備106上的數(shù)據(jù)集合102的完全相同的拷貝的相應(yīng)比特拷貝在不一致比特之上)。該第一種示例性技術(shù)300可以給出一些優(yōu)點例如其可以實現(xiàn)把關(guān)于待定寫入104的信息存儲在非易失性存儲介質(zhì)中,可以帶來涉及少量附加硬件或軟件的相對簡單的清潔處理,并且與其他檢測方法(例如在獲取自幾個存儲設(shè)備106的較大數(shù)據(jù)集合104上施行異或運算)相比可以降低所述清潔的計算復(fù)雜度。但是該第一種示例性技術(shù)300也存在許多缺點。作為第一個例子,“骯臟”指示符302消耗存儲集合102的一半存儲空間。作為第二個例子,掃描處理仍然涉及掃描整個存儲集合102,并且即使掃描檢測的相對簡便性降低了所涉及的計算能力,但是對于整個存儲集合102的訪問仍然會導(dǎo)致長時間的清潔處理。此外,如果對于存儲集合102的訪問速率是清潔處理中的瓶頸,則清潔處理的持續(xù)時間可能不會改變。作為第三個例子,如果“骯臟”指示符302的存儲與存儲設(shè)備106的被跟蹤比特在物理上鄰近(例如在存儲設(shè)備106的物理介質(zhì)上跟在每一個比特或字節(jié)之后),則導(dǎo)致破壞比特的故障108也可能導(dǎo)致破壞“骯臟”指示符302??商鎿Q地,如果“骯臟”指示符302被存儲在同一存儲設(shè)備106的不同區(qū)域內(nèi),則對于任何單個比特的寫入202都涉及對于該存儲設(shè)備106的三個不同部分的三次訪問一例如對于存儲“骯臟”指示符302的區(qū)域的第一次查找和訪問以便將所述比特標(biāo)記為骯臟;對于存儲所述比特的區(qū)域的第二次查找和訪問以便施行寫入202 ;以及對于存儲“骯臟”指示符302的區(qū)域的第三次查找和訪問以便把所述比特標(biāo)記為清潔。這樣的多次訪問可能會大大降低存儲設(shè)備106的性能(例如等待時間和吞吐量)。此外,由于跟蹤“骯臟”比特的這種變型在存儲設(shè)備106的常規(guī)使用中導(dǎo)致更多的物理磨損,因此可能會不利地加速存儲設(shè)備104的物理故障118。
圖3還描繪出用于跟蹤對應(yīng)于由存儲設(shè)備106的集合提供的存儲集合102的“骯臟”信息的第二種示例性技術(shù)304。該第二種示例性技術(shù)304涉及包括單獨的非易失性存儲器306(例如包括單獨的電池308的固態(tài)存儲設(shè)備),可以在其中記錄對應(yīng)于存儲集合102的各個字節(jié)的“骯臟”指示符。舉例來說,可以監(jiān)測對于對應(yīng)的數(shù)據(jù)集合104的寫入202的請求,將其記錄在單獨的非易失性存儲器306中,并且在寫入202完成時清除。該第二種示例性技術(shù)304給出了幾個優(yōu)點,在一般方面以及關(guān)于圖3中所示的第一種示例性技術(shù)304都是如此。作為第一個例子,由于對單獨的非易失性存儲器306的訪問可能與施行對存儲集合102的寫入202同時發(fā)生,因此存儲設(shè)備106的性能(例如等待時間和吞吐量)可以不由于包括該技術(shù)而降低。作為第二個例子,將“骯臟”指示符306存儲在存儲器的單獨部分中可以避免減小存儲集合102的容量。作為第三個例子,“骯臟”指示符302與存儲設(shè)備106的物理介質(zhì)的分開存儲可以在存儲集合102發(fā)生故障118時保留“骯臟”指示符302 ;例如存儲設(shè)備106的一部分中的物理瑕疵可能不會影響對應(yīng)于存儲在所述瑕疵部分中的各個字節(jié)的“骯臟”指示符302的存儲或獲取,并且在發(fā)生電力故障時,單獨的非易失性存儲器306可以利用電池308繼續(xù)操作。作為第四個例子,通過僅僅集中于在 單獨的非易失性存儲器306中被表明為骯臟的字節(jié),清潔處理可以顯著延長。但是該第二種示例性技術(shù)304也存在明顯的缺點。作為第一個例子,包括單獨的硬件會顯著增加存儲集合102的成本和復(fù)雜度。作為第二個例子,除了存儲設(shè)備106可能發(fā)生故障之外,對于存儲集合102的管理可能還必須應(yīng)付單獨的非易失性存儲器306的故障。此外,由于單獨的非易失性存儲器306沒有被存儲在存儲集合102中,因此其沒有被包括在用于提升存儲集合102的冗余度和容錯性的機制中,并且單獨的非易失性存儲器306的單次故障就可能導(dǎo)致丟失對應(yīng)于整個存儲集合102的“骯臟”指示符302。作為第三個例子,對于存儲集合102的對應(yīng)字節(jié)跟蹤“骯臟”指示符302可能涉及對于單獨的非易失性存儲器306的較高訪問次數(shù)和速率,這可能必須提供較高的吞吐量和較大的容量以滿足這一任務(wù)。實際上,單獨的非易失性存儲器306可能必須提供足夠的吞吐量以便不僅記錄對應(yīng)于存儲集合102中的最快的存儲設(shè)備106的寫入活動,而且還要對于由單獨的非易失性存儲器306所服務(wù)的所有存儲設(shè)備106的組合活動速率進行記錄。作為第四個例子,如果單獨的非易失性存儲器306沒有與存儲設(shè)備106集成在一起(例如如果其被實施在RAID控制器中),則“骯臟”指示符302的便攜性可能不如存儲設(shè)備106。舉例來說,在RAID控制器發(fā)生不相關(guān)的故障時,存儲設(shè)備106可能被遷移到不同的RAID控制器并且由其訪問,但是“骯臟”指示符302則可能保留在發(fā)生故障的RAID控制器的完全可運作的單獨的非易失性存儲器306中。實際上,用戶可能不清楚為何沒有涉及在RAID控制器的故障中的存儲設(shè)備106可能是不一致的,并從而在插入到單獨的RAID控制器中時可能必須被清潔。類似于圖3中的技術(shù)的用于通過跟蹤對于存儲集合102的寫入202的狀態(tài)來促進從故障118恢復(fù)存儲集合102的許多技術(shù)都可能表現(xiàn)出這些和其他缺點。B、所給出的技術(shù)
這里給出了用于跟蹤對于由存儲設(shè)備106的集合提供的存儲集合102的寫入202的狀態(tài)的技術(shù),其可以允許按照容錯、高性能并且低成本的方式進行快速的清潔處理。根據(jù)這些技術(shù),可以將存儲集合102分配成具有特定區(qū)段尺寸的各個區(qū)段(例如一千兆字節(jié)的區(qū)段),并且可以生成區(qū)段描述符以便記錄對于每一個區(qū)段內(nèi)的一個或更多位置108的寫入110的待定性。區(qū)段描述符可以被存儲在與所述區(qū)段所處的相同的存儲設(shè)備106上,或者被存儲在存儲集合102的不同存儲設(shè)備106上。當(dāng)接收到針對特定位置108的寫入100請求時,這些技術(shù)的一個實施例可以首先識別出包括所述位置108的區(qū)段,并且可以隨后確定包括位置108的區(qū)段的區(qū)段指示符是否已經(jīng)被標(biāo)記為骯臟。如果不是,則所述實施例可以首先更新區(qū)段指示符以便把所述區(qū)段標(biāo)記為骯臟;但是如果是的話,則所述實施例可以繼續(xù)寫入110而無須更新區(qū)段指示符。在寫入110完成之后,所述實施例可以把所述區(qū)段的區(qū)段指示符標(biāo)記為清潔。應(yīng)當(dāng)提到的是,所述實施例可以被配置成并不迅速將區(qū)段更新為清潔,而是在這樣做之前等待一個簡短的時間段,以防在第一項寫入110之后迅速跟隨有針對相同區(qū)段的寫入110的后續(xù)請求(其是對相同位置108的覆寫,或者是對順次跟隨的數(shù)據(jù)集合104或者另外的附近數(shù)據(jù)集合104的寫入110)。這一延遲可以避免在把區(qū)段指示符重寫為“清潔”之后迅速又把區(qū)段指示符重寫為“骯臟”,并因此可以節(jié)省對于存儲設(shè)備106的訪問從而改進存儲設(shè)備106的性能和使用壽命。圖4給出了其特征在于根據(jù)這里給出的技術(shù)跟蹤對于由兩個存儲設(shè)備106提供的 存儲集合102的待定寫入110的一種示例性情形的圖示,其中各個存儲設(shè)備106進行協(xié)調(diào)以便對存儲集合102的完全相同的拷貝進行存儲(例如根據(jù)RAID I方案對存儲集合102進行鏡像)。在該示例性情形400中,并且根據(jù)這里給出的技術(shù),把由各個存儲設(shè)備106提供的存儲集合102分配成具有區(qū)段尺寸的各個區(qū)段402 (例如一千兆字節(jié)區(qū)段)。每一個區(qū)段402包括存儲在存儲集合102內(nèi)的位置108的一個集合(例如地址的范圍)內(nèi)的數(shù)據(jù)集合104。在每一個存儲設(shè)備106上可以生成區(qū)段描述符404,其中可以根據(jù)對包括區(qū)段402的各個數(shù)據(jù)集合104所施行的寫入110的待定或已完成狀態(tài)而把區(qū)段402標(biāo)記為“骯臟”或“清潔”。舉例來說,在第一時間點408,請求對存儲集合102中的第一位置108進行第一項寫入110,并且存儲設(shè)備106通過首先識別出包括第一位置108的區(qū)段402而開始施行第一項寫入110,并且隨后在區(qū)段描述符404中將所述區(qū)段402標(biāo)記406為骯臟。在把區(qū)段402標(biāo)記為骯臟之后,存儲設(shè)備106隨后發(fā)起對于存儲集合102中的位置108的第一項寫入110。在第二時間點410,第一存儲設(shè)備106可能已經(jīng)完成了第一項寫入110,但是可能還沒有在區(qū)段描述符404中把區(qū)段402標(biāo)記為清潔。但是由于各個存儲設(shè)備106的不完美同步,在第二時間點410,第二存儲設(shè)備106可能還沒有完成第一項寫入110。正如在圖4的示例性情形400中進一步示出的那樣,在第三時間點412,可以請求對存儲集合102中的不同位置108的第二項寫入110。存儲設(shè)備106因此識別出與第二項寫入110的位置106相關(guān)聯(lián)的區(qū)段402,并且確定該位置106也處于第一區(qū)段402內(nèi)。此夕卜,由于第一區(qū)段402已經(jīng)在區(qū)段描述符404中被標(biāo)記為骯臟,因此存儲設(shè)備106不再冗余地更新區(qū)段描述符404。存儲設(shè)備106隨后開始施行寫入110,并且第二存儲設(shè)備106最終完成寫入110并且隨后(可能在簡短延遲之后,其間沒有請求對于第一區(qū)段402的另外的寫入110)更新區(qū)段描述符404以便把第一區(qū)段402標(biāo)記為清潔。但是由第一存儲設(shè)備106施行的寫入110被故障118 (例如暫時斷開、軟件崩潰或電力故障)中斷。在第四時間點414,第一存儲設(shè)備106再次變?yōu)榭稍L問,并且發(fā)起清潔416第一存儲設(shè)備106的任務(wù)以便確保校正被故障118中斷的寫入110,如果沒有校正的話則可能在存儲集合102中存在潛在地災(zāi)難性不一致122 (例如存儲在存儲設(shè)備106上的存儲集合102的完全相同的拷貝出現(xiàn)偏差)。但是取代把所有數(shù)據(jù)集合104與第二存儲設(shè)備106的相應(yīng)數(shù)據(jù)集合104進行比較,所述清潔416可以利用區(qū)段描述符404并且可以只清潔被標(biāo)記為骯臟的區(qū)段402。因此,在第四時間點414,由于只有第一區(qū)段402在第一存儲設(shè)備106的區(qū)段描述符404中被標(biāo)記為骯臟,因此所述清潔416可以把第一區(qū)段402的數(shù)據(jù)集合102與第二存儲設(shè)備106的相應(yīng)數(shù)據(jù)集合416進行比較,并且在發(fā)現(xiàn)不一致之后,可以把所述數(shù)據(jù)集合104拷貝在第一存儲設(shè)備106的錯誤數(shù)據(jù)集合104之上。按照這種方式,這里給出的技術(shù)(在圖4的示例性情形400中描繪了其中一個例子)可以允許在故障118之后清潔416存儲設(shè)備106。此外,與其中包括圖3中所示的那些的其他技術(shù)相比,這些技術(shù)按照有利的方式實現(xiàn)了所述清潔416。作為第一個示例性實例,對于第一存儲設(shè)備106的清潔416被限制到存儲在區(qū)段402的子集中的數(shù)據(jù)集合104,在所述區(qū)段的子集中,在崩潰118發(fā)生時最近發(fā)生了至少一項寫入110 ;例如由于第二區(qū)段402已經(jīng)在一段時間內(nèi)沒有經(jīng)歷過寫入110,因此第二區(qū)段402沒有被包括在所述清潔416中。作為第二個示例性優(yōu)點,通過對于包括區(qū)段402的集合的各個區(qū)段406的骯臟和清潔信息的標(biāo)記406,以及在寫入110之后推遲把這樣的區(qū)段402標(biāo)記為清潔,可以顯著減輕由于跟蹤骯臟區(qū)段而導(dǎo)致的性能損失。舉例來說,通過在第一項寫入110之后的簡短時間段內(nèi)把第一區(qū)段402保持標(biāo)記406為骯臟,存儲設(shè)備106能夠省略把區(qū)段402標(biāo)記406為骯臟,而 僅僅在接收到針對相同區(qū)段402內(nèi)的另一個位置106的第二項寫入110之后又將其標(biāo)記為骯臟,從而把每一個存儲設(shè)備106對區(qū)段描述符404的訪問從三次減少到一次。如果是對于每個位置108跟蹤骯臟區(qū)段信息或者如果存儲設(shè)備106在每一項寫入110之后迅速更新區(qū)段描述符404 (如圖3的第一種示例性技術(shù)300中所示),則可能無法實現(xiàn)上述效率提高。作為第三個示例性優(yōu)點,通過對于各個區(qū)段406而不是對于單個位置108存儲區(qū)段描述符404,不會顯著減少存儲設(shè)備106的可用容量(這與圖3的第一種示例性技術(shù)300不同,在該技術(shù)中,存儲設(shè)備106的50%總?cè)萘勘挥脕砀櫩捎萌萘康捏a臟或清潔狀態(tài))。作為第四個示例性優(yōu)點,對于骯臟區(qū)段的跟蹤是在無需附加硬件的情況下實現(xiàn)的,并從而與圖3的第二種示例性技術(shù)304相比降低了成本、復(fù)雜度、功率消耗,并且降低了跟蹤技術(shù)的失敗幾率。通過根據(jù)這里給出的技術(shù)跟蹤對應(yīng)于提供存儲集合102的各個存儲設(shè)備106的骯臟區(qū)段信息,可以實現(xiàn)這些和其他示例性優(yōu)點。C、示例性實施例
圖5給出了這些技術(shù)的第一示例性實施例的圖示,其被描繪為把待定寫入記錄到存儲集合104的一種示例性方法500。示例性方法500可以例如被實施為存儲在設(shè)備(例如存儲器電路、硬盤驅(qū)動器的盤片、固態(tài)存儲器組件或者磁盤或光盤)的存儲器組件中的指令集合,當(dāng)由設(shè)備的處理器執(zhí)行時,所述指令集合使得所述設(shè)備施行這里給出的技術(shù)。示例性方法500開始于502,并且涉及在處理器上執(zhí)行504所述指令。具體來說,所述指令被配置成在至少一個存儲設(shè)備106上生成506區(qū)段描述符404,其把存儲在存儲設(shè)備106上的存儲集合102根據(jù)區(qū)段尺寸分配成至少兩個區(qū)段402。所述指令還被配置成在接收508到將要存儲在存儲集合102中的位置108處的數(shù)據(jù)集合104之后,識別出510存儲集合102內(nèi)的包括所述數(shù)據(jù)集合102的位置108的區(qū)段402 ;在區(qū)段描述符404中把所述區(qū)段402標(biāo)記為512骯臟;以及發(fā)起514把數(shù)據(jù)集合104存儲在存儲集合102中的位置108處。所述指令還被配置成在把數(shù)據(jù)集合104存儲于存儲集合102中的位置108處之后,在區(qū)段描述符404中把所述區(qū)段402標(biāo)記為516清潔。按照這種方式,所述指令實現(xiàn)根據(jù)這里給出的技術(shù)記錄在存儲集合102內(nèi)待定的寫入110,并且示例性方法500結(jié)束于518。圖6給出了這些技術(shù)的第二示例性實施例的圖示,其被描繪為清潔416由具有處理器的計算機可訪問的至少一個存儲設(shè)備106存儲的存儲集合102的一種示例性方法600。示例性方法600可以例如被實施為存儲在設(shè)備(例如存儲器電路、硬盤驅(qū)動器的盤片、固態(tài)存儲器組件或者磁盤或光盤)的存儲器組件中的指令集合,當(dāng)由設(shè)備的處理器執(zhí)行時,所述指令集合使得所述設(shè)備施行這里給出的技術(shù)。示例性方法600開始于602,并且涉及在處理器上執(zhí)行604所述指令。具體來說,所述指令被配置成從至少一個存儲設(shè)備106獲取606區(qū)段描述符404,其把存儲在存儲設(shè)備106上的存儲集合102根據(jù)區(qū)段尺寸分配成至少兩個區(qū)段402。所述指令還被配置成對于在區(qū)段描述符404中標(biāo)記為骯臟的對應(yīng)的608區(qū)段402發(fā)起610清潔416區(qū)段402內(nèi)的數(shù)據(jù)集合104 ;并且在完成對于區(qū)段402內(nèi)的數(shù)據(jù)集合104的清潔之后,在區(qū)段描述符404中把區(qū)段402標(biāo)記為612清潔。按照這種方式,所述指令通過根據(jù)這里給出的技術(shù)校正由于故障中斷的寫入110導(dǎo)致的不一致122而實現(xiàn)對于存儲集合102的清潔,并且示例性方法600結(jié)束于518。
圖7給出了這些技術(shù)的第三示例性實施例,其被圖示為包括處理器可執(zhí)行指令702的示例性計算機可讀介質(zhì)700,所述處理器可執(zhí)行指令702被配置成應(yīng)用這里給出的技術(shù)。這樣的計算機可讀介質(zhì)例如可以包括涉及有形設(shè)備的計算機可讀存儲介質(zhì),比如存儲器半導(dǎo)體(例如利用靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)和/或同步動態(tài)隨機存取存儲器(SDRAM)技術(shù)的半導(dǎo)體)、硬盤驅(qū)動器的盤片、閃存設(shè)備或者磁盤或光盤(比如⑶-R、DVD-R或軟盤),其編碼計算機可讀指令集合,當(dāng)由設(shè)備710的處理器712執(zhí)行時,所述計算機可讀指令集合使得設(shè)備710實施這里給出的技術(shù)。這樣的計算機可讀介質(zhì)還可以包括(作為與計算機可讀存儲介質(zhì)不同的一類技術(shù)的)各種類型的通信介質(zhì),比如可以通過各種物理現(xiàn)象傳播的信號(例如電磁信號、聲波信號或光學(xué)信號)以及在各種有線情形(例如通過以太網(wǎng)或光纖線纜)和/或無線情形(例如WiFi之類的無線局域網(wǎng)(WLAN)、Bluetooth之類的個人區(qū)域網(wǎng)(PAN)或者蜂窩或無線電網(wǎng)絡(luò))中傳播的信號,并且其編碼計算機可讀指令集合,當(dāng)由設(shè)備的處理器執(zhí)行時,所述計算機可讀指令集合使得所述設(shè)備實施這里給出的技術(shù)。在一個這樣的實施例中,處理器可執(zhí)行指令702可以被配置成施行一種記錄對于包括存儲集合102的各個存儲設(shè)備106的待定寫入110的方法,比如圖5的示例性方法500。在另一個這樣的實施例中,處理器可執(zhí)行指令702可以被配置成施行一種利用存儲在至少其中一個存儲設(shè)備106上的區(qū)段描述符404清潔包括存儲集合102的各個存儲設(shè)備106的方法,比如圖6的示例性方法600。本領(lǐng)域技術(shù)人員將會設(shè)想到被配置成根據(jù)這里給出的技術(shù)操作的許多此類計算機可讀介質(zhì)。D、變型
在許多方面可以設(shè)想到這里討論的技術(shù)的變型,并且其中一些變型關(guān)于這些和其他技術(shù)的其他變型可以給出附加的優(yōu)點和/或減少缺點。此外,一些變型可以被組合實施,并且通過協(xié)同的合作,一些組合可以給出附加的優(yōu)點和/或減少缺點。所述變型可以被合并在各個實施例中(例如圖5的示例性方法500和圖6的示例性方法600),以便為這樣的實施例賦予單獨的和/或協(xié)作的優(yōu)點。Dl、各種情形
在這些技術(shù)的各個實施例之間可能有所不同的第一方面涉及可以在其中利用這樣的技術(shù)的各種情形。作為該第一方面的第一種變型,這些技術(shù)可以與包括各種類型的數(shù)據(jù)集合104的許多類型的存儲集合102相結(jié)合地使用,其中包括存儲各種類型的二進制對象的二進制存儲系統(tǒng);存儲文件的文件系統(tǒng);存儲媒體對象的媒體庫;存儲許多類型的對象的對象系統(tǒng);存儲記錄的數(shù)據(jù)庫;以及存儲電子郵件消息的電子郵件系統(tǒng)。作為該第一方面的第二種變型,這些技術(shù)可以與許多類型的存儲設(shè)備106相結(jié)合地使用,其中包括硬盤驅(qū)動器、固態(tài)存儲設(shè)備、非易失性存儲器電路、基于帶的存儲設(shè)備以及磁盤和光盤。這樣的存儲設(shè)備106還可以直接連接到實施這些技術(shù)的設(shè)備710(比如計算機);可以通過有線或無線局域網(wǎng)(例如802. 11 WiFi網(wǎng)絡(luò)或ad-hoc連接,或者紅外連接)訪問;以及/或者可以通過有線或無線廣域網(wǎng)(例如蜂窩網(wǎng)絡(luò)或因特網(wǎng))訪問。此外,這些技術(shù)可以與以下存儲設(shè)備106中的兩個或更多個一起使用獨立地操作的存儲設(shè)備(例如可以通過軟件處理獨立訪問的存儲設(shè)備106);松散地互操作的存儲設(shè)備(例如獨立操作但是相互通知并且可以與共享存儲集合102的其他存儲設(shè)備106進行通信的存儲設(shè)備106);或者緊密地互操作的存儲設(shè)備(例如將幾個存儲設(shè)備106作為存儲系統(tǒng)的各個組件進行管理的廉價盤冗余陣列(RAID)控制器)。作為該第一方面的第四種變型,這些技術(shù)的某些部分或全部可以被實施在計算環(huán)境內(nèi)的一個或更多組件中,比如存儲在可以訪問存儲設(shè)備106的計算機或設(shè)備的易失性或非 易失性存儲器中的軟件指令集合(例如操作系統(tǒng)處理或硬件驅(qū)動程序);由被配置成與存儲設(shè)備106接口的存儲系統(tǒng)實施(例如RAID控制器);或者被實施在存儲集合102的各個對應(yīng)的存儲設(shè)備106中。作為該第一方面的第五種變型,可以使用許多類型的清潔技術(shù)來清潔區(qū)段102內(nèi)的數(shù)據(jù)集合104。作為第一個例子并且如圖I的示例性情形100中所示,存儲集合102可以(在相同的存儲設(shè)備106和/或不同的存儲設(shè)備106上)存儲數(shù)據(jù)集合104的完全相同的拷貝。在這種變型中,鏡像清潔技術(shù)可以被用來清潔數(shù)據(jù)集合104的拷貝,這是通過將其與數(shù)據(jù)集合104的另一份拷貝進行比較以便檢測及校正不一致122而實現(xiàn)的(例如對于與存儲在存儲集合102的第二區(qū)段402中的鏡像數(shù)據(jù)集合相對應(yīng)的區(qū)段402的各個對應(yīng)的數(shù)據(jù)集合104,把該數(shù)據(jù)集合104與鏡像數(shù)據(jù)集合同步)。作為第二個例子并且如圖2的示例性情形200中所示,存儲集合102可以(在相同的存儲設(shè)備106和/或不同的存儲設(shè)備106上)存儲對應(yīng)的數(shù)據(jù)集合104的驗證器202 (比如校驗和或散列碼),可以將其與數(shù)據(jù)集合104的內(nèi)容(并且可能與存儲集合102中的其他數(shù)據(jù)集合104)進行比較以便檢測不一致122。許多類型的驗證器都可以被包括在這樣的情形中。舉例來說,可以對于數(shù)據(jù)集合104高效地計算簡單的驗證器202 (比如奇偶校驗位),并且可以導(dǎo)致快速地檢測數(shù)據(jù)集合104中的不一致122的存在或缺失。可替換地,可以利用復(fù)雜的驗證器202從而給出附加的特征,比如更高的可靠性、更多細節(jié)(例如表明數(shù)據(jù)集合104的不一致部分)和/或糾錯能力。在這些變型中,可以使用驗證器清潔技術(shù)來清潔數(shù)據(jù)集合104,這是通過對數(shù)據(jù)集合104的驗證器進行驗證以便識別并且可能校正不一致122而實現(xiàn)的。作為第三個例子,可以簡單地通過檢查內(nèi)容來清潔數(shù)據(jù)集合104,比如早前不存在的數(shù)據(jù)集合104的破壞。當(dāng)檢測到不一致122時,可以利用重建技術(shù)來修復(fù)遭到破壞的數(shù)據(jù)和/或挽救數(shù)據(jù)集合104中的剩余數(shù)據(jù)。本領(lǐng)域技術(shù)人員可以識別出可以在其中使用這里給出的技術(shù)的情形的許多類型和變型。D2、區(qū)段描述符結(jié)構(gòu)變型
在這些技術(shù)的各個實施例之間可能有所不同的第二方面涉及區(qū)段描述符404的性質(zhì)。作為該第二方面的第一種變型,可以按照許多方式把存儲集合102分配成在區(qū)段描述符404內(nèi)標(biāo)識出的各個區(qū)段402。作為該第一種變型的第一個例子,通過選擇區(qū)段尺寸可以影響這些技術(shù)的許多方面。舉例來說,(特別鑒于圖3中所示的示例性技術(shù))可以認識到,跟蹤存儲集合102中的每一個位置108的骯臟或清潔狀態(tài)可能導(dǎo)致存儲集合102的容量的大量損失(可能多達50%),并且實際上可能不會顯著改進清潔處理的持續(xù)時間,這是因為掃描整個存儲集合102以讀取對應(yīng)于每一個比特的骯臟和清潔比特的持續(xù)時間可能與掃描整個存儲集合102以檢測不一致122的持續(xù)時間一樣長。還可以認識到,對于存儲集合102的非常大的部分跟蹤清潔或骯臟狀態(tài)(比如對于每一個卷、每一個分區(qū)或者每一個存儲設(shè)備106存儲單個“清潔”或“骯臟”標(biāo)記406)可能不會令人滿意地減輕所述恢復(fù)的高度長時間的性質(zhì),這是因為對于較大的卷或存儲設(shè)備106中的單個位置206的寫入可能導(dǎo)致清潔416整個卷或存儲設(shè)備106。鑒于這些考慮因素可以認識到,對于區(qū)段尺寸的選擇可能會顯著地影響這里給出的技術(shù)的性能。但是對于區(qū)段尺寸可能存在一個可接受選項范圍,其中的每一種選項都可以給出一些折中。舉例來說,選擇較大的區(qū)段尺寸可以允許在更加粗糙的粒度水平下跟蹤“骯臟”和“清潔”區(qū)段,從而減少了用于跟蹤待定寫入110的存儲集合102的容量消耗,并且還降低了更新區(qū)段描述符404以便把區(qū)段402標(biāo)記為清潔或骯臟的頻率,但 是也可能在故障118之后引起更長的清潔416,這是因為把區(qū)段402標(biāo)記為406骯臟會導(dǎo)致清潔416更大的區(qū)段402。相反,選擇較小的區(qū)段尺寸可以導(dǎo)致以更加精細的粒度跟蹤待定寫入110,從而由于對將要清潔的數(shù)據(jù)集合104的更加受限和精確的指定而允許在故障118之后進行相對快速的清潔416,但是可能導(dǎo)致存儲集合102的更大容量消耗(這是因為區(qū)段描述符404包含對應(yīng)于更多區(qū)段402的信息)以及/或者存儲集合102的例行操作中的更嚴(yán)重的性能懲罰(這是因為針對各個位置108的寫入110的集合很可能與分別涵蓋存儲集合的更小部分的更多區(qū)段402相關(guān)聯(lián))。鑒于這些考慮因素,可以使用許多技術(shù)來選擇或指定存儲集合102的各個區(qū)段402的(多個)區(qū)段尺寸。舉例來說,可以對于特定存儲集合102或存儲設(shè)備106固定地定義區(qū)段尺寸。還可以對于不同的存儲設(shè)備106選擇不同的區(qū)段尺寸(例如對于用在性能特性不會顯著影響計算環(huán)境的情況(比如歸檔)中的存儲設(shè)備106,可以使用更加顯著地降低性能但是提供從故障118的更快清潔416和恢復(fù)的較小區(qū)段尺寸),并且/或者可以對于不同的存儲集合102選擇不同的區(qū)段尺寸(例如可以利用較小的區(qū)段尺寸來跟蹤可訪問性對其具有高價值的數(shù)據(jù),從而允許從故障118的更快清潔416和恢復(fù)),并且甚至可以對于同一數(shù)據(jù)集合102中的不同區(qū)段402使用不同的區(qū)段尺寸。還可以基于存儲設(shè)備106和/或存儲集合102的性能特性以及/或者基于用戶優(yōu)選項來調(diào)節(jié)區(qū)段尺寸。可替換地或附加地,可以允許用戶選擇區(qū)段尺寸;例如一個實施例可以為用戶給出針對區(qū)段尺寸的幾個選項,并且可以鑒于每一個區(qū)段尺寸預(yù)測在從故障118恢復(fù)的過程中所涉及的恢復(fù)時間。作為另一種替換方案,用戶可以指定最大可接受恢復(fù)時間段,并且這些技術(shù)的一個實施例可以選擇可能允許在所述最大可接受恢復(fù)時間段內(nèi)從故障118恢復(fù)的區(qū)段尺寸。作為該第二方面的第二種變型,可以按照許多方式構(gòu)造區(qū)段描述符404,比如構(gòu)造成數(shù)組、鏈表、表、數(shù)據(jù)庫或位圖。各種數(shù)據(jù)結(jié)構(gòu)可以給出特定的優(yōu)點。作為一個這樣的例子,對于包括利用具有單一維度(例如作為地址的單一數(shù)值序列)的尋址系統(tǒng)存儲的地址的存儲集合102,區(qū)段描述符404可以被實施為骯臟區(qū)段數(shù)組,其包括順序地對應(yīng)于存儲集合102的各個區(qū)段402的數(shù)組條目的集合,并且可以簡單地通過對所述骯臟區(qū)段數(shù)組的數(shù)組條目進行尋址來把區(qū)段402標(biāo)記為骯臟或清潔,從而實現(xiàn)了用以標(biāo)記406任何區(qū)段402的0(1)訪問時間??商鎿Q地,可以把區(qū)段描述符404實施為順序日志,其中每一次標(biāo)記406是在先前提交的標(biāo)記406之后順次寫入的,而不管所標(biāo)記的數(shù)據(jù)集合104在存儲集合102中的位置108如何。這樣的區(qū)段描述符404可能導(dǎo)致對于特定區(qū)段402的標(biāo)記406的較慢讀取訪問(這是因為識別出對應(yīng)于某一條目的當(dāng)前標(biāo)記406引起掃描日志的一大部分并且可能引起掃描整個日志以便找到條目),但是可以實現(xiàn)對于區(qū)段描述符404的順序?qū)懭氲牧硗獾男阅軆?yōu)點。此外,區(qū)段描述符404的內(nèi)容的語義可以按照不同方式包含信息。舉例來說,區(qū)段描述符404可以通過特別標(biāo)記406代表某一區(qū)段402的記錄或比特來把所述區(qū)段402標(biāo)記為“清潔”,或者可以通過逐出對應(yīng)于已被清潔的區(qū)段402的區(qū)段描述符404記錄來實現(xiàn)這一目的。這些變型代表關(guān)于在區(qū)段描述符404中不具有記錄的區(qū)段402已被標(biāo)記為清潔(可能最近被標(biāo)記)還是簡單地既沒有被標(biāo)記為骯臟也沒有被標(biāo)記為清潔(例如在很長一段時間內(nèi)都沒有被寫入104)的語義差異。作為該第二方面的第三種變型,區(qū)段描述符404可以通過多種方式表明區(qū)段402 在存儲集合102內(nèi)的位置108。圖8給出了一種示例性情形800的圖示,其特征在于用于指定存儲集合102內(nèi)的由對應(yīng)的區(qū)段402代表的各個位置106的一些不同技術(shù)。在該示例性情形800中,存儲設(shè)備106 (比如硬盤驅(qū)動器)被配置成存儲包括存儲集合102的至少一部分的數(shù)據(jù)。存儲設(shè)備106被配置成把數(shù)據(jù)存儲在對應(yīng)的物理地址802處,并且包含用以將所述地址翻譯成存儲介質(zhì)(例如盤片、扇區(qū)和軌道)上的物理位置的硬件。存儲在存儲設(shè)備106上的數(shù)據(jù)還可以根據(jù)標(biāo)準(zhǔn)化格式來存儲;例如存儲在物理介質(zhì)上的數(shù)據(jù)可以開始于分區(qū)表,其指定一個或更多分區(qū)804的位置和描述,其中每一個分區(qū)包括一個或更多邏輯卷806 (例如在計算機的操作環(huán)境中給出的驅(qū)動器)。存儲集合102可以被存儲在一個或更多邏輯卷806內(nèi),并且可以把各個數(shù)據(jù)集合104分派在邏輯卷806中或者分派在幾個邏輯卷806之上。相應(yīng)地,區(qū)段描述符404可以按照多種方式標(biāo)識出對應(yīng)于存儲集合102內(nèi)的各個位置108的各個區(qū)段402。舉例來說,區(qū)段描述符404可以利用物理區(qū)段參考方案,其標(biāo)識出對應(yīng)的區(qū)段402在存儲集合102的各個存儲設(shè)備106上的物理位置。作為第一個這樣的例子,區(qū)段描述符404可以被實施為第一區(qū)段表808,其包括表明每一個區(qū)段402所代表的存儲設(shè)備106的存儲介質(zhì)上的物理位置106的范圍的各條記錄。作為第二個這樣的例子,區(qū)段描述符404可以被實施為第二區(qū)段表810,其包括對于對應(yīng)的區(qū)段402表明每一個區(qū)段402在其中開始的分區(qū)804和分區(qū)804內(nèi)的偏移量的各條記錄。區(qū)段描述符404還可以存儲及表示一個或更多區(qū)段402的(多個)區(qū)段尺寸(例如作為區(qū)段記錄的一部分或者作為存儲集合102的單獨的描述符)。作為第三個例子,區(qū)段描述符404可以被實施為區(qū)段位圖812,其中可以把分區(qū)804分配成具有特定區(qū)段尺寸的一系列區(qū)段402,并且所述位圖可以存儲區(qū)段402的“骯臟”或“清潔”狀態(tài)的一比特指示符??商鎿Q地,區(qū)段描述符404可以利用邏輯區(qū)段參考方案,其標(biāo)識出對應(yīng)的區(qū)段402在存儲集合102中的邏輯數(shù)據(jù)設(shè)置內(nèi)的邏輯位置。作為一個這樣的例子,區(qū)段描述符404可以被實施為第三區(qū)段表814,其標(biāo)識出每一個區(qū)段402在該處開始的每一個邏輯卷806內(nèi)的邏輯位置??梢哉J識到,更加緊密地利用存儲設(shè)備106的存儲介質(zhì)上的物理位置106標(biāo)識的尋址技術(shù)對于存儲設(shè)備106可能涉及很少的計算但是對于在邏輯上訪問各個區(qū)段402的處理則可能涉及更多的計算,反之亦然。作為該第二方面的第四種變型,這些技術(shù)的實施例可以被配置成把區(qū)段描述符404存儲在存儲設(shè)備106上的不同位置處。作為該第四種變型的第一個例子,區(qū)段描述符404可以被存儲在存儲設(shè)備404上的特定位置處(例如對存儲集合102的各個數(shù)據(jù)集合104進行存儲的分區(qū)804的頂部,或者存儲數(shù)據(jù)集合104的分區(qū)804之外的已定義位置)。作為該第四種變型的第二個例子,區(qū)段描述符404可以被存儲在第一存儲設(shè)備106上,以便跟蹤對于第二存儲設(shè)備10的各個區(qū)段402的待定寫入110。作為該第二實例的第五種變型,這些技術(shù)的一個實施例可以被配置成對于存儲集合102存儲兩個或更多區(qū)段描述符404。作為該第五種變型的第一個例子,可以在相同的和/或不同的存儲設(shè)備106上存儲代表存儲集合102的區(qū)段402的相同集合的區(qū)段描述符404的兩份或更多份完全相同的拷貝。通過存儲完全相同的拷貝可以改進存儲集合102的容錯性(例如當(dāng)存儲設(shè)備106發(fā)生不可恢復(fù)的故障時,當(dāng)存儲設(shè)備106的存儲區(qū)段描述符404的一部分發(fā)生故障時,或者當(dāng)區(qū)段描述符404內(nèi)的數(shù)據(jù)被破壞時,比如在對區(qū)段描述符 404施行寫入110時發(fā)生故障118),可以通過使用區(qū)段描述符404的另一份拷貝來施行從故障118恢復(fù)。可以認識到,雖然區(qū)段描述符404的故障不太可能是災(zāi)難性的(這是因為可以作為備份措施對存儲集合102施行完全清潔416),但是存儲區(qū)段描述符404的第二份拷貝以便在第一份拷貝受到破壞或者不可用的情況下加速恢復(fù)的做法仍然可能是有利的。此夕卜,還可能有利的是把區(qū)段描述符404的完全相同的拷貝存儲在多個存儲設(shè)備106上,以及/或者存儲在同一存儲設(shè)備106的不同區(qū)域內(nèi)(例如當(dāng)存儲設(shè)備106的存儲區(qū)段描述符404的第一份拷貝的部分(比如文件系統(tǒng)的第一物理扇區(qū)或第一部分)受到損壞時,仍然可能獲取并使用存儲在存儲設(shè)備106的不同部分中的區(qū)段描述符404的第二份完全相同的拷貝)。作為該第五種變型的第二個例子,可以把對應(yīng)于區(qū)段402的特定集合的區(qū)段描述符404的多份拷貝存儲在一個或更多存儲設(shè)備106上,但是所述拷貝并不總是完全相同的,而是可以對各個區(qū)段描述符404進行順序地更新以便反映出存儲集合102在不同時間的清潔和骯臟狀態(tài)。例如如果在更新區(qū)段描述符404的拷貝時發(fā)生故障118從而將區(qū)段描述符404置于不一致或受破壞狀態(tài),則該順序更新可能是有利的,這是因為另一份拷貝可用于清潔416和恢復(fù)。作為對應(yīng)于該第二個例子的第一種情形,可以在存儲設(shè)備104上保留全部兩者代表區(qū)段402的相同集合的區(qū)段描述符404的兩份拷貝;但是為了更新區(qū)段描述符404,第一更新可以通過覆寫區(qū)段描述符404的一份拷貝而發(fā)生,并且隨后的更新可以通過覆寫區(qū)段描述符404的另一份拷貝而發(fā)生。此外,當(dāng)這些技術(shù)的一個實施例覆寫區(qū)段描述符404時,所述實施例還可以寫入對應(yīng)于所述區(qū)段描述符404的驗證器202 (例如校驗和)和序列指示符(例如遞增的整數(shù)或者覆寫時間)。在故障118發(fā)生后,所述實施例可以檢查所有可用的區(qū)段描述符404,并且可以選擇具有最高序列指示符(例如最高遞增整數(shù)或者最近寫入時間)并且同時根據(jù)其驗證器202是有效的區(qū)段描述符404以用于清潔??梢哉J識到,利用區(qū)段集合的略微陳舊的版本來施行清潔416可能不會導(dǎo)致對于具有不一致118的區(qū)段402的清潔失敗(例如假陰性),這是因為只有在區(qū)段402的標(biāo)記406以具有最高序列指示符和有效驗證器202的完全寫入的區(qū)段描述符404的形式被完全提交到存儲集合102之后才會開始對于區(qū)段402的寫入110,因此在寫入?yún)^(qū)段描述符406時發(fā)生的故障118不會導(dǎo)致記錄待定寫入110的失敗。相反,使用陳舊的區(qū)段描述符402則可能導(dǎo)致假陽性(例如在寫入?yún)^(qū)段描述符404的過程中發(fā)生的故障118可能導(dǎo)致錯失把先前是骯臟的區(qū)段404標(biāo)記404為清潔,并且所述區(qū)段404可能會由于在陳舊的區(qū)段描述符404中找到的標(biāo)記406而在恢復(fù)期間被錯誤地作為骯臟區(qū)段來對待),但是這一差錯僅僅會導(dǎo)致涉及清潔416已知是清潔的區(qū)段404的微小地延長的恢復(fù)。可替換地或附加地,可以在存儲集合102的每一個存儲設(shè)備106上冗余地存儲對應(yīng)于區(qū)段402的集合的區(qū)段描述符404的兩份或更多份拷貝。為了更新對應(yīng)于存儲集合102的區(qū)段描述符404,一個實施例可以在所有存儲設(shè)備106上并行地發(fā)起對于區(qū)段描述符404的覆寫。此外,每一個存儲設(shè)備106可以與區(qū)段描述符404 —起包括驗證器202和序列指示符,以防當(dāng)一個或更多存儲設(shè)備106正在更新區(qū)段描述符106時發(fā)生故障118。存儲集合102的一個或更多存儲設(shè)備106從故障118恢復(fù)可以涉及首先檢查所有可用的區(qū)段描述符106,以便在通過對應(yīng)的驗證器202驗證的所有拷貝當(dāng)中識別出具有最高序列指示符的拷貝。實際上可能有利的是把存儲集合102配置成在每一個存儲設(shè)備106上存儲區(qū)段描述符404的兩份拷貝;例如如果在更新逝直存儲設(shè)備106上的區(qū)段描述符404時發(fā)生故障 118,則可以使用任何存儲設(shè)備106上的略微陳舊的拷貝。可替換地,可能類似地有利的是并不同時更新所有的區(qū)段描述符404,而是對存儲在存儲設(shè)備106的第一子集上的拷貝施行區(qū)段描述符404的第一更新,并且對存儲在存儲設(shè)備106的第二子集上的拷貝施行區(qū)段描述符404的后繼更新。作為該第五種變型的第三個例子,存儲集合102可以包括兩個或更多區(qū)段描述符404,其分別記錄對于存儲集合102的不同區(qū)段402的更新。作為第一個這樣的例子,第一區(qū)段描述符404可以記錄對應(yīng)于存儲集合102的存儲在第一存儲設(shè)備104上的各個區(qū)段402的骯臟和清潔區(qū)段信息,并且第二區(qū)段描述符404可以記錄對應(yīng)于存儲集合102的存儲在第二存儲設(shè)備104上的各個區(qū)段402的骯臟和清潔區(qū)段信息。作為第二個這樣的例子,在把存儲集合102分配成各個區(qū)段402之后,這些技術(shù)的一個實施例可以生成兩個或更多區(qū)段描述符404,其分別存儲對應(yīng)于區(qū)段集合(其包括區(qū)段402的子集)的“骯臟”和“清潔”信息(而不管這些區(qū)段402在存儲集合102的各個存儲設(shè)備106當(dāng)中的物理位置如何),所述區(qū)段描述符404可以被生成并存儲在一個或更多存儲設(shè)備106上。可以例如根據(jù)對應(yīng)的數(shù)據(jù)集合104的特性來選擇各個區(qū)段402到區(qū)段集合中的分配(例如第一區(qū)段集合可以包括存儲更加有價值或敏感的數(shù)據(jù)的區(qū)段402,而第二區(qū)段集合則可以包括存儲價值較低的數(shù)據(jù)的區(qū)段402)??商鎿Q地或附加地,可以明確地(例如通過生成分別代表區(qū)段402的指定集合的兩個或更多獨立的區(qū)段描述符404)或者隱含地(例如通過把用于區(qū)段描述符404的存儲空間分布在兩個或更多空間分配上,比如兩個或更多存儲設(shè)備106)實現(xiàn)各個區(qū)段在兩個或更多區(qū)段描述符404上的這種分布。此外,在某些情形中,可能希望僅僅對于存儲集合102的區(qū)段402的子集跟蹤骯臟和清潔信息;例如區(qū)段402包括可丟棄的數(shù)據(jù),比如高速緩存或索引,如果其受到破壞的話可以從存儲集合102的其他數(shù)據(jù)重新生成,因此完全可以不進行跟蹤。作為該第二方面的第六種變型,可以按照與存儲集合102的同步技術(shù)兼容的方式存儲(多個)區(qū)段描述符404,這樣可以對于區(qū)段描述符404提供許多特征和優(yōu)點,比如通過訪問不同存儲設(shè)備106的區(qū)段描述符404的任何完全相同的拷貝的能力提高了性能,以及/或者與存儲集合102類似的容錯性(例如如果存儲集合102實施了容錯存儲技術(shù),比如在存儲設(shè)備容錯性內(nèi)從存儲設(shè)備106的故障恢復(fù)的能力,則可以利用相同的容錯存儲技術(shù)來存儲區(qū)段描述符404)??商鎿Q地,可以按照實現(xiàn)單獨的一組技術(shù)的方式存儲區(qū)段描述符404 ;例如可以把對應(yīng)的區(qū)段描述符404與該區(qū)段描述符404的區(qū)段描述符驗證器存儲在一起,并且當(dāng)區(qū)段402在區(qū)段描述符404中被標(biāo)記為“清潔”或“骯臟”時對其進行更新,并因此可以允許驗證區(qū)段描述符404的完整性。本領(lǐng)域技術(shù)人員能夠設(shè)想到可以根據(jù)這里給出的技術(shù)生成并利用的許多類型和格式的區(qū)段描述符404。D3、區(qū)段描述符使用變型
在這些技術(shù)的各個實施例之間可以有所不同的第三方面涉及使用區(qū)段描述符404把存儲集合102的各個區(qū)段402標(biāo)記為清潔或骯臟。作為該第三方面的第一種變型,對于區(qū)段描述符404的使用可以被設(shè)計成便于管理區(qū)段描述符404的容量。在某些類型的區(qū)段描述符404中,容量不可以隨著區(qū)段402被標(biāo)記而改變,比如圖8的示例性情形800中的區(qū)段位圖814 ;但是在其他情形中,對于區(qū)段402的標(biāo)記406可能會影響區(qū)段描述符404的容量,比如圖8的示例性情形800中所描繪的區(qū)段表。舉例來說,如果區(qū)段描述符404存儲對應(yīng)的區(qū)段402的記錄,則區(qū)段描述符404可以簡單地通過逐出所述記錄而把區(qū)段402標(biāo)記 為“清潔”??商鎿Q地,區(qū)段描述符404可以繼續(xù)存儲對應(yīng)于被標(biāo)記為“清潔”的區(qū)段402的記錄,并且可以在后來的某一時間逐出對應(yīng)于“清潔”區(qū)段402的記錄(例如在過去了指定時間段而沒有針對區(qū)段402的另一次寫入110之后,或者當(dāng)區(qū)段描述符404的容量被用盡時)。作為該第三方面的第二個例子,可以靜態(tài)地(例如固定尺寸的區(qū)段描述符404)或動態(tài)地(例如最初為其分派區(qū)段描述符空間的可重定尺寸的區(qū)段描述符404,但是當(dāng)用對應(yīng)于各個區(qū)段402的記錄填充區(qū)段描述符404并且一起用盡區(qū)段描述符404的容量時可以對其進行擴充)分派區(qū)段描述符404的容量。作為該第三方面的第二種變型,對于區(qū)段描述符404的使用可以被選擇成減少對于區(qū)段描述符404的寫入110的次數(shù)和頻率。舉例來說,由于區(qū)段描述符404被存儲在一個或更多存儲設(shè)備106的物理介質(zhì)上,因此更新區(qū)段描述符404可能除了對于數(shù)據(jù)集合104的位置108的查找和寫入110之外還增加對于區(qū)段描述符404的查找和寫入110。因此,如果區(qū)段描述符404被迅速并且自動更新以反映對于各個區(qū)段402的“骯臟”和“清潔”標(biāo)記406的改變,則將區(qū)段描述符404包括在內(nèi)的話可能顯著降低存儲設(shè)備106和存儲集合102的性能,并且可能把每一次訪問的成本增加到三倍。如果這些技術(shù)的一個實施例訪問區(qū)段描述符404以讀取對應(yīng)區(qū)段402的“清潔”和“骯臟”狀態(tài)(這例如是為了在把區(qū)段402標(biāo)記406為“骯臟”之前首先確定其是否被標(biāo)記為“清潔”),則可能發(fā)生進一步的性能降低。因此,可能希望減少對于區(qū)段描述符404的訪問。作為該第二種變型的第一個例子,可以認識到將區(qū)段402標(biāo)記406為“清潔”和“骯臟”的語義在某種程度上是不對稱的。舉例來說,推遲針對把區(qū)段描述符404標(biāo)記為“骯臟”的訪問可能是不可接受的,因為如果在所述推遲期間發(fā)生了故障則這樣的延遲可能會把區(qū)段402錯誤地列為清潔(從而給出了假陰性情況,其中由于故障118期間的不完整寫入110而可能是不一致的區(qū)段402被標(biāo)記為清潔,并因此在從故障118的恢復(fù)期間被從清潔416當(dāng)中排除)。但是在寫入完成之后推遲把區(qū)段402標(biāo)記406為“清潔”則可能是可以接受的。這種情形簡單地導(dǎo)致假陽性結(jié)果,其中在故障118發(fā)生時已知是清潔(例如沒有待定寫入110)的區(qū)段402在恢復(fù)期間被包括在清潔416當(dāng)中——但是這一掃描可能僅僅微小地增加清潔416的持續(xù)時間(特別在區(qū)段尺寸較小的情況下),并且不會損害存儲集合102的完整性。此外,在寫入110完成之后迅速將區(qū)段402標(biāo)記為“清潔”的一個實施例可能不久之后就接收到針對同一區(qū)段402中的數(shù)據(jù)集合104進行寫入110的另一項請求(例如順次跟隨在后的數(shù)據(jù)集合104或者對同一數(shù)據(jù)集合104的覆寫),并且可能必須將該區(qū)段402重新標(biāo)記為“骯臟”。通過在簡短的時間段內(nèi)推遲把區(qū)段402標(biāo)記406為“清潔”可以避免每一次都涉及對區(qū)段描述符404的訪問的全部兩次標(biāo)記406,而即將發(fā)生對于區(qū)段402的第二項寫入110的可能性可能會升高。鑒于這些考慮因素,這些技術(shù)的一個實施例可以被配置成在對于存儲在區(qū)段402中的數(shù)據(jù)集合104的寫入110完成之后,推遲把區(qū)段402標(biāo)記406為“清潔”??梢园凑斩喾N方式實現(xiàn)把“清潔”標(biāo)記406推遲提交到區(qū)段描述符404的實施方式。作為第一個這樣的例子,可以通過為易失性存儲器提供寫入緩沖區(qū)來實施該推遲,其只存儲“清潔”標(biāo)記406并且(周期性地或者在收到請求時)將所有這樣的寫入作為一個批量提交。舉例來說,所述實施例可以被配置成在完成把數(shù)據(jù)集合106存儲在區(qū)段402內(nèi)的位置108處之后,將該區(qū)段402標(biāo)識為清潔;并且可以在接收到針對在區(qū)段描述符404中把已清潔區(qū)段402標(biāo)記為 清潔的請求之后,在存儲設(shè)備106上的區(qū)段描述符404中把已清潔區(qū)段402標(biāo)記為清潔。該請求可以例如包括處理(其中包括設(shè)備的操作系統(tǒng))針對刷新標(biāo)記406的具體請求,或者可以通過多種標(biāo)準(zhǔn)觸發(fā),比如已清潔持續(xù)時間標(biāo)準(zhǔn)(例如周期性地提交各個區(qū)段402的標(biāo)記406)或者涉及區(qū)段描述符404的骯臟區(qū)段容量的區(qū)段描述符容量標(biāo)準(zhǔn)(例如當(dāng)區(qū)段描述符404達到特定容量時提交各個區(qū)段402的標(biāo)記406,比如指定數(shù)目的“清潔”標(biāo)記406或者區(qū)段描述符404的可用總?cè)萘康拈撝担淇梢蕴崾局鸪觥扒鍧崱庇涗?06)。作為第二個這樣的例子,所述推遲可以涉及將“清潔”標(biāo)記406保持簡短的持續(xù)時間,并且只有在簡短的持續(xù)時間內(nèi)沒有請求對于同一區(qū)段402的后續(xù)寫入110之后才把所述“清潔”標(biāo)記406提交到區(qū)段描述符404。因此,一個實施例可以在接收到針對區(qū)段402中的位置108進行寫入110的請求之后首先確定該區(qū)段402是否已經(jīng)在區(qū)段描述符404中被標(biāo)記為清潔,并且隨后只有在確定該區(qū)段492當(dāng)前在區(qū)段描述符404中被標(biāo)記為清潔的情況下才將該區(qū)段402標(biāo)記為骯臟。作為該第二種變型的第三個例子,這些技術(shù)的一個實施例可以通過實施區(qū)段描述符404的易失性存儲器表示來減少對于區(qū)段描述符404的訪問次數(shù)。舉例來說,除了把對應(yīng)的區(qū)段402的標(biāo)記406存儲在存儲設(shè)備106的物理介質(zhì)上之外,操作在設(shè)備上的這些技術(shù)的一個實施例還可以把所述標(biāo)記406存儲在所述設(shè)備的易失性存儲器中。使用該表示可以促進推遲寫入“清潔”標(biāo)記406的各個批量,并且促進確定要被標(biāo)記為“清潔”的區(qū)段406當(dāng)前在介質(zhì)上區(qū)段描述符404中被標(biāo)記為“清潔”還是“骯臟”。因此,所述表示可以表明,除了在存儲設(shè)備106上的區(qū)段描述符404中和在易失性存儲器表示中被標(biāo)記為清潔的區(qū)段402以及在存儲設(shè)備106上的區(qū)段描述符404中和在易失性存儲器表示中被標(biāo)記為骯臟的區(qū)段402之外,一些區(qū)段402可能在區(qū)段描述符404中被標(biāo)記為骯臟但是可能在易失性存儲器表示中被(暫時)標(biāo)記為清潔,并且這樣的清潔標(biāo)記406可以在后來被提交到介質(zhì)上區(qū)段描述符404。圖9給出了一種示例性情形900的圖示,其特征在于實施并使用區(qū)段描述符404的易失性存儲器表示902。在該示例性情形900中,兩個存儲設(shè)備106被配置成通過對存儲集合102的各個數(shù)據(jù)集合104的完全相同的拷貝進行存儲來對存儲集合102進行鏡像(例如按照RAID I方案的方式),并且為了克服由于各個存儲設(shè)備106的不完美同步而導(dǎo)致的潛在問題,可以在存儲設(shè)備902 (例如對存儲集合102進行存儲的其中一個或全部兩個存儲設(shè)備106,以及/或者另一個存儲設(shè)備106)上生成區(qū)段描述符404,并且根據(jù)這里給出的技術(shù)利用所述區(qū)段描述符404來跟蹤對于存儲集合102的各個區(qū)段402的待定寫入110。但是此外還可以在易失性存儲器904中生成區(qū)段描述符404的表示906,其可以與存儲在存儲設(shè)備902上的區(qū)段描述符404互操作。舉例來說,在第一時間點908,可以令針對分配在存儲集合102的第二和第四區(qū)段402內(nèi)的數(shù)據(jù)集合104的寫入110待定。在接收到針對寫入110的請求之后,這些技術(shù)的一個實施例可以在存儲在各個存儲設(shè)備902上的區(qū)段描述符404中以及在易失性存儲器904內(nèi)的表示906中把所述區(qū)段402標(biāo)記為骯臟,并且還可以提示將所述區(qū)段402標(biāo)記為骯臟。但是在第二時間點910,當(dāng)針對第四區(qū)段402的寫入110在全部兩個存儲設(shè)備104上都完成時,第四區(qū)段402可能在易失性存儲器904內(nèi)的表示906中被標(biāo)記為清潔,但是可能在存儲設(shè)備902上的區(qū)段描述符404中還沒有被標(biāo)記為清潔。類似地,在第三時間點912,針對第二區(qū)段402的寫入110已經(jīng)在全部兩個存儲設(shè)備104上都完成,并且第二區(qū)段402可能在易失性存儲器904內(nèi)的表示906中被標(biāo)記為清潔, 但是直到第四時間點914才在存儲設(shè)備902上的區(qū)段描述符404中被標(biāo)記為清潔,此時全部兩個區(qū)段402可以在存儲設(shè)備902上的區(qū)段描述符404中一起被標(biāo)記為清潔。對于易失性存儲器904中的表示906的這種使用可以給出幾個性能改進(例如與訪問存儲在存儲設(shè)備902上的區(qū)段描述符404的確定相比,其允許更加快速地確定哪些區(qū)段402被標(biāo)記為清潔或骯臟;允許把清潔標(biāo)記406批量提交到存儲在存儲設(shè)備902上的區(qū)段描述符404 ;以及減少對于存儲設(shè)備902的訪問次數(shù),比如如果在第三時間點912接收到針對第二區(qū)段420的附加寫入110,則可以在易失性存儲器904內(nèi)的表示906中將該區(qū)段402簡單地標(biāo)記為骯臟,而不是在存儲于存儲設(shè)備902上的區(qū)段描述符404中將區(qū)段402標(biāo)記406為清潔并且隨后再次標(biāo)記為骯臟)。圖10給出了可以由這些技術(shù)的一個實施例利用來按照確定性方式更新區(qū)段描述符404的示例性狀態(tài)圖1000的圖示。最初,這些技術(shù)的一個實施例可以處于清潔狀態(tài)1002,其中在區(qū)段描述符404中將清潔區(qū)段402標(biāo)記為清潔,直到接收到針對在該區(qū)段402內(nèi)的位置108處施行對于數(shù)據(jù)集合102的寫入110的請求為止,并且這些技術(shù)的一個實施例可以在把該區(qū)段402標(biāo)記406為骯臟的同時(例如在對存儲于存儲設(shè)備106上的區(qū)段描述符404進行寫入的同時)過渡到標(biāo)記狀態(tài)1004。當(dāng)標(biāo)記406完成時,所述實施例可以過渡到骯臟狀態(tài)1004,其中所述區(qū)段402已被標(biāo)記為骯臟,并且針對該區(qū)段402內(nèi)的附加位置進行寫入110的另外的請求可以導(dǎo)致所述實施例保留在該骯臟狀態(tài)1004。當(dāng)接收到刷新骯臟區(qū)段402的請求時,關(guān)于存儲設(shè)備106是否準(zhǔn)備好進行刷新做出確定(例如如果存儲設(shè)備106當(dāng)前正在施行存儲集合的同步或者如果存儲設(shè)備106暫時不可訪問,則針對刷新骯臟寫入的請求被保持,直到存儲設(shè)備106準(zhǔn)備好為止)。如果存儲設(shè)備106準(zhǔn)備好進行刷新,則所述實施例可以在開始刷新操作的同時進入刷新狀態(tài)1008。如果刷新操作在沒有接收到針對區(qū)段104進行寫入110的另一項請求的情況下完成,則所述實施例可以進入已標(biāo)記為清潔狀態(tài)1010,其中區(qū)段102已被刷新(例如針對區(qū)段402的寫入110已經(jīng)完成),但是該區(qū)段402在存儲設(shè)備106上的區(qū)段描述符404中仍然被標(biāo)記為骯臟(但是在設(shè)備的存儲器904內(nèi)的易失性存儲器表示906中可能被標(biāo)記為清潔)。最后,當(dāng)接收到在區(qū)段描述符404中把已清潔區(qū)段402標(biāo)記為清潔的請求時,所述實施例可以開始這一標(biāo)記406,并且在完成該標(biāo)記406之后可以返回清潔狀態(tài)1002。但是如果在刷新狀態(tài)1008或已標(biāo)記為清潔狀態(tài)1010期間接收到針對區(qū)段402進行寫入110的任何請求,則所述實施例可以返回骯臟狀態(tài)1006。按照這種方式,這些技術(shù)的一個實施例可以按照分狀態(tài)(stateful)、確定性并且相對簡單的方式更新區(qū)段描述符404。本領(lǐng)域技術(shù)人員在對于區(qū)段描述符402的更新方面可以設(shè)想到與這里給出的技術(shù)相容的許多變型。D4、恢復(fù)變型
在這些技術(shù)的各個實施例之間可能有所不同的第四方面涉及在發(fā)生故障118時使用區(qū)段描述符404來施行存儲集合102的恢復(fù)(包括清潔416)的方式。作為第一種變型,所 述恢復(fù)可以涉及用于清潔416存儲集合102的許多類型的技術(shù)以便檢測并去除由于故障118導(dǎo)致的存儲集合102中的不一致122。作為第一個例子,對于被存儲為預(yù)期完全相同的兩份或更多份拷貝的存儲集合102的數(shù)據(jù)集合104,清潔416可以涉及把各份拷貝進行比較以便檢測不一致122 (例如對于實際內(nèi)容的逐比特比較;內(nèi)容的邏輯比較,比如即使在無實質(zhì)結(jié)構(gòu)差異的情況下也檢測出各個數(shù)據(jù)集合104之間的等效,比如包括相同的文件集合但是利用不同的逐比特結(jié)構(gòu)表示文件系統(tǒng)的兩個文件系統(tǒng);或者比較各個數(shù)據(jù)集合104的印記,比如比較針對每一份拷貝的內(nèi)容計算的散列碼)。作為第二個例子,清潔416可以涉及針對代表數(shù)據(jù)集合104的驗證器202 (比如校驗和)驗證一個或更多數(shù)據(jù)集合104,以便驗證各個數(shù)據(jù)集合104的內(nèi)容的一致性。作為第三個例子,清潔416可以簡單地涉及檢查數(shù)據(jù)集合104的錯誤,比如驗證某種標(biāo)準(zhǔn)化類型的數(shù)據(jù)集合104的二進制內(nèi)容代表根據(jù)正式定義的有效結(jié)構(gòu)。此外,清潔416可以允許簡單地檢測不一致112的存在;可以允許識別不一致122在至少一個所比較的數(shù)據(jù)集合104之內(nèi)和/或其間的位置(例如不僅檢測到錯誤存在,而且檢測到數(shù)據(jù)集合104的特定部分不一致或者與預(yù)期不同);并且/或者可以允許校正不一致122 (例如Hamming碼之類的糾錯校驗和,其允許確定正確的數(shù)據(jù),或者被應(yīng)用于二進制對象的修復(fù)技術(shù),其允許校正格式化不一致并且可以復(fù)原或減少數(shù)據(jù)丟失)。可以對于存儲集合102內(nèi)的不同數(shù)據(jù)集合104應(yīng)用不同類型的清潔416 (例如可以按照與更加復(fù)雜但精密的糾錯技術(shù)兼容的方式存儲價值更高的數(shù)據(jù)集合102,而價值較低的數(shù)據(jù)集合102則可以按照簡單且相對不復(fù)雜的方式來存儲)。此外,所調(diào)用的清潔416的類型可以取決于對應(yīng)的數(shù)據(jù)集合104的可用拷貝的數(shù)目,所檢測到的故障118的類型,存儲設(shè)備106的類型(例如實施在各個設(shè)備上的RAID方案),以及用戶的興趣(例如用戶可以被允許在復(fù)雜度、可靠性和清潔416的持續(xù)時間方面有所不同的各種清潔選項當(dāng)中進行選擇)。在某些情形中,可以實行多種類型的清潔416(例如涉及快速識別出容易檢測的不一致122并且迅速復(fù)原對于數(shù)據(jù)集合102的訪問的快速清潔416,其后是驗證存儲集合102的完整性以便解決更加難以校正和修復(fù)的不一致122的復(fù)雜清潔416)。作為該第三方面的第二種變型,可以按照特定順序施行存儲集合102的恢復(fù)。舉例來說,存儲集合102可能包括存儲在許多存儲設(shè)備上的許多類型的數(shù)據(jù)集合104。在某些情形中,自然恢復(fù)(naive recovery)可以按照任意順序?qū)Υ鎯?02應(yīng)用清潔416,而有序恢復(fù)則可以首先對存儲集合102的包括高價值或利用率更高的數(shù)據(jù)集合104的一些部分應(yīng)用清潔416 (例如使用中的數(shù)據(jù)),隨后才對存儲集合102的包括價值較低或請求頻率較低的數(shù)據(jù)集合104的其他部分應(yīng)用清潔416 (例如歸檔數(shù)據(jù))。作為一個這樣的例子,可以把存儲集合102的對應(yīng)區(qū)段402分配成一個或更多區(qū)段集合,其中每一個區(qū)段集合具有區(qū)段描述符404,并且所述恢復(fù)可以涉及首先清潔416由第一區(qū)段描述符404代表的第一區(qū)段集合當(dāng)中的各個區(qū)段402,并且隨后清潔由第二區(qū)段描述符404代表的第二區(qū)段集合當(dāng)中的各個區(qū)段402。作為該第三方面的第三種變型,所述恢復(fù)可以包括在基于區(qū)段描述符404發(fā)起清潔416之前,驗證區(qū)段描述符404的完整性(例如根據(jù)與區(qū)段描述符404 —起存儲的驗證器202)。如果發(fā)現(xiàn)區(qū)段描述符404的一部分不可驗證(例如由于在對區(qū)段描述符404的一部分進行寫入時發(fā)生的故障118而導(dǎo)致的不一致或破壞),則所述恢復(fù)可以涉及使用區(qū)段描述符404的可驗證部分,并且對于在區(qū)段描述符404的受破壞部分中所代表的各個區(qū)段402施行完全清潔416??商鎿Q地,所述恢復(fù)可以涉及找到并使用區(qū)段描述符404的另一份拷貝(例如存儲在同一存儲設(shè)備106上的其他位置處或者存儲在存儲集合102的另一個存儲設(shè)備106上的區(qū)段描述符404的完全相同或者略微陳舊但是可驗證的拷貝)。實際上,如果 發(fā)現(xiàn)兩個或更多區(qū)段描述符404分別受到部分破壞,則所述恢復(fù)可以通過利用每一個區(qū)段描述符404的有效部分完全實現(xiàn)??商鎿Q地,如果無法獲得區(qū)段描述符404的可驗證拷貝,則所述恢復(fù)可以發(fā)起對于存儲集合102的完全清潔(例如對于整個存儲集合102的完全掃描和重新同步)。按照上述方式,這些技術(shù)的一個實施例可以被配置成從存儲集合102的不同類型的故障118恢復(fù)。根據(jù)這里給出的技術(shù),本領(lǐng)域技術(shù)人員可以設(shè)想到從存儲集合102的故障118恢復(fù)的許多方式。E、計算環(huán)境
圖11給出了可以在其中實施這里給出的技術(shù)的計算設(shè)備1102內(nèi)的示例性計算環(huán)境的圖示。示例性的計算設(shè)備包括(但不限于)個人計算機、服務(wù)器計算機、手持式或膝上型設(shè)備、移動設(shè)備(比如移動電話、個人數(shù)字助理(PDA)、媒體播放器等等)、多處理器系統(tǒng)、消費電子裝置、小型計算機、大型計算機以及包括任何前述系統(tǒng)或設(shè)備的分布式計算環(huán)境。圖11示出了包括被配置成實施這里提供的一個或更多實施例的計算設(shè)備1102的系統(tǒng)1100的一個例子。在一種配置中,計算設(shè)備1102包括至少一個處理器1106和至少一個存儲器組件1108。取決于計算設(shè)備的確切配置和類型,存儲器組件1108可以是易失性的(比如RAM)、非易失性的(比如ROM、閃存等等)或者中間或混合類型的存儲器組件。這種配置在圖11中由虛線1104示出。在一些實施例中,設(shè)備1102可以包括附加的特征和/或功能。舉例來說,設(shè)備1102可以包括一個或更多附加的存儲組件1110,其中包括(但不限于)硬盤驅(qū)動器、固態(tài)存儲設(shè)備以及/或者其他可移除或不可移除磁性或光學(xué)介質(zhì)。在一個實施例中,實施這里提供的一個或更多實施例的計算機可讀和處理器可執(zhí)行指令被存儲在存儲組件1110中。存儲組件1110還可以存儲其他數(shù)據(jù)對象,比如操作系統(tǒng)的組件、包括一個或更多應(yīng)用的可執(zhí)行二進制、編程庫(例如應(yīng)用編程接口(API))、媒體對象以及文檔。計算機可讀指令可以被加載到存儲器組件1108中以便由處理器1106執(zhí)行。計算設(shè)備1102還可以包括一個或更多通信組件1116,其允許計算設(shè)備1102與其他設(shè)備進行通信。所述一個或更多通信組件1116可以包括(例如)調(diào)制解調(diào)器、網(wǎng)絡(luò)接口卡(NIC)、射頻發(fā)送器/接收器、紅外端口以及通用串行總線(USB)USB連接。這樣的通信組件1116可以包括有線連接(通過物理線繩、線纜或連線連接到網(wǎng)絡(luò))或無線連接(比如通過可見光、紅外或者一個或更多射頻與聯(lián)網(wǎng)設(shè)備無線通信)。計算設(shè)備1102可以包括一個或更多輸入組件1114,比如鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備、紅外攝影機或視頻輸入設(shè)備,以及/或者一個或更多輸出組件1112,比如一個或更多顯示器、揚聲器和打印機。輸入組件1114和/或輸出組件1112可以通過有線連接、無線連接或其任意組合連接到計算設(shè)備1102。在一個實施例中,來自另一個計算設(shè)備的輸入組件1114或輸出組件1112可以被用作計算設(shè)備1102的輸入組件1114和/或輸出組件1112。計算設(shè)備1102的各個組件可以通過各種互連(比如總線)連接在一起。這樣的互連可以包括外圍組件互連(PCI)(比如PCI Express)、通用串行總線(USB)、火線(IEEE1394)、光學(xué)總線結(jié)構(gòu)等等。在另一個實施例中,計算設(shè)備1102的各個組件可以通過網(wǎng)絡(luò)互連。舉例來說,存儲器組件1108可以包括位于通過網(wǎng)絡(luò)互連的不同物理位置的多個物理存儲器單元。 本領(lǐng)域技術(shù)人員將認識到,被利用來存儲計算機可讀指令的存儲設(shè)備可以分布在網(wǎng)絡(luò)上。舉例來說,可通過網(wǎng)絡(luò)1118訪問的計算設(shè)備1120可以存儲用以實施這里所提供的一個或更多實施例的計算機可讀指令。計算設(shè)備1102可以訪問計算設(shè)備1120,并且下載所述計算機可讀指令的一部分或全部以便執(zhí)行??商鎿Q地,計算設(shè)備1102可以按照需要下載一部分計算機可讀指令,或者一些指令可以在計算設(shè)備1102處執(zhí)行,并且一些指令可以在計算設(shè)備1120處執(zhí)行。F、術(shù)語的使用
在本申請中使用的術(shù)語“組件”、“模塊”、“系統(tǒng)”、“接口”等等通常意圖指代與計算機有關(guān)的實體,或者是硬件、硬件與軟件的組合、軟件,或者是執(zhí)行中的軟件。舉例來說,組件可以是(但不限于)運行在處理器上的處理、處理器、對象、可執(zhí)行程序、執(zhí)行線程、程序和/或計算機。作為說明,運行在控制器上的應(yīng)用和控制器都可以是組件。一個或更多組件可以駐留在處理和/或執(zhí)行線程內(nèi),并且組件可以位于一臺計算機上和/或分布在兩臺或更多臺計算機之間。此外,所要求保護的主題內(nèi)容可以被實施為一種利用標(biāo)準(zhǔn)編程和/或工程技術(shù)來產(chǎn)生軟件、固件、硬件或其任意組合以便控制計算機實施所公開的主題內(nèi)容的方法、設(shè)備、或者制造產(chǎn)品。這里使用的術(shù)語“制造產(chǎn)品”意圖包含可以從任何計算機可讀設(shè)備、載體或介質(zhì)訪問的計算機程序。當(dāng)然,本領(lǐng)域技術(shù)人員將認識到,在不背離所要求保護的主題內(nèi)容的范圍或精神的情況下,本領(lǐng)域技術(shù)人員可以對這種配置做出許多修改。這里提供了實施例的各種操作。在一個實施例中,所描述的其中一項或更多項操作可以構(gòu)成存儲在一個或更多計算機可讀介質(zhì)上的計算機可讀指令,在由計算設(shè)備執(zhí)行時,所述計算機可讀指令將使得所述計算設(shè)備施行所描述的操作。描述其中一部分或全部操作的順序不應(yīng)被理解為意味著這些操作必須依賴于順序。受益于本說明書,本領(lǐng)域技術(shù)人員將認識到替換的排序。此外還應(yīng)當(dāng)理解的是,不一定所有操作都必須存在于這里提供的每一個實施例中。雖然用特定于結(jié)構(gòu)特征和/或方法步驟的語言描述了本發(fā)明的主題內(nèi)容,但是應(yīng)當(dāng)理解的是,在所附權(quán)利要求中限定的主題內(nèi)容不必須受限于前面描述的具體特征或步驟。相反,前面描述的具體特征和步驟是作為實施權(quán)利要求的示例性形式而公開的。此外,這里使用的“示例性”一詞意味著充當(dāng)一個實例、事例或說明。在這里被描述為“示例性”的任何方面或設(shè)計不必須被理解為比其他方面或設(shè)計有利。相反,使用“示例性”一詞是意圖以具體的方式呈現(xiàn)概念。本申請中所使用的術(shù)語“或者”意味著包含性的“或者”而不是排他性的“或者”。也就是說,除非另行指明或者可以從上下文明顯看出,否則“X采用A或B”應(yīng)當(dāng)意味著任何自然的包含性排列。也就是說,如果X采用A、X采用B或者X采用A和B兩者,則“X采用A或B”在任何前述事例下都得以滿足。此外,除非另行指明或者從上下文中可以明顯看出是針對單數(shù)形式,否則用在本申請和所附權(quán)利要求書中的“一”和“一個”通??梢员焕斫鉃橐馕吨耙粋€或更多個”。 此外,雖然關(guān)于一種或更多種實現(xiàn)方式示出并描述了本公開內(nèi)容,但是基于閱讀并理解本說明書和附圖,本領(lǐng)域技術(shù)人員將會想到等效的更改和修改。本公開內(nèi)容包括所有這樣的修改和更改,并且僅由所附權(quán)利要求書的范圍限制。特別關(guān)于由前面描述的組件(例如元件、資源等等)所施行的各項功能,被用來描述這樣的組件的術(shù)語意圖對應(yīng)于(除非另行表明)施行所述組件的指定功能的任何組件(例如功能上等效),盡管其在結(jié)構(gòu)上不等 效于在本公開內(nèi)容的這里說明的示例性實現(xiàn)方式中施行所述功能的所公開的結(jié)構(gòu)。此外,雖然本公開內(nèi)容的具體特征可能是關(guān)于幾種實現(xiàn)方式當(dāng)中的僅僅一種公開的,但是這樣的特征可以與其他實現(xiàn)方式的一項或更多項其他特征組合,正如可能對于任何給定或特定應(yīng)用所期望且有利的那樣。此外,就在詳細描述部分或權(quán)利要求書中使用的“包含”、“具有”、“帶有”等術(shù)語或其各種變體而言,這樣的術(shù)語與術(shù)語“包括”類似都意圖是包含性的。
權(quán)利要求
1.一種在具有處理器(712)的計算機(710)上記錄由至少一個存儲設(shè)備(106)提供的存儲集合(102)內(nèi)的待定寫入的方法(500),所述方法(500)包括在處理器(712)上執(zhí)行(504 )被配置成實施以下操作的指令(706 ):在至少一個存儲設(shè)備(106 )上生成(506 )區(qū)段描述符(404 ),其根據(jù)區(qū)段尺寸把存儲在所述存儲設(shè)備(106)上的存儲集合(102)分配成至少兩個區(qū)段(402);在接收(508)到將要存儲在存儲集合(102)中的位置(802)處的數(shù)據(jù)集合(104)之后識別(510)出存儲集合(102)內(nèi)的包括所述數(shù)據(jù)集合(104)的位置(802)的區(qū)段(402);在區(qū)段描述符(404)中把所述區(qū)段(402)標(biāo)記(512)為骯臟;以及發(fā)起(514)把數(shù)據(jù)集合(104)存儲在存儲集合(102)中的所述位置(802)處; 在把數(shù)據(jù)集合(104 )存儲在存儲集合(102 )中的所述位置(802 )處之后,在區(qū)段描述符(404)中把所述區(qū)段(402)標(biāo)記(516)為清潔。
2.權(quán)利要求I的方法,對應(yīng)的骯臟區(qū)段根據(jù)從包括以下各項的區(qū)段參考方案集合當(dāng)中選擇的區(qū)段參考方案標(biāo)識存儲設(shè)備中的對應(yīng)區(qū)段標(biāo)識出存儲集合的存儲設(shè)備上的區(qū)段的物理位置的物理區(qū)段參考方案;以及標(biāo)識出存儲集合的邏輯設(shè)備上的區(qū)段的邏輯位置的邏輯區(qū)段參考方案。
3.權(quán)利要求I的方法所述存儲集合包括由各個區(qū)段構(gòu)成的至少兩個區(qū)段集合;并且對應(yīng)的區(qū)段集合包括代表該區(qū)段集合的各個區(qū)段的至少一個區(qū)段描述符。
4.權(quán)利要求I的方法所述存儲集合包括分別包括更新序列指示符的至少兩個區(qū)段描述符;并且所述指令被配置成在把數(shù)據(jù)集合存儲在存儲集合中的位置處之后實施以下操作從各個區(qū)段描述符當(dāng)中選擇不具有最近的更新序列指示符的陳舊區(qū)段描述符; 在所述陳舊區(qū)段描述符中把包括所述數(shù)據(jù)集合的位置的區(qū)段標(biāo)記為已更新;以及把所述更新序列指示符更新到各個區(qū)段描述符當(dāng)中的最近的更新序列指示符。
5.權(quán)利要求I的方法在存儲設(shè)備上生成區(qū)段描述符包括在所述存儲設(shè)備上為區(qū)段描述符分派區(qū)段描述符空間;并且所述指令被配置成在用骯臟區(qū)段填充區(qū)段描述符空間之后擴充所述區(qū)段描述符空間。
6.權(quán)利要求I的方法,在至少一個區(qū)段描述符中將區(qū)段標(biāo)記為骯臟包括確定所述區(qū)段在區(qū)段描述符中是否被標(biāo)記為清潔;以及在確定所述區(qū)段在區(qū)段描述符中被標(biāo)記為清潔之后,將該區(qū)段標(biāo)記為骯臟。
7.權(quán)利要求I的方法,在至少一個區(qū)段描述符中將區(qū)段標(biāo)記為清潔包括在完成把數(shù)據(jù)集合存儲在所述區(qū)段內(nèi)的位置處之后,將該區(qū)段標(biāo)識為清潔;以及在接收到針對在區(qū)段描述符中將已清潔區(qū)段標(biāo)記為清潔的請求之后,在區(qū)段描述符中將至少一個已清潔區(qū)段標(biāo)記為清潔。
8.一種包括指令(706)的計算機可讀存儲介質(zhì)(702),當(dāng)在可以訪問包括存儲至少一個數(shù)據(jù)集合(104)的至少一個存儲設(shè)備(106)的存儲集合(102)的計算機(710)的處理器(712)上執(zhí)行時,所述指令(706)使得計算機(710)通過以下操作清潔存儲集合(102) 從至少一個存儲設(shè)備(106 )獲取(606 )區(qū)段描述符(404 ),其根據(jù)區(qū)段尺寸把存儲在所述存儲設(shè)備(106)上的存儲集合(102)分配成至少兩個區(qū)段(402);以及對于在區(qū)段描述符(404)中被標(biāo)記為骯臟的對應(yīng)區(qū)段(402)發(fā)起(610)清潔(416)該區(qū)段(402)內(nèi)的數(shù)據(jù)集合(104);以及在完成對于所述區(qū)段(402)內(nèi)的數(shù)據(jù)集合(104)的清潔(416)之后,在區(qū)段描述符 (404)中將該區(qū)段(402)標(biāo)記(612)為清潔。
9.權(quán)利要求8的方法所述存儲集合包括分別包括更新序列指示符的至少兩個區(qū)段描述符;并且識別出存儲集合中的至少一個骯臟區(qū)段包括從各個區(qū)段描述符當(dāng)中選擇具有最近的更新序列指示符的最近的區(qū)段描述符;以及根據(jù)所述區(qū)段描述符識別出存儲集合中的至少一個骯臟區(qū)段。
10.權(quán)利要求8的方法對應(yīng)的區(qū)段描述符包括所述區(qū)段描述符的區(qū)段描述符驗證器;識別出骯臟區(qū)段包括驗證區(qū)段描述符的區(qū)段描述符驗證器;并且所述指令被配置成在對于區(qū)段描述符的區(qū)段描述符驗證器的驗證失敗之后發(fā)起對于存儲集合的各個存儲設(shè)備的完全清潔。
全文摘要
在對存儲集合(例如硬盤驅(qū)動器陣列)進行寫入的同時,所述存儲集合可能會發(fā)生故障,比如失去電力、軟件崩潰或者存儲設(shè)備斷開。從故障恢復(fù)可以涉及掃描存儲集合以便檢測及校正不一致(例如對數(shù)據(jù)集合的各個鏡像進行比較或者測試校驗和)。但是由于缺乏關(guān)于故障期間對于存儲集合的待定寫入的位置的信息,該“清潔”處理可能涉及掃描整個存儲集合,從而導(dǎo)致長時間的恢復(fù)處理。這里給出了用于跟蹤對于存儲集合的寫入的技術(shù),這是通過將存儲集合分配成具有區(qū)段尺寸(例如一千兆字節(jié))的各個區(qū)段,并且在非易失性存儲介質(zhì)上存儲包括進行中的寫入的“骯臟”區(qū)段的描述符。于是可以把故障后的恢復(fù)處理限制到被識別為骯臟的區(qū)段。
文檔編號G06F11/16GK102929750SQ201210335689
公開日2013年2月13日 申請日期2012年9月12日 優(yōu)先權(quán)日2011年9月12日
發(fā)明者E.帕萊奧羅古, K.梅拉, D.摩斯 申請人:微軟公司