專利名稱:查詢和修復(fù)數(shù)據(jù)的制作方法
查詢和修復(fù)數(shù)據(jù)
背景技術(shù):
各種電子存儲介質(zhì)上的數(shù)據(jù)可能隨時間推移變成已破壞。就一些類型的介質(zhì)(t匕如⑶、DVD、磁帶、軟盤和其它介質(zhì))而言,介質(zhì)實際上開始老化并因此丟失數(shù)據(jù)。就其它類型的介質(zhì)(比如EPROM和閃存)而言電荷可能耗散從而導(dǎo)致丟失數(shù)據(jù)。雖然一般已知硬驅(qū)動并且甚至固態(tài)器件(SSD)可能在它們崩潰或者以別的方式變成不起作用時丟失數(shù)據(jù),但是至少一些業(yè)外人士未公知的是即使尚未崩潰的良好運轉(zhuǎn)的存儲設(shè)備也可能具有悄悄地或者以別的方式變成已破壞的數(shù)據(jù)。這里要求保護(hù)的主題內(nèi)容不限于解決任何弊端或者或者僅在比如上文描述的環(huán)境這樣的環(huán)境中操作的實施例。實際上僅提供這一 “背景技術(shù)”以舉例說明其中可以實現(xiàn) 這里描述的一些實施例的一個示例性的技術(shù)領(lǐng)域。
發(fā)明內(nèi)容
簡言之,這里描述的主題內(nèi)容的方面涉及查詢和修復(fù)數(shù)據(jù)。在各方面中,部件可以檢測儲存器上的已經(jīng)變成已破壞。作為響應(yīng),部件可以請求來自數(shù)據(jù)的一個或者多個冗余副本的數(shù)據(jù)并且如果有冗余副本則可以確定哪些冗余副本未破壞。如果發(fā)現(xiàn)未破壞的副本,則部件可以發(fā)送修復(fù)已破壞的數(shù)據(jù)的請求并且可以標(biāo)識用來修復(fù)已破壞的數(shù)據(jù)的未破壞的副本。
圖I是代表這里描述的主題內(nèi)容的各方面可以并入于其中的示例性通用計算環(huán)境的框 圖2是代表主題內(nèi)容的方面可以并入于其中的示例性環(huán)境的框 圖3-4是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面從應(yīng)用的角度來看可以出現(xiàn)的示例性動作的框 圖5是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面從洗刷器(scrubber)的角度來看可以出現(xiàn)的示例性動作的框 圖6是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面從存儲系統(tǒng)的角度來看可以出現(xiàn)的示例性動作的框 圖7是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面的在基于RAID的存儲系統(tǒng)中跨盤的數(shù)據(jù)的條化(stripping of data)的框圖;并且
圖8是代表根據(jù)這里描述的主題內(nèi)容的各方面的已經(jīng)在其中結(jié)合圖2的儲存器的另一示例性環(huán)境的框圖。
具體實施例方式如這里所用,措詞“包括”及其變體將理解為意味著“包括但不限于”的開放術(shù)語。除非上下文另有明示,措詞“或者”將理解為“和/或”。措辭“基于”將理解為“至少部分地基于”,措詞“一個實施例”和“一實施例”將理解為“至少一個實施例”。措詞“另一實施例”將理解為“至少一個其它實施例”。如這里所用,比如“一”、“一個”和“該”這樣的措詞包括指示的項或者動作中的一個或者多個項或者動作。具體而言,在權(quán)利要求中,對項的引用一般意味著至少存在一個這樣的項,而對動作的弓I用意味著動作的至少一個實例被執(zhí)行。這里有時可以使用“第一”、“第二”、“第三”等措詞。在無附加上下文時,在權(quán)利要求中使用這樣的措詞并不旨在暗示排序而實際上用于標(biāo)識目的。例如短語“第一版本”和“第二版本”未必意味著第一版本恰為第一版本或者是在第二版本之前創(chuàng)建的或者甚至在第二版本之前請求或者操作第一版本。實際上,這些短語用來標(biāo)識不同版本。標(biāo)題僅為了方便;關(guān)于給定主題的信息可以在標(biāo)題指示該主題的章節(jié)以外找到。下文可以包括其它顯式和隱式定義。
示例操作環(huán)塏
圖I圖示了這里描述的主題內(nèi)容的各方面可以實施于其上的適當(dāng)?shù)挠嬎阆到y(tǒng)環(huán)境100的例子。計算系統(tǒng)環(huán)境100僅為適當(dāng)?shù)挠嬎悱h(huán)境的一個例子并且未旨在于暗示關(guān)于這里描述的主題內(nèi)容的各方面的使用或者功能范圍的任何限制。計算環(huán)境100也不應(yīng)解釋為具有涉及示例操作環(huán)境100中所示部件中的任何部件或者組合的任何依賴或者要求。這里描述的主題內(nèi)容的各方面可與諸多其它通用或者專用計算系統(tǒng)環(huán)境或者配置一起操作??梢赃m合用于與這里描述的主題內(nèi)容的各方面一起使用的公知計算系統(tǒng)、環(huán)境或者配置的例子包括個人計算機、服務(wù)器計算機、手持或者膝上型設(shè)備、微處理器系統(tǒng)、基于微控制器的系統(tǒng)、機頂盒、可編程消費者電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、主機計算機、個人數(shù)字助理(PDA)、游戲設(shè)備、打印機、包括機頂盒、媒體中心或者其它裝置的裝置、汽車嵌入或者附著式計算設(shè)備、其它移動設(shè)備、包括上述系統(tǒng)或者設(shè)備中的任何系統(tǒng)或者設(shè)備的分布式計算環(huán)境等??梢栽谟嬎銠C執(zhí)行的計算機可執(zhí)行指令(比如程序模塊)的一般背景中描述這里描述的主題內(nèi)容的各方面。一般而言,程序模塊包括執(zhí)行特定任務(wù)或者實施特定抽象數(shù)據(jù)類型的例程、程序、對象、部件、數(shù)據(jù)結(jié)構(gòu)等。也可以在分布式計算環(huán)境中實現(xiàn)這里描述的主題內(nèi)容的各方面,其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于包括存儲器存儲設(shè)備的本地和遠(yuǎn)程計算機存儲介質(zhì)中。參照圖1,用于實施這里描述的主題內(nèi)容的各方面的示例系統(tǒng)包括形式為計算機110的通用計算設(shè)備。計算機可以包括能夠執(zhí)行指令的任何電子設(shè)備。計算機110的部件可以包括處理單元120、系統(tǒng)存儲器130和將包括系統(tǒng)存儲器的各種系統(tǒng)部件耦接到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若干類型的總線結(jié)構(gòu)中的任何類型的總線(包括存儲器總線或者存儲器控制器、外設(shè)總線和使用多種總線架構(gòu)中的任何總線架構(gòu)的本地總線)。舉例而言而非限制,這樣的架構(gòu)包括工業(yè)標(biāo)準(zhǔn)架構(gòu)(ISA)總線、微通道架構(gòu)(MCA)總線、增強型ISA (EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)本地總線、外圍部件互連(PCI)總線(但也稱為夾層(mezzanine)總線)、外圍部件互連擴展(PCI-X)總線、高級圖形端口(AGP)和 PCI 快速(PCIe)。計算機110通常包括多種計算機可讀介質(zhì)。計算機可讀介質(zhì)可以是計算機110可以訪問的任何可用介質(zhì)并且包括易失性和非易失性介質(zhì)以及可移動和不可移動介質(zhì)。舉例而言而非限制,計算機可讀介質(zhì)可以包括計算機存儲介質(zhì)和通信介質(zhì)。
計算機存儲介質(zhì)包括以用于存儲信息(比如計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或者其它數(shù)據(jù))的任何方法或者技術(shù)中實施的易失性和非易失性、可移動和不可移動的介質(zhì)。計算機存儲介質(zhì)包括RAM、ROM、EEPR0M、固態(tài)儲存器、閃存或者其它存儲器技術(shù)、CD-ROM、 數(shù)字多功能光盤(DVD)或者其它光盤儲存器、磁盒、磁帶、磁盤儲存器或者其它磁存儲設(shè)備或者可以用來存儲所需信息并且可以由計算機110訪問的任何其它介質(zhì)。
通信介質(zhì)通常體現(xiàn)為計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或者在調(diào)制的數(shù)據(jù)信號(比如載波)或者其它傳送機制中的其它數(shù)據(jù)并且包括任何信息遞送介質(zhì)。術(shù)語“調(diào)制的數(shù)據(jù)信號”意味著如下信號,該信號的特性中的一個或者多個特性以對信號中的信息編碼這樣的方式來設(shè)置或者改變。舉例而言而非限制,通信介質(zhì)包括有線介質(zhì)(比如有線網(wǎng)絡(luò)或者直接有線連接)和無線介質(zhì)(比如聲學(xué)、RF、紅外線和其它無線介質(zhì))。也可以在計算機可讀介質(zhì)的范圍內(nèi)包括上述通信介質(zhì)中的任何通信介質(zhì)的組合。
系統(tǒng)存儲器130可以包括形式為易失性和/或非易失性存儲器的計算機存儲介質(zhì) (比如只讀存儲器(R0M)131和隨機存取存儲器(RAM)132)。基本輸入/輸出系統(tǒng)133(BI0S) 通常存儲于ROM 131中,該BIOS包含有助于比如在啟動期間在計算機110內(nèi)的單元之間傳送信息的基本例程。RAM 132通常包含處理單元120立即可訪問和/或當(dāng)前操作的數(shù)據(jù)和 /或程序模塊。舉例而言而非限制,圖I圖示了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊 136和程序數(shù)據(jù)137。
計算機110也可以包括其它可移動/不可移動、易失性/非易失性計算機存儲介質(zhì)。僅舉例而言,圖I圖示了從或者向不可移動、非易失性磁介質(zhì)讀取或者寫入的硬盤驅(qū)動 141、從或者向可移動、非易失性磁盤152讀取或者寫入的磁盤驅(qū)動151和從或者向可移動、 非易失性光盤156 (比如⑶ROM或者其它光學(xué)介質(zhì))讀取或者寫入的光盤驅(qū)動155??梢栽谑纠僮鳝h(huán)境中使用的其它可移動/不可移動、易失性/非易失性計算機存儲介質(zhì)包括磁帶盒、閃存卡、數(shù)字多功能光盤、其它光盤、數(shù)字視頻帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動 141可以通過接口 140連接到系統(tǒng)總線121,并且磁盤驅(qū)動151和光盤驅(qū)動155可以由用于可移動、非易失性存儲器的接口(比如接口 150)連接到系統(tǒng)總線121。
上文討論和圖I中圖示的驅(qū)動及其關(guān)聯(lián)計算機存儲介質(zhì)提供用于計算機110的計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲。例如在圖I中圖示了硬盤驅(qū)動141 為存儲操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147。注意這些部件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137相同或者不同。這里向操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147給予不同編號以說明至少它們是不同副本。
用戶可以通過輸入設(shè)備(比如鍵盤162和指示設(shè)備161 (常稱為鼠標(biāo)、跟蹤球或者觸板))向計算機110中錄入命令和信息。其它輸入設(shè)備(未示出)可以包括麥克風(fēng)、操縱桿、 游戲板、衛(wèi)星盤、掃描儀、觸敏屏幕、寫字板等。這些和其它輸入設(shè)備經(jīng)常通過用戶輸入接口 160 (該接口耦接到系統(tǒng)總線)連接到處理單元120、但是可以由其它接口和總線結(jié)構(gòu)(比如并行端口、游戲端口或者通用串行總線(USB ))連接。
監(jiān)視器191或者其它類型的顯示設(shè)備也經(jīng)由接口(比如視頻接口 190)連接到系統(tǒng)總線121。除了監(jiān)視器之外,計算機也可以包括其它外圍輸出設(shè)備(比如可以通過輸出外設(shè)接口 195連接的揚聲器197和打印機196)。
計算機110可以使用與一個或者多個遠(yuǎn)程計算機(比如遠(yuǎn)程計算機180)的邏輯連接在聯(lián)網(wǎng)環(huán)境中操作。遠(yuǎn)程計算機180可以是個人計算機、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或者其它常見網(wǎng)絡(luò)節(jié)點并且通常包括上文相對于計算機110描述的單元中的許多或者所有單元,但是在圖中僅已經(jīng)圖示存儲器存儲設(shè)備181。圖I中描繪的邏輯連接包括局域網(wǎng) (LAN) 171和廣域網(wǎng)(WAN) 173、但是也可以包括其它網(wǎng)絡(luò)。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計算機網(wǎng)絡(luò)、內(nèi)部網(wǎng)和因特網(wǎng)中司空見慣。
當(dāng)在LAN聯(lián)網(wǎng)環(huán)境中使用時,計算機110通過網(wǎng)絡(luò)接口或者適配器170連接到LAN 171。當(dāng)在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機110可以包括調(diào)制解調(diào)器172或者用于通過WAN 173 (比如因特網(wǎng))建立通信的其它裝置??梢栽趦?nèi)部或者外部的調(diào)制解調(diào)器172可以經(jīng)由用戶輸入接口 160或者其它適當(dāng)機制連接到系統(tǒng)總線121。在聯(lián)網(wǎng)環(huán)境中,相對于計算機 110描繪的程序模塊或者其部分可以存儲于遠(yuǎn)程存儲器存儲設(shè)備中。舉例而言而非限制,圖 I圖示了遠(yuǎn)程應(yīng)用程序185為駐留于存儲器設(shè)備181上。將理解所示網(wǎng)絡(luò)連接是示例性的并且可以使用在計算機之間建立通信鏈路的其它手段。
修復(fù)數(shù)據(jù)如先前提到的那樣,存儲介質(zhì)上的數(shù)據(jù)可能變成已破壞。圖2是代表主題內(nèi)容的各方面可以并入于其中的示例性環(huán)境的框圖。環(huán)境200包括實體205-208和210-214。這些實體中的單個實體有時稱為部件,而這些實體中的兩個或者更多實體有時可以稱為部件。
圖2中所示部件為舉例而并非為了囊括可能需要或者包括的部件。另外,存儲部件數(shù)目可以在其它實施例中不同而未脫離這里描述的主題內(nèi)容的方面的精神實質(zhì)或者范圍。在一些實施例中,可以在其它部件(已示出或者未示出)中包括或者在子部件中放置結(jié)合圖2描述的部件而未脫離這里描述的主題內(nèi)容的方面的精神實質(zhì)或者范圍。在一些實施例中,可以跨多個設(shè)備分布結(jié)合圖2描述的部件和/或功能。
如這里所用,術(shù)語部件將理解為包括硬件(比如設(shè)備的全部或者部分)、一個或者多個軟件模塊或者其部分的匯集、一個或者多個軟件模塊或者其部分與一個或者多個設(shè)備或者其部分的一些組合等。
例如可以使用一個或者多個計算設(shè)備來實施圖2中所示部件。這樣的設(shè)備可以例如包括個人計算機、服務(wù)器計算機、手持或者膝上型設(shè)備、微處理器系統(tǒng)、基于微控制器的系統(tǒng)、機頂盒、可編程消費者電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、主機計算機、蜂窩電話、個人數(shù)字助理(PDA)、游戲設(shè)備、打印機、包括機頂盒、媒體中心或者其它裝置的裝置、汽車嵌入或者附著式計算設(shè)備、其它移動設(shè)備、包括上述系統(tǒng)或者設(shè)備中的任何系統(tǒng)或者設(shè)備的分布式計算環(huán)境等。
可以配置成實施圖2的部件中的一個或者多個部件的示例設(shè)備包括圖I的計算機 110。
部件也可以包括代碼或者由代碼代表。代碼包括指示計算機將采取的動作的指令。代碼也可以包括除了計算機將采取的動作之外的信息(比如數(shù)據(jù)、資源、變量、定義、關(guān)系、關(guān)聯(lián)等)°
代碼可以由計算機執(zhí)行。當(dāng)代碼由計算機執(zhí)行時,這可以稱為進(jìn)程。如這里所用術(shù)語“進(jìn)程”及其變體可以包括一個或者多個傳統(tǒng)進(jìn)程、線程、部件、庫、執(zhí)行任務(wù)的對象等。可以在硬件、軟件或者硬件與軟件的組合中實施進(jìn)程。在一個實施例中,進(jìn)程是無論如何稱謂都能夠執(zhí)行動作或者在執(zhí)行動作時使用的任何機制。進(jìn)程可以分布于多個設(shè)備或者單個設(shè)備之上。應(yīng)用(例如應(yīng)用205和洗刷器206)可以在用戶模式、內(nèi)核模式、某個其它模式、 上述模式的組合等中執(zhí)行。應(yīng)用可以作為存儲系統(tǒng)的部分或者在存儲系統(tǒng)以外(即未作為存儲系統(tǒng)的部分)執(zhí)行。
儲存器210-214可以包括能夠存儲數(shù)據(jù)的任何存儲介質(zhì)。存儲器可以包括易失性存儲器(例如RAM或者先前描述的其它易失性存儲器)和/或非易失性存儲器(例如硬驅(qū)動或者先前描述的其它非易失性存儲器)。儲存器可以完全位于一個設(shè)備上或者可以跨多個設(shè)備來分布。儲存器可以在外部、內(nèi)部或者包括在托管儲存器的存儲系統(tǒng)內(nèi)部和外部的部件。
措辭“數(shù)據(jù)”將廣義理解為包括可以由一個或者多個計算機存儲單元代表的任何內(nèi)容。邏輯上,可以在易失性或者非易失性存儲器中將數(shù)據(jù)表示為I和O的系列。在具有非二進(jìn)制存儲介質(zhì)的計算機中,可以根據(jù)存儲介質(zhì)的能力表示數(shù)據(jù)。可以將數(shù)據(jù)組織成不同類型的數(shù)據(jù)結(jié)構(gòu)(包括簡單數(shù)據(jù)類型(比如數(shù)、字母等)、分級、鏈接或者其它有關(guān)的數(shù)據(jù)類型、包括多個其它數(shù)據(jù)結(jié)構(gòu)或者簡單數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)等)。數(shù)據(jù)的一些例子包括信息、 程序代碼、程序狀態(tài)、程序數(shù)據(jù)、其它數(shù)據(jù)等。
雖然圖示了儲存器210和211為分別連接到應(yīng)用205和洗刷器206,但是在其它實施例中,這些儲存器可以經(jīng)由文件系統(tǒng)207由應(yīng)用205和洗刷器206訪問。在一些實施方式中,可以組合儲存器210和儲存器211,從而應(yīng)用205和洗刷器206在獲得校驗和時使用同一儲存器。在圖8中圖示了這一點的例子,其中已經(jīng)將圖2的儲存器210和211組合成儲存器209。
回顧圖2,在一些實施方式中,可以在托管儲存器212-214的存儲系統(tǒng)上托管儲存器210和211。在其它實施方式中,可以有可能在與托管儲存器212-214的存儲系統(tǒng)分離的存儲系統(tǒng)上托管儲存器210和211。圖2中所示儲存器數(shù)目僅為舉例。在其它實施例中,可以有更多或者更少的儲存器。
應(yīng)用205可以與文件系統(tǒng)207通信以訪問儲存器212-214上的數(shù)據(jù)。如這里所用訪問可以包括讀取數(shù)據(jù)、寫入數(shù)據(jù)、刪除數(shù)據(jù)、更新數(shù)據(jù)、包括上述操作中的兩個或者更多操作的組合等。
文件系統(tǒng)207可以負(fù)責(zé)經(jīng)由冗余管理器208向非易失性儲存器(例如儲存器 212-214)持久存儲數(shù)據(jù)并且從非易失性儲存器取回數(shù)據(jù)。當(dāng)文件系統(tǒng)207接收讀取請求時,文件系統(tǒng)207可以與冗余管理器208通信以從儲存器212-214中的一個或者多個儲存器獲得請求的數(shù)據(jù)。在冗余管理器208已經(jīng)向文件系統(tǒng)207提供數(shù)據(jù)之后,文件系統(tǒng)207 可以向請求實體(例如應(yīng)用205或者洗刷器206)提供數(shù)據(jù)。
冗余管理器208可以負(fù)責(zé)存儲儲存器212-214上的數(shù)據(jù)的一個或者多個副本。例如冗余管理器208可以將一個儲存器的數(shù)據(jù)鏡像到一個或者多個其它儲存器上。作為另一例子,冗余管理器208可以通過使用本領(lǐng)域已知的標(biāo)準(zhǔn)或者專用的獨立磁盤冗余陣列 (RAID)技術(shù)來存儲數(shù)據(jù)的多個邏輯副本。措辭“邏輯”用來指示比完整物理副本更少的數(shù)據(jù)(例如奇偶校驗或者其它數(shù)據(jù))可以用如下方式存儲于其它儲存器上,該方式為如果物理副本變成已破壞則可以根據(jù)這一數(shù)據(jù)創(chuàng)建完整副本。
文件系統(tǒng)207和/或冗余管理器208可以在向應(yīng)用205或者洗刷器206提供數(shù)據(jù)之前檢測和糾正來自儲存器212-214的數(shù)據(jù)中的一些錯誤。例如文件系統(tǒng)207或者冗余管理器208也可以存儲其它校驗和數(shù)據(jù),該數(shù)據(jù)可以用來檢測和糾正儲存器212-214上的一些類型的數(shù)據(jù)錯誤。下文更具體描述校驗和。如果文件系統(tǒng)207和/或冗余管理器208檢測到可以由存儲的校驗和數(shù)據(jù)糾正的錯誤,則可以糾正錯誤而不通知應(yīng)用205或者洗刷器 206。
在一些實施方式中,冗余管理器208可以實施為文件系統(tǒng)207的部件。在其它實施方式中,冗余管理器208可以實施為與文件系統(tǒng)207分離的一個或者多個部件。文件系統(tǒng)207、冗余管理器208以及文件系統(tǒng)207和冗余管理器208使用的任何存儲設(shè)備這里有時稱為存儲系統(tǒng)。存儲系統(tǒng)可以包括為了持久存儲數(shù)據(jù)并且提供對數(shù)據(jù)的訪問而需要的任何部件。
與從文件系統(tǒng)207獲得數(shù)據(jù)結(jié)合,應(yīng)用205可以包括從儲存器210獲得對應(yīng)校驗和以確定數(shù)據(jù)是否已破壞。在一個實施方式中,應(yīng)用205可以被配置成嘗試驗證響應(yīng)于應(yīng)用205向存儲系統(tǒng)發(fā)出的每個讀取請求而返回的數(shù)據(jù)。在另一實施方式中,應(yīng)用205可以被配置成嘗試驗證響應(yīng)于應(yīng)用205向存儲系統(tǒng)發(fā)出的一些讀取請求而返回的數(shù)據(jù)。例如應(yīng)用可以被配置成驗證一些讀取數(shù)據(jù)(例如用于某些文件)而不驗證其它數(shù)據(jù)(例如用于其它文件)生效。
如這里所用,術(shù)語校驗和包括可以用來驗證其它數(shù)據(jù)的任何類型的數(shù)據(jù)。驗證其它數(shù)據(jù)意味著校驗和可以用來查證數(shù)據(jù)尚未變成已破壞。校驗和可以是簡單或者復(fù)雜的并且可以包括用于檢測不同類型的錯誤的信息。
例如校驗和(比如奇偶校驗位)可以用來檢測奇偶校驗錯誤,而更復(fù)雜的校驗和 (比如循環(huán)冗余校驗(CRC))可以用來檢測若干位的錯誤群。一些其它校驗和(比如消息認(rèn)證代碼(MAC)、密碼散列函數(shù)或者一些其它函數(shù))可以用來檢測數(shù)據(jù)可能出現(xiàn)的其它數(shù)據(jù)破壞。
可以在錯誤檢測中或者在錯誤檢測和糾正中使用校驗和。例如校驗和可以包括用于檢測錯誤、但是不糾正錯誤的數(shù)據(jù)。作為另一例子,校驗和可以包括用于檢測和糾正某些類型的錯誤的數(shù)據(jù)。包括用于檢測某些類型的錯誤的數(shù)據(jù)的校驗和可以稱為錯誤糾正代碼 (ECC)0
上述例子未旨在于囊括或者窮舉可以由這里描述的主題內(nèi)容的各方面使用的校驗和的類型。實際上,基于這里的教導(dǎo),本領(lǐng)域技術(shù)人員可以認(rèn)識到在未脫離這里描述的主題內(nèi)容的各方面的精神實質(zhì)或者范圍的前提下可以使用的其它校驗和。
如果應(yīng)用205經(jīng)由校驗和確定來自文件系統(tǒng)207的數(shù)據(jù)已破壞,則應(yīng)用205可以嘗試從該數(shù)據(jù)的冗余副本獲得未破壞的數(shù)據(jù)。作為第一步驟,應(yīng)用205可以要求文件系統(tǒng) 207提供存儲于儲存器212-214上的該數(shù)據(jù)的每個副本。如果該數(shù)據(jù)僅在儲存器212-214 上存儲了一次,則應(yīng)用205可以嘗試用校驗和糾正數(shù)據(jù)(如果可能的話)或者可以(例如經(jīng)由日志、用戶接口等)指示不可恢復(fù)的數(shù)據(jù)破壞錯誤。
如果該數(shù)據(jù)的一個或者多個副本存儲于儲存器212-214上,則應(yīng)用205可以請求每個副本的數(shù)據(jù)并且可以使用校驗和以確定任何該副本是否包含未破壞的數(shù)據(jù)。作為響應(yīng),冗余管理器208可以向文件系統(tǒng)207提供如請求的每個副本,該文件系統(tǒng)可以向應(yīng)用205提供每個副本。
如果副本包含未破壞的數(shù)據(jù),則應(yīng)用205可以指示副本將用來糾正已破壞的原數(shù)據(jù)。如果副本包含未破壞的數(shù)據(jù)而一個或者多個其它副本包含已破壞的數(shù)據(jù),則應(yīng)用205 也可以指示包含未破壞的數(shù)據(jù)的副本被用來糾正具有已破壞的數(shù)據(jù)的一個或者多個副本。 在一個實施例中,當(dāng)原數(shù)據(jù)已破壞時,應(yīng)用205可以請求該數(shù)據(jù)的副本,只直至它找到具有未破壞的數(shù)據(jù)的副本。在另一實施例中,應(yīng)用205可以請求該數(shù)據(jù)的所有副本以標(biāo)識也已破壞的數(shù)據(jù)的所有副本。
與校驗和對應(yīng)的數(shù)據(jù)組(chunk)在不同實施方式中不同。例如在一個實施例中, 與校驗和對應(yīng)的數(shù)據(jù)組的大小可以是4千字節(jié)。在另一實施例中,與校驗和對應(yīng)的數(shù)據(jù)組的大小可以是64千字節(jié)。在又一實施例中,與校驗和對應(yīng)的數(shù)據(jù)組的大小可以是文件的大小。上述數(shù)據(jù)大小僅是示例性的。在其它實施例中,與校驗和對應(yīng)的數(shù)據(jù)組的大小可以小于或者大于上文指示的大小。
洗刷器206可以在可配置的時間(例如定期的、調(diào)度的時間等)執(zhí)行以檢測和糾正存儲于儲存器212-214上的數(shù)據(jù)的數(shù)據(jù)破壞。洗刷器206可以掃描一個或者多個卷、文件或者其部分、數(shù)據(jù)塊等以檢測和糾正數(shù)據(jù)破壞而不是檢測和糾正它可能當(dāng)前使用的數(shù)據(jù)的數(shù)據(jù)破壞(例如如同應(yīng)用205)。在一個實施例中,洗刷器206可以作為低優(yōu)先級進(jìn)程來執(zhí)行以嘗試保存性能。在另一實施例中,洗刷器206可以以低優(yōu)先級之外的優(yōu)先級執(zhí)行。
環(huán)境200除了洗刷器206之外還可以包括一個或者多個其它洗刷器(未示出)。在這樣的實施方式中,洗刷器206可以(例如使用文件屬性、性質(zhì)或者與文件關(guān)聯(lián)的其它元數(shù)據(jù)來)標(biāo)注洗刷器206想要其它一個或多個洗刷器在其洗刷活動期間略過的文件。洗刷器 206可以這樣做以部分地保證僅洗刷器206嘗試糾正這樣的文件的已破壞的數(shù)據(jù)。
此外,還可以有在應(yīng)用205、洗刷器206和一個或多個其它洗刷器(如果有的話)之間的一些協(xié)調(diào),從而它們不嘗試在相同時間洗刷相同數(shù)據(jù)。
在一個實施例中,應(yīng)用205 (并且還有洗刷器206)也可以將錯誤檢測和糾正活動與其它進(jìn)程同步。例如其它進(jìn)程可以向應(yīng)用205正在訪問的數(shù)據(jù)寫入。在應(yīng)用205向文件系統(tǒng)207發(fā)送用于糾正數(shù)據(jù)塊的指令之前,應(yīng)用205可以查證塊自從由應(yīng)用205讀取起尚未改變。如果塊已經(jīng)改變,則應(yīng)用205可以再次讀取塊并且驗證塊以查看內(nèi)容是否仍然已破壞。
在另一實施例中,文件系統(tǒng)207和/或冗余管理器208可以同步對存儲于儲存器 212-214中的一個或者多個儲存器上的數(shù)據(jù)塊有影響的活動。例如如果應(yīng)用205確定數(shù)據(jù)塊已破壞并且需要替換為該數(shù)據(jù)的副本,則文件系統(tǒng)207可以在應(yīng)用205發(fā)送用于糾正數(shù)據(jù)的改變之前接收影響相同數(shù)據(jù)塊的寫入。寫入可以重寫已破壞的數(shù)據(jù)、因此“糾正”數(shù)據(jù)。 如果這個發(fā)生,則文件系統(tǒng)207可以忽略數(shù)據(jù)塊已破壞并且需要更換的稍后指示。
作為另一例子,如果文件系統(tǒng)207在文件系統(tǒng)207接收需要糾正塊的指示之后接收指示改變(該改變影響已破壞塊)的I/o,則指示該改變的I/O可以由文件系統(tǒng)207保持直至已經(jīng)執(zhí)行數(shù)據(jù)糾正活動。
上文指示的同步活動僅為舉例并且未旨在于囊括或者窮舉?;谶@里的教導(dǎo),本領(lǐng)域技術(shù)人員可以認(rèn)識到在未脫離這里描述的主題內(nèi)容的各方面的精神實質(zhì)或者范圍的前提下可以由文件系統(tǒng)207和/或冗余管理器208執(zhí)行的其它同步活動。
圖3-6是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面可以出現(xiàn)的示例性動作的流程圖。為了說明簡化起見,結(jié)合圖3-6描述的方法被描繪和描述為動作系列。也將明白和理解這里描述的主題內(nèi)容的各方面不受所示動作和/或動作順序的限制。在一個實施例中,動作以如下文描述的順序出現(xiàn)。然而在其它實施例中,動作可以并行、以另一順序和/或與這里未呈現(xiàn)和描述的其它動作一起出現(xiàn)。另外,可以不需要所有所示動作以實施根據(jù)這里描述的主題內(nèi)容的各方面的方法。此外,本領(lǐng)域技術(shù)人員將明白和理解方法可替代地可以經(jīng)由狀態(tài)圖表示為一系列內(nèi)部相關(guān)的狀態(tài),或可以表示為事件。
圖3-4是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面從應(yīng)用的角度來看可以出現(xiàn)的示例動作的框圖。轉(zhuǎn)向圖3,在塊305,動作開始。
在塊310,請求來自儲存器的數(shù)據(jù)。例如參照圖2,應(yīng)用205可以通過向文件系統(tǒng) 207發(fā)送I/O請求來請求存儲的數(shù)據(jù)。
在塊315,獲得與請求的數(shù)據(jù)對應(yīng)的校驗和數(shù)據(jù)。例如參照圖2,應(yīng)用205可以從儲存器210獲得與在塊310請求的數(shù)據(jù)對應(yīng)的校驗和。如果希望,與塊205和210關(guān)聯(lián)的動作則可以并行進(jìn)行。
在塊320,從儲存器接收數(shù)據(jù)。例如參照圖2,應(yīng)用205從文件系統(tǒng)207接收數(shù)據(jù) (該文件系統(tǒng)從冗余管理器208獲得該數(shù)據(jù),該冗余管理器從儲存器212-214中的一個或者多個儲存器獲得數(shù)據(jù))。
在塊25,數(shù)據(jù)被驗證。例如參照圖2,應(yīng)用使用校驗和來驗證請求的來自文件系統(tǒng) 207的數(shù)據(jù)。這一驗證可以例如涉及到計算請求的來自文件系統(tǒng)207的數(shù)據(jù)的校驗和并且比較這一校驗和與從儲存器210獲得的校驗和。
在塊330,如果數(shù)據(jù)破壞(例如校驗和未匹配),則動作在塊335繼續(xù);否則,動作在塊340繼續(xù)。
在塊335,嘗試糾正已破壞的數(shù)據(jù),如結(jié)合圖4更具體描述的。
在塊340,如果有其它動作則可以執(zhí)行其它動作。
轉(zhuǎn)到圖4,在塊410,如果有數(shù)據(jù)的副本,則請求來自儲存器的數(shù)據(jù)的副本。例如參照圖2,應(yīng)用205請求來自文件系統(tǒng)207的數(shù)據(jù)的一個或者多個副本。
有時這里使用措辭“文件句柄”或者“句柄”。這些術(shù)語中的每個術(shù)語將理解為意味著可以用于訪問文件的任何指示符。例如文件句柄可以包括整數(shù)、指針、引用數(shù)據(jù)結(jié)構(gòu)(該數(shù)據(jù)結(jié)構(gòu)提供關(guān)于文件的上下文)的數(shù)據(jù)或者可以用來訪問文件的其它數(shù)據(jù)等。例如文件句柄可以在文件系統(tǒng)打開用于進(jìn)程的文件時由文件系統(tǒng)返回給進(jìn)程并且可以在進(jìn)程請求對文件執(zhí)行操作時由進(jìn)程提供給文件系統(tǒng)。
在一個實施例中,應(yīng)用205可以通過向文件系統(tǒng)207指示用于文件句柄的后續(xù)操作將由指示的副本滿足來請求具體副本。作為響應(yīng),文件系統(tǒng)207可以設(shè)置句柄的屬性以指示用于后續(xù)操作的具體副本。隨后,在應(yīng)用205以別的方式命令之前,無論文件系統(tǒng)何時接收與句柄關(guān)聯(lián)的請求,文件系統(tǒng)207都可以在與冗余管理器208通信時指定將滿足請求的具體副本。在應(yīng)用205完成請求數(shù)據(jù)的具體副本之后,應(yīng)用可以指示任何副本可以用來滿足與句柄關(guān)聯(lián)的請求。作為響應(yīng),文件系統(tǒng)207例如可以設(shè)置句柄的屬性以針對后續(xù)操作指示這一點。
使用上述機制,洗刷器206可以打開用于存儲于儲存器212-214中的文件的每個副本的句柄。洗刷器可以指示每個句柄與特定副本關(guān)聯(lián)、然后可以使用每個句柄以訪問數(shù)據(jù)的不同副本。
在另一實施例中,指示指定的副本的標(biāo)識符可以與每個I/O請求一起傳遞給文件系統(tǒng)207。
在另一實施例中,應(yīng)用205可以在訪問數(shù)據(jù)的具體副本時調(diào)用文件系統(tǒng)207的不同讀取方法。不同讀取方法可以允許應(yīng)用205指示將被讀取數(shù)據(jù)的具體副本。
在接收針對數(shù)據(jù)的具體副本的請求之后,文件系統(tǒng)207向冗余管理器208轉(zhuǎn)發(fā)請求或者根據(jù)請求導(dǎo)出的請求,該冗余管理器獲得一個或者多個副本的數(shù)據(jù)并且將它返回給文件系統(tǒng)207。文件系統(tǒng)又進(jìn)而將數(shù)據(jù)返回給應(yīng)用。文件系統(tǒng)207和冗余管理器208可以暴露應(yīng) 用編程接口(API ),該API允許程序查詢數(shù)據(jù)的副本數(shù)目并且指示什么副本將用來向程序提供數(shù)據(jù)。應(yīng)用205可以使用這一結(jié)構(gòu)以按照標(biāo)識符(例如編號或者其它標(biāo)識符)請求副本。應(yīng)用205可以如希望的那樣并行或者依次請求數(shù)據(jù)的副本。
在一個實施例中,請求副本在找到第一有效副本之后停止。在另一實施例中,請求并驗證數(shù)據(jù)的所有副本以糾正可能已破壞任何其它副本。
在塊415,針對在塊410請求的副本執(zhí)行驗證。例如參照圖2,如果有存儲于儲存器212-214上的兩個副本,則應(yīng)用205可以請求兩個副本中的每個副本并且可以使用先前從儲存器210獲得的校驗和來驗證它們。應(yīng)用205可以填充列表、數(shù)組或者其它數(shù)據(jù)結(jié)構(gòu)以跟蹤哪些副本包含已破壞的數(shù)據(jù)而哪些包含未破壞的數(shù)據(jù)。如果副本中的至少一個副本包含未破壞的數(shù)據(jù),則這一副本可以用來修復(fù)原有數(shù)據(jù)和包括已破壞的數(shù)據(jù)的任何其它副本。
在塊420,如果發(fā)現(xiàn)至少一個完好的副本,則動作在塊425繼續(xù);否則,動作可以在塊435繼續(xù)。
在塊425,生成修復(fù)數(shù)據(jù)。例如參照圖2,應(yīng)用205可以生成修復(fù)數(shù)據(jù)以經(jīng)由API 發(fā)送給文件系統(tǒng)207。修復(fù)數(shù)據(jù)可以標(biāo)識數(shù)據(jù)的未破壞的副本、需要根據(jù)冗余副本糾正原有數(shù)據(jù)的指示和如果有什么其它副本則需要根據(jù)完好的副本糾正什么其它副本的指示。如果原有數(shù)據(jù)和其它副本都僅視為數(shù)據(jù)的副本,則修復(fù)數(shù)據(jù)可以標(biāo)識數(shù)據(jù)的未破壞的副本和需要根據(jù)未破壞的副本糾正的一個或者多個其它副本的指示。
在塊430,調(diào)用修復(fù)操作。例如應(yīng)用205可以向文件系統(tǒng)207發(fā)送修復(fù)數(shù)據(jù),該文件系統(tǒng)可以向冗余管理器208發(fā)送修復(fù)數(shù)據(jù)或者根據(jù)修復(fù)數(shù)據(jù)導(dǎo)出的修復(fù)數(shù)據(jù)。調(diào)用存儲系統(tǒng)的修復(fù)操作命令存儲系統(tǒng)修復(fù)該修復(fù)數(shù)據(jù)指示的已破壞的數(shù)據(jù)。
在一個實施方式中,修復(fù)操作可能在修復(fù)過程中失敗。例如如果修復(fù)數(shù)據(jù)指示將根據(jù)完好的64千字節(jié)的副本修復(fù)64千字節(jié)的塊,則錯誤可能在修復(fù)過程中(例如在64千字節(jié)塊的扇區(qū)m的扇區(qū)η)出現(xiàn)。在這一情況下,冗余管理器208可以一旦錯誤出現(xiàn)就停止修復(fù)并且可以提供指示修復(fù)在它失敗之前進(jìn)行了多少的數(shù)據(jù)。應(yīng)用205然后可以判決在該時間點做什么。例如應(yīng)用205可以嘗試重試整個修復(fù)、重試失敗的修復(fù)的部分、分配文件系統(tǒng)上的其它空間并且向分配的空間復(fù)制文件、終止修復(fù)過程、采取其它動作等。
在塊435,如果有其它動作則執(zhí)行其它動作。
圖5是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面從洗刷器的角度來看可以出現(xiàn)的示例性動作的框圖。圖5中所示動作可以在可配置或者固定的時間出現(xiàn)。例如洗刷器可以定期驗證一個或者多個卷、文件或者其部分、數(shù)據(jù)塊的集合并且嘗試糾正其中發(fā)現(xiàn)的任何已破壞的數(shù)據(jù)。
轉(zhuǎn)向圖5,在塊505,動作開始。
在塊510,選擇待洗刷的文件(例如尋找文件的數(shù)據(jù)的副本中的數(shù)據(jù)破壞)。例如參照圖2,洗刷器206可以訪問數(shù)據(jù)結(jié)構(gòu)(例如列表、匯集、文件系統(tǒng)元數(shù)據(jù)等),該數(shù)據(jù)結(jié)構(gòu)指示將由洗刷器206洗刷的文件。洗刷器206可以從數(shù)據(jù)結(jié)構(gòu)指示的文件之一開始并且工作于數(shù)據(jù)結(jié)構(gòu)指示的文件直至已經(jīng)洗刷所有文件。
在塊515,請求并且視需要修復(fù)來自文件的數(shù)據(jù)塊。例如在選擇文件之后,類似于結(jié)合圖3和4所描述的應(yīng)用如何從儲存器請求數(shù)據(jù)并視需要修復(fù)該數(shù)據(jù),洗刷器206可以開始請求和修復(fù)(視需要)來自文件的數(shù)據(jù)塊。
在塊520,如果洗刷器具有待洗刷的另一文件,則動作在塊510繼續(xù);否則,動作在塊525繼續(xù)。
在塊525,如果有其它動作則可以執(zhí)行其它動作。
圖6是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面從存儲系統(tǒng)的角度來看可以出現(xiàn)的示例動作的框圖 。在塊605,動作開始。
在塊610,從請求者接收請求。請求是對根據(jù)數(shù)據(jù)的冗余的未破壞的副本糾正已破壞的數(shù)據(jù)的請求。該請求指示(例如標(biāo)識)數(shù)據(jù)的未破壞的副本。已破壞的數(shù)據(jù)可以包括數(shù)據(jù)的一個或者多個副本。數(shù)據(jù)的一個或者多個副本也由該請求指示。請求者使用請求者維護(hù)的校驗和來確定已破壞的數(shù)據(jù)已破壞。如果有由托管存儲數(shù)據(jù)及其冗余副本的存儲設(shè)備的存儲系統(tǒng)維護(hù)的任何校驗和,則該校驗和是其的附加校驗和。
例如參照圖2,冗余管理器208可以接收對根據(jù)位于儲存器215上的未破壞的數(shù)據(jù)糾正儲存器212和213上的已破壞的數(shù)據(jù)的請求。可以從應(yīng)用205或者洗刷器206發(fā)送這一請求。
在塊615,嘗試使用數(shù)據(jù)的冗余未破壞的副本來糾正已破壞的數(shù)據(jù)。例如參照圖 6,來自儲存器215的數(shù)據(jù)可以用來嘗試?yán)缤ㄟ^在數(shù)據(jù)的已破壞副本中的每個副本之上復(fù)制來自未破壞的副本的數(shù)據(jù)來糾正儲存器212和213上的已破壞的數(shù)據(jù)。在另一例子中, 其它糾正可以出現(xiàn)(比如僅重寫已破壞的數(shù)據(jù)的已破壞那些部分)。在又一例子中,為了嘗試糾正已破壞的數(shù)據(jù),可以發(fā)出一個或者多個寫入操作以改寫數(shù)據(jù)的所有副本。在這一例子中,甚至可以改寫可能具有未破壞的數(shù)據(jù)的副本。
在塊620,如果糾正成功,則動作在塊635繼續(xù),其中向請求者發(fā)送指示糾正成功的數(shù)據(jù)。然而如果糾正失敗,則動作在塊625繼續(xù)。
在塊625,如果糾正已破壞的數(shù)據(jù)文件的嘗試的任何部分失敗,則停止任何后續(xù)糾正動作。例如參照圖2,如果冗余管理器208不能糾正儲存器212的數(shù)據(jù),則冗余管理器208 可以停止與請求對應(yīng)的任何附加糾正動作。換言之,在一個實施例中,如果嘗試在嘗試糾正數(shù)據(jù)時的某一點失敗,則冗余管理器208可以不試著糾正任何更多已破壞的數(shù)據(jù)。在另一實施例中,冗余管理器208可以在向應(yīng)用發(fā)送返回代碼之前經(jīng)過該點繼續(xù)并且嘗試糾正已破壞的數(shù)據(jù)的其它部分。
在塊630,生成返回數(shù)據(jù),該數(shù)據(jù)指示糾正已破壞的數(shù)據(jù)的嘗試失敗并且指示失敗點。例如參照圖2,如果冗余管理器208能夠在它達(dá)到失敗之前糾正已破壞文件的前4K,則冗余管理器208可以生成指示此的數(shù)據(jù)。
在塊635,向請求者發(fā)送返回數(shù)據(jù)。例如參照圖2,冗余管理器208可以向文件系統(tǒng)207發(fā)送返回數(shù)據(jù),該文件系統(tǒng)可以將它發(fā)送到請求者(例如應(yīng)用205或者洗刷器206)。
在塊640,如果有其它動作則可以執(zhí)行其它動作。
在一些基于RAID的存儲系統(tǒng)的情況下,附加和/或其它動作可以出現(xiàn)以糾正數(shù)據(jù)。例如在RAID 5和一些其它RAID系統(tǒng)中,可以跨多個盤來條化塊。如果盤之一上的單個塊失效,則可以將其它盤上的塊與奇偶校驗一起用來重建它。然而如果條中的塊的一個或者多個副本破壞,則修復(fù)一個副本并且重新計算奇偶校驗可能通過使錯誤不可逆來“困難化”它。
圖7是一般而言代表根據(jù)這里描述的主題內(nèi)容的各方面的在基于RAID的存儲系統(tǒng)中跨盤的數(shù)據(jù)的條化的框圖。如圖所示,存儲系統(tǒng)包括6個數(shù)據(jù)塊705-710和奇偶校驗塊711,但是在其它實施方式中可以有更多或者更少數(shù)據(jù)塊和/或更多奇偶校驗塊。塊705 和706包括用于應(yīng)用A的數(shù)據(jù);塊707和708包括用于應(yīng)用B的數(shù)據(jù),并且應(yīng)用709和710 包括用于應(yīng)用F的數(shù)據(jù)。
如果應(yīng)用或者洗刷器在塊的讀取中檢測到已破壞的數(shù)據(jù),則用于修復(fù)這一數(shù)據(jù)的示例性序列如下1.使有效性檢查對所有原有數(shù)據(jù)塊(這些數(shù)據(jù)塊是相同條的部分(例如塊705-710)) 執(zhí)行?!霸小睌?shù)據(jù)塊是可以不運用奇偶校驗塊獲得的物理上存在于盤上的數(shù)據(jù)塊;2.如果可能則使用奇偶校驗位和條的其它未破壞塊來修復(fù)每個已破壞的原數(shù)據(jù)塊;3.如果需要則根據(jù)修復(fù)的塊重新生成用于條的奇偶校驗塊。
作為例子,如果在塊708上檢測到錯誤,則將檢查塊705-707和709-710尋找錯誤。如果這些塊未破壞,則它們將與奇偶校驗塊711 —起用來糾正塊708。如果這些塊中的任何塊已破壞,則將需要在可以糾正塊708之前糾正它們。如果不能糾正塊,則指示壞條的錯誤可以由應(yīng)用/洗刷器生成。
此外,如果應(yīng)用/洗刷器保留關(guān)于奇偶校驗塊的校驗和和/或有兩個奇偶校驗塊, 則在需要奇偶校驗塊以重建已破壞原有塊的情況下可以執(zhí)行檢查以確定奇偶校驗塊的有效性并且可以如同其它塊那樣糾正奇偶校驗塊。
上述原理和教導(dǎo)也可以應(yīng)用于駐留于文件系統(tǒng)中的部件。例如在一個實施例中, 參照圖8,文件系統(tǒng)207可以具有應(yīng)用205或者洗刷器206的功能。在這一實施例中,使用讀取請求,文件系統(tǒng)207可以使用校驗和數(shù)據(jù)209來驗證從儲存器212-214返回的數(shù)據(jù)并且可以視需要使用先前已經(jīng)描述的相同技術(shù)來糾正返回的該數(shù)據(jù)。這可以在讀取請求的始發(fā)請求者已知或者未知數(shù)據(jù)在被返回之前被糾正的情況下完成。
類似地,在一個實施例中,文件系統(tǒng)207的部件可以具有洗刷器206的功能。在兩個上述實施例中,文件系統(tǒng)207也可以將校驗和數(shù)據(jù)209作為用于存儲的僅有的文件系統(tǒng)校驗和數(shù)據(jù)來維護(hù)或者作為文件系統(tǒng)207維護(hù)的任何其它校驗和數(shù)據(jù)的附加校驗和數(shù)據(jù)。 另外,在這些實施例中,文件系統(tǒng)207可以始發(fā)對糾正已破壞的數(shù)據(jù)的請求(即這些請求的來源)。
如從前文具體描述可見,已經(jīng)描述與修復(fù)存儲系統(tǒng)的數(shù)據(jù)有關(guān)的各方面。盡管這里描述的主題內(nèi)容的各方面易有各種修改和替代構(gòu)造,但是在附圖中示出了并且上文已經(jīng)具體描述了其某些所示實施例。然而應(yīng)當(dāng)理解,未旨在于使要求保護(hù)的主題內(nèi)容的各方面限于公開的具體形式,但是恰好相反,旨在于覆蓋落入這里描述的主題內(nèi)容的各種方面的精神實質(zhì)和范圍內(nèi)的所有修改、替代構(gòu)造和等效物。
權(quán)利要求
1.一種至少部分由計算機實施的方法,所述方法包括 從儲存器接收(320)已破壞的數(shù)據(jù),所述已破壞的數(shù)據(jù)具有可從托管所述儲存器的存儲系統(tǒng)獲得的一個或者多個冗余副本; 獲得(315)與所述已破壞的數(shù)據(jù)對應(yīng)的校驗和,如果有所述存儲系統(tǒng)維護(hù)的存儲校驗和,則所述校驗和是所述存儲校驗和的附加校驗和; 經(jīng)由所述校驗和確定(325)所述已破壞的數(shù)據(jù)是否已破壞;并且 嘗試(335)使用所述一個或者多個冗余副本來糾正所述已破壞的數(shù)據(jù)。
2.根據(jù)權(quán)利要求I所述的方法,還包括在所述存儲系統(tǒng)以外執(zhí)行的進(jìn)程請求所述存儲系統(tǒng)的數(shù)據(jù),并且其中從所述儲存器接收所述已破壞的數(shù)據(jù)包括響應(yīng)于所述請求所述存儲系統(tǒng)的數(shù)據(jù)來接收所述已破壞的數(shù)據(jù)。
3.根據(jù)權(quán)利要求2所述的方法,其中獲得與已破壞的數(shù)據(jù)對應(yīng)的校驗和包括所述進(jìn)程從有可能除了所述存儲系統(tǒng)托管的儲存器之外的儲存器獲得所述校驗和。
4.根據(jù)權(quán)利要求I所述的方法,其中嘗試根據(jù)所述一個或者多個冗余副本糾正所述冗余數(shù)據(jù)包括使動作集生效,所述動作集包括 請求所述一個或者多個冗余副本之中的冗余副本的冗余數(shù)據(jù); 用所述校驗和使所述冗余數(shù)據(jù)生效; 如果所述冗余數(shù)據(jù)已破壞,則指示所述冗余數(shù)據(jù)已破壞。
5.根據(jù)權(quán)利要求4所述的方法,還包括如果有其它一個或者多個冗余副本,則針對所述其它一個或者多個冗余副本中的每個冗余副本重復(fù)所述動作集。
6.根據(jù)權(quán)利要求5所述的方法,還包括生成修復(fù)數(shù)據(jù),所述修復(fù)數(shù)據(jù)指示將修復(fù)所述已破壞的數(shù)據(jù)并且指示將被根據(jù)來糾正所述已破壞的數(shù)據(jù)的未破壞冗余副本。
7.根據(jù)權(quán)利要求6所述的方法,其中生成修復(fù)數(shù)據(jù)也包括生成指示也將根據(jù)所述未破壞冗余副本糾正的零個或者更多個已破壞冗余副本的數(shù)據(jù)。
8.—種在計算環(huán)境中的系統(tǒng),包括 存儲設(shè)備集(212-214),可操作用于存儲數(shù)據(jù); 文件系統(tǒng)(207)可操作用于提供對所述存儲設(shè)備集上的數(shù)據(jù)的訪問;以及冗余管理器(208 ),可操作用于存儲所述存儲設(shè)備上的所述數(shù)據(jù)的冗余副本,所述冗余管理器還可操作用于暴露接口,可以通過所述接口指示所述數(shù)據(jù)或者其冗余副本用于從一個或者多個存儲設(shè)備讀取,所述冗余管理器還可操作用于接收對糾正所述數(shù)據(jù)和/或其冗余副本的請求并且響應(yīng)于所述請求來使用所述請求指示的所述數(shù)據(jù)的未破壞的副本以修復(fù)所述數(shù)據(jù)和/或其冗余副本。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),還包括可操作用于提供所述請求的實體,所述實體可操作用于通過執(zhí)行動作來確定已破壞的數(shù)據(jù),所述動作包括 獲得與所述已破壞的數(shù)據(jù)對應(yīng)的第一校驗和,如果有托管所述存儲設(shè)備集的存儲系統(tǒng)維護(hù)的存儲校驗和,則所述第一校驗和是所述存儲校驗和的附加校驗和; 使用所述已破壞的數(shù)據(jù)來計算第二校驗和;并且 比較所述第一校驗和與所述第二校驗和。
10.一種具有計算機可執(zhí)行指令的計算機存儲介質(zhì),所述計算機可執(zhí)行指令在被執(zhí)行時執(zhí)行動作,所述動作包括從請求者接收(610)對根據(jù)數(shù)據(jù)的冗余未破壞的副本糾正已破壞的數(shù)據(jù)的請求,所述請求指示所述數(shù)據(jù)的所述未破壞的副本,所述已破壞的數(shù)據(jù)包括所述數(shù)據(jù)的一個或者多個副本,所述數(shù)據(jù)的所述一個或者多個副本也由所述請求指示,所述請求者使用所述請求者維護(hù)的第一校驗和來確定所述已破壞的數(shù)據(jù)已破壞,如果有存儲系統(tǒng)維護(hù)的第二校驗和,則所述第一校驗和是所述第二校驗和的附加校驗和,所述存儲系統(tǒng)托管存儲所述已破壞的數(shù)據(jù)和所述數(shù)據(jù)的所述未破壞的副本的存儲設(shè)備; 嘗試(615)使用所述數(shù)據(jù)的所述冗余未破壞的副本來糾正所述已破壞的數(shù)據(jù);并且 發(fā)送(635)返回數(shù)據(jù),所述返回數(shù)據(jù)指示嘗試糾正所述已破壞的數(shù)據(jù)是成功或者失敗。·
全文摘要
這里描述的主題內(nèi)容的方面涉及查詢和修復(fù)數(shù)據(jù)。在方面中,部件可以檢測儲存器上的已經(jīng)變成已破壞。作為響應(yīng),部件可以請求來自數(shù)據(jù)的一個或者多個冗余副本的數(shù)據(jù)并且如果有則可以確定冗余副本中的哪些冗余副本未破壞。如果發(fā)現(xiàn)未破壞的副本,則部件可以發(fā)送修復(fù)已破壞的數(shù)據(jù)的請求并且可以標(biāo)識用來修復(fù)已破壞的數(shù)據(jù)的未破壞的副本。
文檔編號G06F11/14GK102937922SQ20121033585
公開日2013年2月20日 申請日期2012年9月12日 優(yōu)先權(quán)日2011年9月12日
發(fā)明者李齊晟, T.J.米勒, N.R.克里斯蒂安森, M.S.加森 申請人:微軟公司