本公開(kāi)涉及用于管理存儲(chǔ)的系統(tǒng)和方法,以及具體地,涉及用于管理存儲(chǔ)錯(cuò)誤狀況的系統(tǒng)、方法、裝置和接口。
背景技術(shù):
存儲(chǔ)陣列可包括一組兩個(gè)或更多個(gè)存儲(chǔ)裝置,并且可用于增加存儲(chǔ)服務(wù)的容量、性能和可靠性。存儲(chǔ)陣列的控制器可被配置成利用諸如奇偶校驗(yàn)信息的冗余重構(gòu)元數(shù)據(jù)在陣列的兩個(gè)或更多個(gè)存儲(chǔ)裝置上寫(xiě)入數(shù)據(jù)。如果一個(gè)或更多個(gè)寫(xiě)操作失敗,則存儲(chǔ)在陣列上的數(shù)據(jù)可能是不完整的和/或不對(duì)應(yīng)于重構(gòu)元數(shù)據(jù)(例如,可導(dǎo)致“寫(xiě)漏洞(writehole)”)。存儲(chǔ)陣列控制器可能不能夠通過(guò)使用重構(gòu)元數(shù)據(jù)來(lái)檢測(cè)和/或校正此種錯(cuò)誤。此外,使用陣列上的重構(gòu)元數(shù)據(jù)來(lái)糾正此種錯(cuò)誤可能會(huì)導(dǎo)致進(jìn)一步的數(shù)據(jù)損壞。因此,需要用于存儲(chǔ)錯(cuò)誤管理的系統(tǒng)、方法、裝置和/或接口。
附圖說(shuō)明
圖1a為被配置成管理存儲(chǔ)錯(cuò)誤的系統(tǒng)的一個(gè)實(shí)施例的示意性框圖;
圖1b為將數(shù)據(jù)組寫(xiě)入存儲(chǔ)陣列的操作的一個(gè)實(shí)施例的示意性框圖;
圖1c為用于驗(yàn)證/使有效(validate)存儲(chǔ)在存儲(chǔ)陣列上的數(shù)據(jù)組的操作的一個(gè)實(shí)施例的示意性框圖;
圖1d為用于再同步存儲(chǔ)在存儲(chǔ)陣列上的數(shù)據(jù)組的操作的一個(gè)實(shí)施例的示意性框圖;
圖1e為恢復(fù)存儲(chǔ)在存儲(chǔ)陣列上的數(shù)據(jù)組的一部分的操作的一個(gè)實(shí)施例的示意性框圖;
圖1f為存儲(chǔ)陣列中的寫(xiě)漏洞的一個(gè)實(shí)施例的示意性框圖;
圖1g為被配置成寫(xiě)入與數(shù)據(jù)組相關(guān)的完整性數(shù)據(jù)的存儲(chǔ)層的一個(gè)實(shí)施例的示意性框圖;
圖1h為被配置成通過(guò)使用完整性數(shù)據(jù)驗(yàn)證存儲(chǔ)數(shù)據(jù)組的存儲(chǔ)層的一個(gè)實(shí)施例的示意性框圖;
圖1i為被配置成通過(guò)使用完整性數(shù)據(jù)驗(yàn)證存儲(chǔ)數(shù)據(jù)組的存儲(chǔ)層的另一實(shí)施例的示意性框圖;
圖1j為被配置成驗(yàn)證在存儲(chǔ)陣列上保存的存儲(chǔ)日志中的數(shù)據(jù)組的存儲(chǔ)層的一個(gè)實(shí)施例的示意性框圖;
圖2為用于存儲(chǔ)錯(cuò)誤管理的方法的一個(gè)實(shí)施例的流程圖;
圖3為用于存儲(chǔ)錯(cuò)誤管理的方法的另一實(shí)施例的流程圖;
圖4為用于存儲(chǔ)錯(cuò)誤管理的方法的另一實(shí)施例的流程圖;
圖5a為用于管理存儲(chǔ)錯(cuò)誤的系統(tǒng)的另一實(shí)施例的示意性框圖;
圖5b描繪了由存儲(chǔ)服務(wù)層管理的虛擬化元數(shù)據(jù)的實(shí)施例;
圖5c描繪了上下文數(shù)據(jù)存儲(chǔ)格式的實(shí)施例;
圖5d描繪了包括被配置成作為數(shù)據(jù)組存儲(chǔ)在存儲(chǔ)陣列上的持久性元數(shù)據(jù)的數(shù)據(jù)集的實(shí)施例;
圖5e描繪了包括被配置成作為數(shù)據(jù)組存儲(chǔ)在存儲(chǔ)陣列上的持久性元數(shù)據(jù)的數(shù)據(jù)集的實(shí)施例;
圖5f描繪了包括被配置成作為數(shù)據(jù)組存儲(chǔ)在存儲(chǔ)陣列上的持久性元數(shù)據(jù)的數(shù)據(jù)集的實(shí)施例;
圖5g描繪了被配置成用于存儲(chǔ)在存儲(chǔ)陣列上并與元數(shù)據(jù)日志中的持久性元數(shù)據(jù)條目相關(guān)聯(lián)的數(shù)據(jù)集的實(shí)施例;
圖5h描繪了使包含寫(xiě)漏洞的數(shù)據(jù)組無(wú)效的實(shí)施例;
圖5i描繪了用于管理存儲(chǔ)數(shù)據(jù)組中的寫(xiě)漏洞的實(shí)施例;
圖5j描繪了迭代奇偶校驗(yàn)替換操作的實(shí)施例;
圖6a描繪了存儲(chǔ)服務(wù)層的存儲(chǔ)日志的實(shí)施例;
圖6b描繪了存儲(chǔ)服務(wù)層的存儲(chǔ)日志的其他實(shí)施例;
圖7為用于管理存儲(chǔ)錯(cuò)誤的系統(tǒng)的另一實(shí)施例的示意性框圖;
圖8a為包括日志存儲(chǔ)(journalstorage)的用于管理存儲(chǔ)錯(cuò)誤的系統(tǒng)的另一實(shí)施例的示意性框圖;
圖8b為用于通過(guò)使用日志存儲(chǔ)來(lái)管理存儲(chǔ)錯(cuò)誤的系統(tǒng)的另一實(shí)施例的示意性框圖;
圖9為用于管理存儲(chǔ)錯(cuò)誤的方法的另一實(shí)施例的流程圖;
圖10為用于管理存儲(chǔ)錯(cuò)誤的方法的另一實(shí)施例的流程圖;
圖11為用于從存儲(chǔ)錯(cuò)誤中恢復(fù)的方法的一個(gè)實(shí)施例的流程圖;
圖12為用于通過(guò)使用次序日志管理存儲(chǔ)錯(cuò)誤的方法的一個(gè)實(shí)施例的流程圖;以及
圖13為通過(guò)使用日志存儲(chǔ)來(lái)管理存儲(chǔ)錯(cuò)誤的方法的一個(gè)實(shí)施例的流程圖。
具體實(shí)施方式
數(shù)據(jù)服務(wù)層和/或模塊可被配置成通過(guò)使用一個(gè)或更多個(gè)低級(jí)存儲(chǔ)資源向一個(gè)或更多個(gè)客戶端提供存儲(chǔ)服務(wù)。數(shù)據(jù)服務(wù)層可被配置成尤其是管理在低級(jí)存儲(chǔ)資源上的數(shù)據(jù)單元的存儲(chǔ)和檢索。如本文所使用的,存儲(chǔ)資源是指能夠維護(hù)i/o和/或存儲(chǔ)請(qǐng)求的任何裝置、服務(wù)、模塊和/或?qū)?。因此,存?chǔ)資源可包括但不限于:硬盤(pán)驅(qū)動(dòng)器(例如,磁存儲(chǔ)介質(zhì))、電池支持的隨機(jī)存取存儲(chǔ)器(ram)、固態(tài)存儲(chǔ)介質(zhì)、磁盤(pán)陣列(例如,廉價(jià)磁盤(pán)冗余陣列(raid))、存儲(chǔ)區(qū)域網(wǎng)絡(luò)(san)、邏輯單元(例如,兼容存儲(chǔ)資源的小型計(jì)算機(jī)系統(tǒng)接口(scsi))、虛擬邏輯單元、軟件定義的存儲(chǔ)資源等。存儲(chǔ)資源可包括物理存儲(chǔ)介質(zhì)。數(shù)據(jù)單元是指任何數(shù)據(jù)量。因此,數(shù)據(jù)單元可包括但不限于:塊、扇區(qū)、區(qū)段、頁(yè)面、包、分區(qū)等。
在一些實(shí)施例中,數(shù)據(jù)服務(wù)層管理在包括多個(gè)存儲(chǔ)元件的存儲(chǔ)陣列上的數(shù)據(jù)單元的存儲(chǔ)和檢索。如本文所使用的,存儲(chǔ)陣列是指包括兩個(gè)或更多個(gè)存儲(chǔ)元件的存儲(chǔ)資源。存儲(chǔ)陣列可包括但不限于:raid、混合raid、嵌套raid、磁盤(pán)簇(justabunchofdisks,jbod)存儲(chǔ)系統(tǒng)、span存儲(chǔ)系統(tǒng)、big存儲(chǔ)系統(tǒng)、大規(guī)??臻e驅(qū)動(dòng)器陣列(maid)等。如本文所使用的,存儲(chǔ)陣列的存儲(chǔ)元件可包括任何合適的存儲(chǔ)資源,包括但不限于:存儲(chǔ)介質(zhì)、平面(plane)、管芯、信道、存儲(chǔ)庫(kù)(bank)、存儲(chǔ)裝置、磁盤(pán)等。存儲(chǔ)陣列的存儲(chǔ)元件可由陣列控制器管理,陣列控制器可包括但不限于:控制器、存儲(chǔ)控制器、存儲(chǔ)陣列控制器、軟件陣列控制器、硬件陣列控制器、存儲(chǔ)引擎、raid控制器、raid存儲(chǔ)引擎、raid存儲(chǔ)系統(tǒng)、軟件raid控制器、硬件raid控制器等。陣列控制器可被配置成在存儲(chǔ)陣列的存儲(chǔ)元件上存儲(chǔ)“數(shù)據(jù)組”。如本文所使用的,“數(shù)據(jù)組”是指被配置成用于存儲(chǔ)在存儲(chǔ)陣列的不同相應(yīng)存儲(chǔ)元件上的兩個(gè)或更多個(gè)數(shù)據(jù)單元的集合。在一些實(shí)施例中,存儲(chǔ)陣列的數(shù)據(jù)單元可與上級(jí)存儲(chǔ)客戶端的數(shù)據(jù)單元不同(例如,存儲(chǔ)陣列的數(shù)據(jù)單元可對(duì)應(yīng)于存儲(chǔ)陣列的下面的存儲(chǔ)元件的存儲(chǔ)粒度)。因此,存儲(chǔ)陣列數(shù)據(jù)組的數(shù)據(jù)單元可對(duì)應(yīng)于存儲(chǔ)陣列的存儲(chǔ)元件的存儲(chǔ)元件塊、頁(yè)面、扇區(qū)、包、區(qū)段和/或其他存儲(chǔ)位置。
在一些實(shí)施例中,陣列控制器被配置成將數(shù)據(jù)組存儲(chǔ)在存儲(chǔ)陣列的兩個(gè)或更多個(gè)不同的存儲(chǔ)元件上。控制器可另外被配置成由其是通過(guò)在兩個(gè)或更多個(gè)不同的存儲(chǔ)元件上鏡像數(shù)據(jù)組來(lái)冗余地存儲(chǔ)數(shù)據(jù)組。另選地或除此之外,陣列控制器可另外被配置成管理與被寫(xiě)入存儲(chǔ)陣列的數(shù)據(jù)組有關(guān)的陣列元數(shù)據(jù)。如本文所使用的,“陣列元數(shù)據(jù)”是指與被寫(xiě)入存儲(chǔ)陣列的數(shù)據(jù)組有關(guān)的任何元數(shù)據(jù),并且可包括但不限于:被配置成用于驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列上(和/或從存儲(chǔ)元件讀取)的數(shù)據(jù)的完整性的數(shù)據(jù),諸如散列值、奇偶校驗(yàn)數(shù)據(jù)、摘要、簽名,校驗(yàn)和等;用于標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組中的(一個(gè)或更多個(gè))錯(cuò)誤的錯(cuò)誤檢測(cè)元數(shù)據(jù);用于校正存儲(chǔ)數(shù)據(jù)組中的(一個(gè)或更多個(gè))錯(cuò)誤的糾錯(cuò)元數(shù)據(jù)(例如,糾錯(cuò)碼(ecc)元數(shù)據(jù),諸如ecc編碼、ecc符號(hào)數(shù)據(jù)等);用于重構(gòu)存儲(chǔ)數(shù)據(jù)組的部分的重構(gòu)數(shù)據(jù)(例如,奇偶校驗(yàn)重構(gòu)數(shù)據(jù));等等。因此,將數(shù)據(jù)組寫(xiě)入存儲(chǔ)陣列可包括:a)生成數(shù)據(jù)組的陣列元數(shù)據(jù),以及b)對(duì)存儲(chǔ)陣列的不同存儲(chǔ)元件執(zhí)行多個(gè)寫(xiě)操作。一個(gè)或更多個(gè)寫(xiě)操作中的錯(cuò)誤可能導(dǎo)致在存儲(chǔ)陣列上存儲(chǔ)“不完整”或“損壞”的數(shù)據(jù)組。如本文所使用的,“不完整的數(shù)據(jù)組”是指部分但不完全寫(xiě)入存儲(chǔ)陣列的數(shù)據(jù)組。不完整的數(shù)據(jù)組可指的是僅將數(shù)據(jù)組的一部分寫(xiě)入存儲(chǔ)陣列,使得數(shù)據(jù)組的其他部分不被寫(xiě)入存儲(chǔ)陣列。寫(xiě)入不完整的數(shù)據(jù)組可包括將數(shù)據(jù)組的數(shù)據(jù)單元的子集寫(xiě)入存儲(chǔ)陣列(例如,寫(xiě)入數(shù)據(jù)組的一個(gè)或更多個(gè)數(shù)據(jù)單元而無(wú)需將數(shù)據(jù)組的一個(gè)或更多個(gè)其他數(shù)據(jù)單元寫(xiě)入存儲(chǔ)陣列)。另選地或除此之外,不完整的數(shù)據(jù)組可指的是寫(xiě)入數(shù)據(jù)組的數(shù)據(jù)單元而無(wú)需寫(xiě)入對(duì)應(yīng)的陣列元數(shù)據(jù)。因此,“不完整”數(shù)據(jù)組可被稱(chēng)為包括“寫(xiě)漏洞”的數(shù)據(jù)組。如上所述,寫(xiě)漏洞可由于“無(wú)效關(guān)機(jī)”狀況而產(chǎn)生。如本文所使用的,“無(wú)效關(guān)機(jī)”狀況是指存儲(chǔ)陣列的存儲(chǔ)操作的任何故障和/或中斷,并且可包括但不限于:電力損耗、電力中斷、電力畸變、崩潰(crash)狀況、錯(cuò)誤狀況、中斷、崩潰、故障、硬件故障、軟件故障和/或除了存儲(chǔ)陣列和/或其部件的正常關(guān)機(jī)(cleanshutdown)之外的任何其他狀況。無(wú)效的關(guān)機(jī)狀況可對(duì)應(yīng)于存儲(chǔ)陣列(例如,存儲(chǔ)陣列控制器)的無(wú)效關(guān)機(jī)狀況、存儲(chǔ)元件的無(wú)效關(guān)機(jī)、存儲(chǔ)陣列的通信基礎(chǔ)設(shè)施的無(wú)效關(guān)機(jī)、高級(jí)存儲(chǔ)客戶端的無(wú)效關(guān)機(jī)、計(jì)算系統(tǒng)(包括存儲(chǔ)陣列、存儲(chǔ)元件和/或高級(jí)存儲(chǔ)客戶端)的無(wú)效關(guān)機(jī)等。
存儲(chǔ)服務(wù)層可被配置成由其是通過(guò)存儲(chǔ)與在存儲(chǔ)陣列上執(zhí)行的存儲(chǔ)操作有關(guān)的完整性數(shù)據(jù)來(lái)標(biāo)識(shí)寫(xiě)漏洞。完整性數(shù)據(jù)可與由存儲(chǔ)陣列管理的陣列元數(shù)據(jù)分開(kāi)和/或與其無(wú)關(guān)。如本文所使用的,“完整性數(shù)據(jù)”可指的是被配置成用于驗(yàn)證寫(xiě)入存儲(chǔ)陣列(和/或從存儲(chǔ)陣列讀取)的數(shù)據(jù)的完整性的任何信息、數(shù)據(jù)(data)和/或數(shù)據(jù)(datum),并且可包括但不限于:散列值、摘要值、簽名、校驗(yàn)和等。完整性數(shù)據(jù)可被配置成驗(yàn)證作為數(shù)據(jù)組被寫(xiě)入存儲(chǔ)陣列的一組數(shù)據(jù)單元和/或數(shù)據(jù)段的完整性。在一些實(shí)施例中,完整性數(shù)據(jù)被配置成提供用于驗(yàn)證數(shù)據(jù)組的相應(yīng)數(shù)據(jù)單元和/或數(shù)據(jù)段。如本文進(jìn)一步詳細(xì)公開(kāi)的,存儲(chǔ)服務(wù)層可使用對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組的完整性數(shù)據(jù)來(lái)標(biāo)識(shí)數(shù)據(jù)組內(nèi)的寫(xiě)漏洞。存儲(chǔ)服務(wù)層可被配置成替換、覆蓋(override)和/或搶占(preempt)存儲(chǔ)陣列的現(xiàn)有恢復(fù)操作。
本文公開(kāi)了用于管理存儲(chǔ)錯(cuò)誤,諸如存儲(chǔ)在存儲(chǔ)陣列上的數(shù)據(jù)組中的寫(xiě)漏洞的裝置的實(shí)施例。該裝置可包括存儲(chǔ)服務(wù)層,其被配置成生成對(duì)應(yīng)于由存儲(chǔ)引擎存儲(chǔ)在相應(yīng)數(shù)據(jù)組內(nèi)的數(shù)據(jù)的完整性元數(shù)據(jù)。存儲(chǔ)引擎可被配置成在存儲(chǔ)陣列上存儲(chǔ)具有重構(gòu)元數(shù)據(jù)的數(shù)據(jù)組。該裝置可另外包括存儲(chǔ)服務(wù)層的驗(yàn)證管理器,其被配置成通過(guò)使用完整性元數(shù)據(jù)從存儲(chǔ)陣列的無(wú)效關(guān)機(jī)中恢復(fù),其中,存儲(chǔ)服務(wù)層被配置成通過(guò)使用驗(yàn)證管理器來(lái)替換存儲(chǔ)引擎的恢復(fù)操作。在一些實(shí)施例中,存儲(chǔ)引擎被配置成將數(shù)據(jù)組寫(xiě)入存儲(chǔ)陣列的多個(gè)不同存儲(chǔ)裝置,并且存儲(chǔ)引擎的恢復(fù)操作被配置成確定無(wú)效關(guān)機(jī)是否導(dǎo)致數(shù)據(jù)組在存儲(chǔ)陣列上的部分存儲(chǔ),并且其中,驗(yàn)證管理器被配置成通過(guò)使用完整性元數(shù)據(jù)通過(guò)確定無(wú)效關(guān)機(jī)是否導(dǎo)致數(shù)據(jù)組在存儲(chǔ)陣列上的不完整存儲(chǔ),以替換存儲(chǔ)引擎的恢復(fù)操作。驗(yàn)證管理器可被配置成響應(yīng)于針對(duì)數(shù)據(jù)組生成的完整性元數(shù)據(jù)和從存儲(chǔ)陣列讀取的數(shù)據(jù)導(dǎo)出的完整性元數(shù)據(jù)之間的不匹配來(lái)標(biāo)識(shí)存儲(chǔ)在存儲(chǔ)陣列上的不完整數(shù)據(jù)組。
該裝置可另外包括恢復(fù)模塊,該恢復(fù)模塊被配置成使由驗(yàn)證管理器標(biāo)識(shí)的不完整數(shù)據(jù)組的至少一部分無(wú)效。存儲(chǔ)引擎的恢復(fù)操作可包括通過(guò)使用與相應(yīng)數(shù)據(jù)組一起存儲(chǔ)在存儲(chǔ)陣列上的重構(gòu)元數(shù)據(jù)來(lái)驗(yàn)證一組存儲(chǔ)數(shù)據(jù)組。驗(yàn)證管理器可被配置成通過(guò)驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列上的數(shù)據(jù)組的子集來(lái)替換存儲(chǔ)引擎的恢復(fù)操作。在一些實(shí)施例中,該裝置包括日志存儲(chǔ)模塊,該日志存儲(chǔ)模塊被配置成通過(guò)使用存儲(chǔ)引擎將數(shù)據(jù)寫(xiě)入存儲(chǔ)陣列上的存儲(chǔ)日志的附加點(diǎn)(appendpoint)。驗(yàn)證模塊可被配置成響應(yīng)于無(wú)效關(guān)機(jī)來(lái)驗(yàn)證對(duì)應(yīng)于存儲(chǔ)日志的附加點(diǎn)的數(shù)據(jù)組。
在一些實(shí)施例中,該裝置包括協(xié)調(diào)模塊,其被配置成引導(dǎo)存儲(chǔ)引擎將恢復(fù)從存儲(chǔ)陣列的無(wú)效關(guān)機(jī)委托給存儲(chǔ)層。協(xié)調(diào)模塊可被配置成防止存儲(chǔ)引擎響應(yīng)于無(wú)效關(guān)機(jī)來(lái)實(shí)現(xiàn)再同步操作,其中,再同步操作包括通過(guò)存儲(chǔ)引擎使用與數(shù)據(jù)組一起存儲(chǔ)的重構(gòu)元數(shù)據(jù),存儲(chǔ)引擎驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列上的數(shù)據(jù)組。
本文公開(kāi)了用于管理存儲(chǔ)錯(cuò)誤的系統(tǒng)的實(shí)施例。所公開(kāi)的系統(tǒng)可包括存儲(chǔ)層,其存儲(chǔ)對(duì)應(yīng)于存儲(chǔ)在raid存儲(chǔ)系統(tǒng)的相應(yīng)數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)的完整性數(shù)據(jù),其中,所存儲(chǔ)數(shù)據(jù)條帶包括由raid存儲(chǔ)系統(tǒng)生成的奇偶校驗(yàn)重構(gòu)數(shù)據(jù),存儲(chǔ)層的崩潰恢復(fù)模塊,其響應(yīng)于raid存儲(chǔ)系統(tǒng)的無(wú)效關(guān)機(jī),通過(guò)使用存儲(chǔ)完整性數(shù)據(jù)來(lái)驗(yàn)證raid存儲(chǔ)系統(tǒng)的數(shù)據(jù)條帶,以及存儲(chǔ)層的存儲(chǔ)協(xié)調(diào)模塊,其被配置成取代raid存儲(chǔ)系統(tǒng),執(zhí)行與無(wú)效關(guān)機(jī)有關(guān)的崩潰恢復(fù)。
存儲(chǔ)協(xié)調(diào)模塊可被配置成響應(yīng)于無(wú)效關(guān)機(jī)防止raid存儲(chǔ)系統(tǒng)的崩潰恢復(fù)操作的性能。在一些實(shí)施例中,存儲(chǔ)協(xié)調(diào)模塊被配置成通知raid存儲(chǔ)系統(tǒng)存儲(chǔ)層被配置成標(biāo)識(shí)數(shù)據(jù)條帶寫(xiě)錯(cuò)誤,其中,崩潰恢復(fù)模塊被配置成通過(guò)比較數(shù)據(jù)條帶的所存儲(chǔ)的完整性數(shù)據(jù)與從所存儲(chǔ)的從raid存儲(chǔ)系統(tǒng)讀取的數(shù)據(jù)條帶生成的完整性數(shù)據(jù)來(lái)標(biāo)識(shí)數(shù)據(jù)條帶寫(xiě)錯(cuò)誤。raid存儲(chǔ)系統(tǒng)可被配置成響應(yīng)于無(wú)效關(guān)機(jī)來(lái)實(shí)施再同步操作,以及存儲(chǔ)協(xié)調(diào)模塊可被配置成響應(yīng)于無(wú)效關(guān)機(jī)向raid存儲(chǔ)系統(tǒng)發(fā)送消息,以防止raid存儲(chǔ)系統(tǒng)實(shí)施再同步操作。
存儲(chǔ)數(shù)據(jù)條帶的完整性數(shù)據(jù)可包括對(duì)應(yīng)于所存儲(chǔ)數(shù)據(jù)條帶內(nèi)的多個(gè)數(shù)據(jù)單元中的每者的完整性數(shù)據(jù)。崩潰恢復(fù)模塊可被配置成響應(yīng)于特定數(shù)據(jù)單元的存儲(chǔ)完整性數(shù)據(jù)與從存儲(chǔ)數(shù)據(jù)條帶內(nèi)的特定數(shù)據(jù)單元導(dǎo)出的完整性數(shù)據(jù)之間的不匹配使數(shù)據(jù)單元中的特定一者無(wú)效,并且響應(yīng)于驗(yàn)證所存儲(chǔ)的一個(gè)或更多個(gè)其他數(shù)據(jù)單元的完整性數(shù)據(jù),重寫(xiě)存儲(chǔ)數(shù)據(jù)條帶內(nèi)的一個(gè)或更多個(gè)其他數(shù)據(jù)單元。
本文公開(kāi)了用于管理存儲(chǔ)錯(cuò)誤的方法的實(shí)施例。所公開(kāi)的方法可包括通過(guò)使用存儲(chǔ)陣列控制器將數(shù)據(jù)組附加到在存儲(chǔ)陣列上維護(hù)的存儲(chǔ)日志,其中,存儲(chǔ)陣列控制器被配置成將相應(yīng)數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)組存儲(chǔ)在存儲(chǔ)陣列上,數(shù)據(jù)條帶包括由存儲(chǔ)陣列控制器生成的重構(gòu)元數(shù)據(jù),在存儲(chǔ)陣列上存儲(chǔ)對(duì)應(yīng)于存儲(chǔ)在相應(yīng)數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)組的校驗(yàn)和值,以及響應(yīng)于存儲(chǔ)陣列的無(wú)效關(guān)機(jī)而搶占存儲(chǔ)陣列控制器的崩潰恢復(fù)操作,其中,搶占崩潰恢復(fù)操作包括通過(guò)使用與存儲(chǔ)在存儲(chǔ)陣列上的相應(yīng)數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)組相對(duì)應(yīng)的存儲(chǔ)校驗(yàn)和值來(lái)驗(yàn)證存儲(chǔ)陣列上的存儲(chǔ)日志的前面的數(shù)據(jù)條帶。
所公開(kāi)的方法的實(shí)施例可另外包括,響應(yīng)于無(wú)效關(guān)機(jī),標(biāo)識(shí)在存儲(chǔ)日志的前面的數(shù)據(jù)條帶,以及將從所標(biāo)識(shí)的數(shù)據(jù)條帶導(dǎo)出的校驗(yàn)和值與對(duì)應(yīng)于所標(biāo)識(shí)的數(shù)據(jù)條帶的存儲(chǔ)校驗(yàn)和值進(jìn)行比較。在一些實(shí)施例中,該方法另外包括響應(yīng)于從所標(biāo)識(shí)的數(shù)據(jù)條帶導(dǎo)出的校驗(yàn)和值與存儲(chǔ)校驗(yàn)和值之間的不匹配而使存儲(chǔ)數(shù)據(jù)條帶無(wú)效。在存儲(chǔ)日志前面的數(shù)據(jù)條帶可包括映射到邏輯地址空間的相應(yīng)地址的多個(gè)數(shù)據(jù)塊。該方法可另外包括響應(yīng)于從所標(biāo)識(shí)的數(shù)據(jù)條帶導(dǎo)出的校驗(yàn)和值與存儲(chǔ)校驗(yàn)和值之間的不匹配,使數(shù)據(jù)條帶和相應(yīng)地址之間的關(guān)聯(lián)無(wú)效。
存儲(chǔ)校驗(yàn)和值可包括將包括校驗(yàn)和值的映射條目附加到與存儲(chǔ)陣列無(wú)關(guān)的在存儲(chǔ)裝置上維護(hù)的元數(shù)據(jù)日志,其中,映射條目使相應(yīng)數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)塊與邏輯地址空間的相應(yīng)邏輯地址相關(guān)聯(lián)。另選地,存儲(chǔ)數(shù)據(jù)條帶的校驗(yàn)和值可包括將存儲(chǔ)在數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)組中的校驗(yàn)和值包括在存儲(chǔ)陣列上。數(shù)據(jù)條帶的存儲(chǔ)校驗(yàn)和值可包括相應(yīng)數(shù)據(jù)條帶內(nèi)的多個(gè)數(shù)據(jù)段中的每者的相應(yīng)校驗(yàn)和值。驗(yàn)證所標(biāo)識(shí)的數(shù)據(jù)條帶可包括驗(yàn)證所標(biāo)識(shí)的數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)段的相應(yīng)校驗(yàn)和值。該方法可另外包括響應(yīng)于與第一數(shù)據(jù)段相關(guān)的校驗(yàn)和不匹配而使所標(biāo)識(shí)的數(shù)據(jù)條帶內(nèi)的第一數(shù)據(jù)段無(wú)效,以及響應(yīng)于通過(guò)使用所存儲(chǔ)的第二數(shù)據(jù)段的校驗(yàn)和值驗(yàn)證第二數(shù)據(jù)段,將所標(biāo)識(shí)的數(shù)據(jù)條帶內(nèi)的第二數(shù)據(jù)段重寫(xiě)在存儲(chǔ)陣列上的不同數(shù)據(jù)條帶。
圖1a為包括存儲(chǔ)陣列110的系統(tǒng)100a的一個(gè)實(shí)施例的示意性框圖。存儲(chǔ)陣列110包括多個(gè)存儲(chǔ)元件112a-n。陣列控制器120可被配置成管理與存儲(chǔ)陣列110有關(guān)的存儲(chǔ)操作,其可包括管理在相應(yīng)的存儲(chǔ)元件112a-n上的數(shù)據(jù)存儲(chǔ)和/或檢索操作。在一個(gè)實(shí)施例中,存儲(chǔ)陣列110包括raid存儲(chǔ)系統(tǒng)。因此,陣列控制器120可包括軟件raid控制器、硬件raid控制器、raid存儲(chǔ)引擎、raid存儲(chǔ)驅(qū)動(dòng)器、raid存儲(chǔ)服務(wù)等。
如上所述,存儲(chǔ)元件112a-n可包括相應(yīng)的存儲(chǔ)裝置、磁盤(pán)、存儲(chǔ)信道、存儲(chǔ)介質(zhì)、存儲(chǔ)介質(zhì)的相應(yīng)存儲(chǔ)平面和/或管芯、存儲(chǔ)信道、存儲(chǔ)庫(kù)等。如本文所公開(kāi)的,存儲(chǔ)元件112a-n可包括相應(yīng)的存儲(chǔ)介質(zhì)114,其包括能夠存儲(chǔ)相應(yīng)數(shù)據(jù)單元的存儲(chǔ)位置115。在一些實(shí)施例中,存儲(chǔ)元件112a-n包括相應(yīng)的存儲(chǔ)元件控制器113a-n,其被配置成由其是管理在存儲(chǔ)位置115上的數(shù)據(jù)存儲(chǔ)和/或檢索操作。
在一些實(shí)施例中,存儲(chǔ)陣列110被配置成尤其是通過(guò)接口111提供存儲(chǔ)服務(wù)。存儲(chǔ)陣列110的接口111可包括但不限于:存儲(chǔ)接口、塊存儲(chǔ)接口、塊存儲(chǔ)裝置接口、存儲(chǔ)系統(tǒng)接口、raid存儲(chǔ)接口、raid存儲(chǔ)引擎、對(duì)象存儲(chǔ)接口、直接文件接口、數(shù)據(jù)庫(kù)存儲(chǔ)接口、密鑰值存儲(chǔ)接口、存儲(chǔ)引擎、網(wǎng)絡(luò)存儲(chǔ)協(xié)議接口、定制接口、驅(qū)動(dòng)器、庫(kù)、應(yīng)用編程接口(api)等。存儲(chǔ)陣列110可包括存儲(chǔ)地址空間116,其被配置成由其是提供用于參考存儲(chǔ)陣列110的存儲(chǔ)資源。存儲(chǔ)地址空間116可包括對(duì)應(yīng)于相應(yīng)存儲(chǔ)元件112a-n的相應(yīng)存儲(chǔ)位置115的存儲(chǔ)地址。另選地或除此之外,如本文進(jìn)一步詳細(xì)公開(kāi)的,存儲(chǔ)地址空間116可包括被配置成參考存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130(和/或數(shù)據(jù)組130內(nèi)的偏移)的存儲(chǔ)地址。
系統(tǒng)100a可另外包括被配置成在存儲(chǔ)陣列110(通過(guò)使用協(xié)調(diào)模塊101)上執(zhí)行數(shù)據(jù)存儲(chǔ)和/或檢索操作的存儲(chǔ)服務(wù)層102。存儲(chǔ)服務(wù)層102(和/或其部件)可被實(shí)施為計(jì)算裝置的硬件部件,諸如電路、集成電路、專(zhuān)用集成電路(asic)、可編程硬件、可編程邏輯陣列(pla)、現(xiàn)場(chǎng)可編程門(mén)陣列(fpga)、控制器硬件、存儲(chǔ)控制器硬件等。因此,在一些實(shí)施例中,存儲(chǔ)陣列102可被稱(chēng)為存儲(chǔ)電路、存儲(chǔ)服務(wù)電路、存儲(chǔ)硬件等。另選地或除此之外,存儲(chǔ)服務(wù)層102(和/或其部件)的部分可被實(shí)施為存儲(chǔ)在機(jī)器可讀存儲(chǔ)介質(zhì)(諸如磁性硬盤(pán)、固態(tài)存儲(chǔ)裝置、非易失性存儲(chǔ)介質(zhì)、易失性存儲(chǔ)介質(zhì)、光學(xué)存儲(chǔ)裝置等)上的指令。在一些實(shí)施例中,存儲(chǔ)服務(wù)層102的部分被實(shí)施為被配置成由特定類(lèi)型的硬件(諸如固件、fpga)執(zhí)行的指令、fpga比特流、pla配置數(shù)據(jù)等。因此,在一些實(shí)施例中,存儲(chǔ)服務(wù)層102(和/或其部件)的部分包括存儲(chǔ)在特定硬件裝置上的只讀數(shù)據(jù)(例如,存儲(chǔ)在只讀存儲(chǔ)器(rom)、可擦除可編程只讀存儲(chǔ)器(eprom)等上)。存儲(chǔ)服務(wù)層102的指令可由機(jī)器執(zhí)行和/或解釋以實(shí)現(xiàn)本文所公開(kāi)的功能。存儲(chǔ)服務(wù)層102(和/或其部件)的部分可包括:內(nèi)核級(jí)模塊、用戶空間模塊、驅(qū)動(dòng)器級(jí)模塊、驅(qū)動(dòng)器、i/o控制器、i/o管理器、i/o層、i/o服務(wù)、存儲(chǔ)驅(qū)動(dòng)器、存儲(chǔ)管理器、存儲(chǔ)層、軟件定義的存儲(chǔ)層、scsi模塊、庫(kù)、共享庫(kù)、可加載庫(kù)、動(dòng)態(tài)鏈接庫(kù)(dll)庫(kù)、設(shè)備驅(qū)動(dòng)程序、設(shè)備驅(qū)動(dòng)程序接口(ddi)模塊、邏輯設(shè)備驅(qū)動(dòng)程序(ldd)模塊、物理設(shè)備驅(qū)動(dòng)程序(pdd)模塊、windows驅(qū)動(dòng)程序基礎(chǔ)(wfd)模塊、用戶模式驅(qū)動(dòng)程序框架(umdf)模塊、內(nèi)核模式驅(qū)動(dòng)程序框架(kmdf)模塊、i/o套件(kit)模塊、統(tǒng)一驅(qū)動(dòng)程序接口(udi)模塊、存儲(chǔ)設(shè)備接口(sdi)模塊、軟件開(kāi)發(fā)套件(sdk)等。
存儲(chǔ)服務(wù)層102可包括具有多個(gè)邏輯地址的邏輯地址空間104。如本文更詳細(xì)地公開(kāi)的,存儲(chǔ)服務(wù)層102可通過(guò)使用諸如存儲(chǔ)陣列110的一個(gè)或更多個(gè)存儲(chǔ)資源來(lái)執(zhí)行與邏輯地址空間104有關(guān)的存儲(chǔ)操作。存儲(chǔ)服務(wù)層102可尤其是通過(guò)存儲(chǔ)陣列110的接口111發(fā)布與邏輯地址空間的數(shù)據(jù)有關(guān)的請(qǐng)求。存儲(chǔ)服務(wù)層102可被配置成通過(guò)使用存儲(chǔ)陣列110來(lái)服務(wù)與邏輯地址空間104的邏輯地址有關(guān)的存儲(chǔ)請(qǐng)求。存儲(chǔ)服務(wù)層102可另外包括被配置成使邏輯地址空間104的邏輯地址與諸如存儲(chǔ)地址空間116的存儲(chǔ)地址的存儲(chǔ)位置相關(guān)聯(lián)的轉(zhuǎn)換層105。轉(zhuǎn)換層105可被配置成將特定邏輯地址的數(shù)據(jù)映射到存儲(chǔ)陣列110上的存儲(chǔ)地址。因此,存儲(chǔ)服務(wù)層102的轉(zhuǎn)換層105可維護(hù)與存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)有關(guān)的上下文元數(shù)據(jù)。
陣列控制器120可被配置成由其是通過(guò)將請(qǐng)求的數(shù)據(jù)(數(shù)據(jù)140)寫(xiě)入存儲(chǔ)元件112a-n來(lái)服務(wù)定向到存儲(chǔ)陣列110的寫(xiě)請(qǐng)求。陣列控制器120可被配置成在存儲(chǔ)陣列110上的相應(yīng)數(shù)據(jù)組130中存儲(chǔ)數(shù)據(jù)。如本文所使用的,“數(shù)據(jù)組”130是指被配置成在不同的相應(yīng)存儲(chǔ)元件112a-n上存儲(chǔ)的兩個(gè)或更多個(gè)數(shù)據(jù)單元132的集合。數(shù)據(jù)單元132可被配置成存儲(chǔ)在存儲(chǔ)元件112a-n的相應(yīng)存儲(chǔ)位置115內(nèi)(例如,數(shù)據(jù)單元132可根據(jù)存儲(chǔ)元件112a-n的下面的存儲(chǔ)塊、頁(yè)面和/或區(qū)段來(lái)設(shè)置大小)。因此,將數(shù)據(jù)組130寫(xiě)入存儲(chǔ)陣列110可包括在不同的相應(yīng)存儲(chǔ)元件112a-n上的多個(gè)單獨(dú)的寫(xiě)操作。如圖1a所示,陣列控制器120可被配置成寫(xiě)入包括n個(gè)數(shù)據(jù)單元132(例如,數(shù)據(jù)單元132a-n)的數(shù)據(jù)組130,使得每個(gè)數(shù)據(jù)單元132a-n被寫(xiě)入不同的相應(yīng)存儲(chǔ)元件112a-n。陣列控制器120可將數(shù)據(jù)單元132a寫(xiě)入存儲(chǔ)元件112a、將數(shù)據(jù)單元132b寫(xiě)入存儲(chǔ)元件112b等等(例如,將數(shù)據(jù)單元132n寫(xiě)入存儲(chǔ)元件112n)。陣列控制器120可另外被配置成由其是通過(guò)將數(shù)據(jù)組130(和/或其特定數(shù)據(jù)單元132)的多個(gè)副本寫(xiě)入不同的存儲(chǔ)元件112a-n和/或不同的存儲(chǔ)資源(未示出)來(lái)冗余地存儲(chǔ)數(shù)據(jù)組130。盡管本文描述了數(shù)據(jù)組130的特定實(shí)施例,但是本公開(kāi)不限于這方面,并且可以適用于與數(shù)據(jù)組130一起使用,數(shù)據(jù)組130包括任何數(shù)量的(一個(gè)或更多個(gè))數(shù)據(jù)單元132,其被配置用于以任何合適的布置存儲(chǔ)在存儲(chǔ)陣列110的存儲(chǔ)元件112a-n上。
在一些實(shí)施例中,陣列控制器120被配置成管理與存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130有關(guān)的陣列元數(shù)據(jù)134。如上所述,陣列元數(shù)據(jù)134指的是與被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)組130有關(guān)的任何元數(shù)據(jù),并且可包括但不限于:被配置成用于驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列上(和/或從存儲(chǔ)元件讀取)的數(shù)據(jù)的完整性的數(shù)據(jù),諸如散列值、摘要、簽名、校驗(yàn)和等;用于標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130中的(一個(gè)或更多個(gè))錯(cuò)誤的錯(cuò)誤檢測(cè)元數(shù)據(jù);用于校正存儲(chǔ)數(shù)據(jù)組130中的(一個(gè)或更多個(gè))錯(cuò)誤的糾錯(cuò)元數(shù)據(jù);用于重構(gòu)存儲(chǔ)數(shù)據(jù)組130的部分的重構(gòu)數(shù)據(jù)(例如,奇偶校驗(yàn)重構(gòu)數(shù)據(jù))等。陣列控制器120可被配置成將數(shù)據(jù)組130的陣列元數(shù)據(jù)134存儲(chǔ)在數(shù)據(jù)組130本身內(nèi)(例如,作為數(shù)據(jù)組130的數(shù)據(jù)單元132)。另選地,陣列控制器120可將數(shù)據(jù)組130的陣列元數(shù)據(jù)134寫(xiě)入存儲(chǔ)陣列110內(nèi)的單獨(dú)存儲(chǔ)位置和/或?qū)懭肓硪淮鎯?chǔ)資源。
在圖1a的實(shí)施例中,陣列控制器120被配置成將陣列元數(shù)據(jù)134作為數(shù)據(jù)單元132n寫(xiě)入數(shù)據(jù)組130內(nèi)。因此,數(shù)據(jù)組130可包括用于存儲(chǔ)寫(xiě)請(qǐng)求的數(shù)據(jù)(數(shù)據(jù)140)的數(shù)據(jù)單元132a-n-1以及用于存儲(chǔ)陣列元數(shù)據(jù)134(例如,數(shù)據(jù)單元132n)的其他數(shù)據(jù)單元。在一些實(shí)施例中,陣列元數(shù)據(jù)134包括從數(shù)據(jù)組130的其他n-1個(gè)數(shù)據(jù)單元132的內(nèi)容導(dǎo)出的奇偶校驗(yàn)重構(gòu)數(shù)據(jù)(例如,陣列元數(shù)據(jù)134可包括從數(shù)據(jù)單元132a-132n-1的內(nèi)容導(dǎo)出的奇偶校驗(yàn)重構(gòu)數(shù)據(jù))??赏ㄟ^(guò)對(duì)數(shù)據(jù)單元132a-n-1的內(nèi)容的異或(xor)運(yùn)算來(lái)計(jì)算數(shù)據(jù)單元132n的陣列元數(shù)據(jù)134(例如,陣列元數(shù)據(jù)134可被生成為:數(shù)據(jù)單元132a異或數(shù)據(jù)單元132b異或數(shù)據(jù)單元132c...異或數(shù)據(jù)單元132n-1的乘積)。然而,本公開(kāi)不限于這方面,并且可適用于與被配置成以任何合適的存儲(chǔ)位置和/或布置存儲(chǔ)數(shù)據(jù)組130和/或陣列元數(shù)據(jù)134的存儲(chǔ)陣列110一起使用。在一些實(shí)施例中,陣列控制器120可被配置成生成用于存儲(chǔ)在數(shù)據(jù)組130的多個(gè)數(shù)據(jù)單元132中的陣列元數(shù)據(jù)134(例如,數(shù)據(jù)組130的兩個(gè)或更多個(gè)數(shù)據(jù)單元132可用于存儲(chǔ)數(shù)據(jù)組的sai數(shù)據(jù)134)。另選地或除此之外,陣列控制器120可被配置成將sai數(shù)據(jù)134存儲(chǔ)在數(shù)據(jù)組130的不同數(shù)據(jù)單元132a-n中(例如,旋轉(zhuǎn)相應(yīng)數(shù)據(jù)組130中的sai數(shù)據(jù)134的位置)、在單獨(dú)的存儲(chǔ)位置和/或存儲(chǔ)資源中存儲(chǔ)sai數(shù)據(jù)134等等。因此,存儲(chǔ)陣列110可被配置成實(shí)現(xiàn)包括任何合適類(lèi)型的冗余和/或鏡像存儲(chǔ)配置的任何合適的raid級(jí)別。因此,在一些實(shí)施例中,數(shù)據(jù)組130可包括raid數(shù)據(jù)條帶,以及數(shù)據(jù)組130的陣列元數(shù)據(jù)134可包括raid重構(gòu)數(shù)據(jù)。
陣列控制器120可由其是通過(guò)向相應(yīng)的存儲(chǔ)元件112a-n發(fā)布多個(gè)寫(xiě)請(qǐng)求來(lái)將數(shù)據(jù)組130寫(xiě)入存儲(chǔ)陣列110。如圖1b的示意性框圖100b所示,存儲(chǔ)控制器120通過(guò)向存儲(chǔ)元件112a發(fā)布寫(xiě)請(qǐng)求133a(在存儲(chǔ)位置115a上寫(xiě)入數(shù)據(jù)單元132a);向存儲(chǔ)元件112b發(fā)布寫(xiě)請(qǐng)求133b(在存儲(chǔ)位置115b上寫(xiě)入數(shù)據(jù)單元132b);向存儲(chǔ)元件112c發(fā)布寫(xiě)請(qǐng)求133c(在存儲(chǔ)位置115c上寫(xiě)入數(shù)據(jù)單元132c)等(向存儲(chǔ)元件112n發(fā)布寫(xiě)請(qǐng)求133n,以將數(shù)據(jù)單元132n的陣列元數(shù)據(jù)134寫(xiě)入存儲(chǔ)位置115n)來(lái)寫(xiě)入包括數(shù)據(jù)單元132a-n的數(shù)據(jù)組130。
陣列控制器120可被配置成通過(guò)使用恢復(fù)模塊122來(lái)管理存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130的完整性?;謴?fù)模塊122可被配置成實(shí)施一個(gè)或更多個(gè)崩潰恢復(fù)和/或數(shù)據(jù)驗(yàn)證操作,其可包括但不限于:再同步操作以將一個(gè)或更多個(gè)存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134再同步,重構(gòu)操作以通過(guò)使用存儲(chǔ)數(shù)據(jù)組130的其他數(shù)據(jù)單元132和/或存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134等來(lái)重構(gòu)存儲(chǔ)數(shù)據(jù)組130的一個(gè)或更多個(gè)數(shù)據(jù)單元132的內(nèi)容。
恢復(fù)模塊122可被配置成通過(guò)以下方式來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130:a)訪問(wèn)存儲(chǔ)數(shù)據(jù)組130(例如,數(shù)據(jù)單元132a-n)和/或所存儲(chǔ)的陣列元數(shù)據(jù)134的數(shù)據(jù),并將所訪問(wèn)的數(shù)據(jù)與數(shù)據(jù)組130的陣列元數(shù)據(jù)134進(jìn)行比較。在圖1c的實(shí)施例中,數(shù)據(jù)組130的數(shù)據(jù)單元132n可包括從其他數(shù)據(jù)單元132a-n-1的內(nèi)容導(dǎo)出的陣列元數(shù)據(jù)134(例如,如本文所公開(kāi),通過(guò)使用對(duì)數(shù)據(jù)單元132a-n-1的異或運(yùn)算)?;謴?fù)模塊122可通過(guò)以下方式來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130:a)訪問(wèn)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n(包括數(shù)據(jù)組130的陣列元數(shù)據(jù)134),b)通過(guò)使用數(shù)據(jù)單元132a-n-1計(jì)算驗(yàn)證數(shù)據(jù)136(例如,通過(guò)對(duì)所訪問(wèn)的數(shù)據(jù)單元132a-n-1的異或計(jì)算,使得驗(yàn)證數(shù)據(jù)136=數(shù)據(jù)單元132a異或數(shù)據(jù)單元132b異或數(shù)據(jù)單元132c...異或數(shù)據(jù)單元132n-1),以及c)將驗(yàn)證數(shù)據(jù)136與所訪問(wèn)的陣列元數(shù)據(jù)134進(jìn)行比較。驗(yàn)證失敗可能不表示錯(cuò)誤的性質(zhì),諸如(一個(gè)或更多個(gè))數(shù)據(jù)單元132中的哪些包括無(wú)效數(shù)據(jù)131。此外,由于存儲(chǔ)陣列110不能訪問(wèn)與數(shù)據(jù)組130有關(guān)的上下文信息,諸如與數(shù)據(jù)組130的數(shù)據(jù)單元132相關(guān)聯(lián)的邏輯地址,所以存儲(chǔ)陣列110可能無(wú)法充分地處理寫(xiě)漏洞。
參考圖1d的示意性框圖100d,陣列控制器120可被配置成通過(guò)以下方式再同步存儲(chǔ)數(shù)據(jù)組130(使用恢復(fù)模塊122):a)訪問(wèn)存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n-1,b)從所訪問(wèn)的數(shù)據(jù)的內(nèi)容導(dǎo)出替換陣列元數(shù)據(jù)138,以及c)將替換陣列元數(shù)據(jù)138寫(xiě)入存儲(chǔ)陣列110,這可包括發(fā)布將替換陣列元數(shù)據(jù)138寫(xiě)入一個(gè)或更多個(gè)存儲(chǔ)元件112a-n的寫(xiě)請(qǐng)求137。寫(xiě)請(qǐng)求137可被配置成替換和/或重寫(xiě)最初與數(shù)據(jù)組130一起存儲(chǔ)的陣列元數(shù)據(jù)134。因此,在圖1d的實(shí)施例中,替換陣列元數(shù)據(jù)138可被配置成重寫(xiě)存儲(chǔ)位置115n的內(nèi)容。另選地,替換陣列元數(shù)據(jù)138可被寫(xiě)入不同的存儲(chǔ)位置,以及陣列控制器120可將存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134重新映射到不同的存儲(chǔ)位置。參考圖1e的示意性框圖100e,陣列控制器120可被配置成通過(guò)使用存儲(chǔ)數(shù)據(jù)組130的其他數(shù)據(jù)單元132和/或陣列元數(shù)據(jù)134來(lái)重構(gòu)存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)單元132中的一者的內(nèi)容。在圖1e的實(shí)施例中,恢復(fù)模塊122通過(guò)以下方式重構(gòu)數(shù)據(jù)單元132b的內(nèi)容:a)通過(guò)使用相應(yīng)的讀取請(qǐng)求135a、135c-n訪問(wèn)存儲(chǔ)數(shù)據(jù)組130的其他數(shù)據(jù)單元132a和132c-n(包括數(shù)據(jù)單元132n的陣列元數(shù)據(jù)134),b)通過(guò)使用所訪問(wèn)的數(shù)據(jù)(通過(guò)xor計(jì)算,其中,數(shù)據(jù)單元132b的替換數(shù)據(jù)138=數(shù)據(jù)單元132a異或數(shù)據(jù)單元132c...異或數(shù)據(jù)單元132n)來(lái)生成數(shù)據(jù)單元132b的替換數(shù)據(jù)138?;謴?fù)模塊122可另外被配置成將替換數(shù)據(jù)138寫(xiě)入存儲(chǔ)陣列110(如本文所公開(kāi)的,通過(guò)發(fā)布寫(xiě)請(qǐng)求137)。寫(xiě)請(qǐng)求137可被配置成重寫(xiě)數(shù)據(jù)單元132b的原始內(nèi)容(在存儲(chǔ)位置115b處)。另選地,如本文所公開(kāi)的,寫(xiě)請(qǐng)求137可被配置成將替換數(shù)據(jù)138寫(xiě)入不同的存儲(chǔ)位置。盡管圖1c-1d描繪了存儲(chǔ)陣列110的恢復(fù)操作的特定實(shí)施例,但是本公開(kāi)不限于這方面,并且可以適用于與被配置成實(shí)現(xiàn)與存儲(chǔ)在任何適當(dāng)?shù)呐渲?和/或利用陣列元數(shù)據(jù)134的任何類(lèi)型和/或配置)中的數(shù)據(jù)組130有關(guān)的任何合適類(lèi)型的崩潰恢復(fù)操作的存儲(chǔ)陣列110一起使用。
返回參考圖1b,將數(shù)據(jù)組130寫(xiě)入存儲(chǔ)陣列110可包括向不同的相應(yīng)存儲(chǔ)元件112a-n(通過(guò)相應(yīng)的存儲(chǔ)元件控制器113a-n)發(fā)布多個(gè)寫(xiě)請(qǐng)求133a-n。完成寫(xiě)請(qǐng)求133a-n中的一個(gè)或更多個(gè)的錯(cuò)誤可能導(dǎo)致不完整和/或損壞數(shù)據(jù)組130的存儲(chǔ)。如本文所使用的,不完整數(shù)據(jù)組130是指數(shù)據(jù)單元132a-n中的一個(gè)或更多個(gè)未正確地寫(xiě)入存儲(chǔ)元件112a-n的數(shù)據(jù)組130(和/或單獨(dú)的陣列元數(shù)據(jù)134未正確存儲(chǔ)的數(shù)據(jù)組)。因此,不完整的數(shù)據(jù)組130可指的是包括“寫(xiě)漏洞”的數(shù)據(jù)組130。寫(xiě)漏洞可能由低級(jí)存儲(chǔ)陣列110中的錯(cuò)誤引起,諸如在一個(gè)或更多個(gè)存儲(chǔ)元件112a-n中發(fā)生(和/或未報(bào)告給陣列控制器120)的“無(wú)聲”錯(cuò)誤。另選地或除此之外,寫(xiě)漏洞可由于無(wú)效關(guān)機(jī)狀況引起。如本文所使用的,無(wú)效關(guān)機(jī)可包括但不限于:存儲(chǔ)陣列110的無(wú)效關(guān)機(jī)、存儲(chǔ)陣列110的崩潰、存儲(chǔ)元件112a-n中的一個(gè)或更多個(gè)的無(wú)效關(guān)機(jī)、存儲(chǔ)元件112a-n中的一個(gè)或更多個(gè)的崩潰、陣列控制器120的無(wú)效關(guān)機(jī)、陣列控制器120的崩潰等。
在圖1b的實(shí)施例中,在執(zhí)行寫(xiě)操作133b期間(以及在其他寫(xiě)操作133a和133c-n完成之后)的無(wú)效關(guān)機(jī)可能導(dǎo)致存儲(chǔ)數(shù)據(jù)組130中的寫(xiě)漏洞。陣列控制器120可能不能檢測(cè)和/或校正寫(xiě)漏洞狀況。與所存儲(chǔ)的包括寫(xiě)漏洞的數(shù)據(jù)組130有關(guān)的讀取操作可導(dǎo)致返回?zé)o效和/或損壞的數(shù)據(jù)。此外,由陣列控制器120實(shí)現(xiàn)的陣列恢復(fù)操作124可能不僅無(wú)法標(biāo)識(shí)寫(xiě)漏洞,而且可以在存儲(chǔ)陣列110內(nèi)傳播損壞的數(shù)據(jù)。使所存儲(chǔ)的包括寫(xiě)漏洞的數(shù)據(jù)組130再同步可能導(dǎo)致將無(wú)效替換陣列元數(shù)據(jù)138寫(xiě)入數(shù)據(jù)組130。類(lèi)似地,重構(gòu)所存儲(chǔ)的包括寫(xiě)漏洞的數(shù)據(jù)組130的數(shù)據(jù)可能導(dǎo)致存儲(chǔ)數(shù)據(jù)組130內(nèi)的額外的數(shù)據(jù)損壞。
圖1f為包括被配置成管理存儲(chǔ)陣列110的存儲(chǔ)操作的存儲(chǔ)服務(wù)層的系統(tǒng)100f的一個(gè)實(shí)施例的示意性框圖。在圖1f的實(shí)施例中,在將數(shù)據(jù)單元132b寫(xiě)入存儲(chǔ)元件112b時(shí)發(fā)生無(wú)效關(guān)機(jī)(或其他錯(cuò)誤狀況)。因此,存儲(chǔ)位置115b包括無(wú)效數(shù)據(jù)131而不是數(shù)據(jù)單元132b的內(nèi)容。其他寫(xiě)請(qǐng)求133a和133c-n可成功地完成數(shù)據(jù)單元132a和132c-n至相應(yīng)存儲(chǔ)元件112a和112c-n的存儲(chǔ)。
存儲(chǔ)陣列110可檢測(cè)導(dǎo)致寫(xiě)漏洞的無(wú)效關(guān)機(jī)狀況,并且作為響應(yīng),可執(zhí)行一個(gè)或更多個(gè)陣列恢復(fù)操作124,其可包括但不限于:再同步一個(gè)或更多個(gè)存儲(chǔ)數(shù)據(jù)組130、恢復(fù)一個(gè)或更多個(gè)數(shù)據(jù)組130的數(shù)據(jù)等。陣列恢復(fù)操作124可能消耗大量的i/o資源,并且可能導(dǎo)致在存儲(chǔ)陣列110內(nèi)傳播數(shù)據(jù)損壞。在一些實(shí)施例中,陣列恢復(fù)操作124包括再同步存儲(chǔ)陣列110上的所有存儲(chǔ)數(shù)據(jù)組130。當(dāng)實(shí)現(xiàn)陣列恢復(fù)操作124時(shí),存儲(chǔ)陣列110的存儲(chǔ)服務(wù)可能不可用。在包括大容量存儲(chǔ)元件112a-n的實(shí)施例中,再同步存儲(chǔ)陣列110可能需要相當(dāng)長(zhǎng)的時(shí)間和/或消耗大量的i/o資源。如上所述,再同步存儲(chǔ)數(shù)據(jù)組130可包括a)訪問(wèn)數(shù)據(jù)組130的存儲(chǔ)數(shù)據(jù),包括存儲(chǔ)位置115b上的無(wú)效數(shù)據(jù)131,b)計(jì)算替換陣列元數(shù)據(jù)138,以及c)將替換陣列元數(shù)據(jù)138寫(xiě)入存儲(chǔ)陣列110。因此,替換陣列元數(shù)據(jù)138可合并數(shù)據(jù)單元132b的無(wú)效數(shù)據(jù)131(替換有效陣列元數(shù)據(jù)134)。類(lèi)似地,讀取和/或重構(gòu)其他數(shù)據(jù)單元132a和/或132c-n-1中的一者的操作可能由其是由于使用數(shù)據(jù)單元132b的損壞數(shù)據(jù)131而導(dǎo)致重構(gòu)無(wú)效數(shù)據(jù)。
返回參考圖1a,系統(tǒng)100a可另外包括存儲(chǔ)服務(wù)層102,其被配置成通過(guò)存儲(chǔ)陣列110的接口111和通過(guò)使用協(xié)調(diào)模塊101來(lái)訪問(wèn)存儲(chǔ)陣列110。存儲(chǔ)陣列110的接口111可包括但不限于:存儲(chǔ)接口、塊存儲(chǔ)接口、塊存儲(chǔ)裝置接口、存儲(chǔ)系統(tǒng)接口、raid存儲(chǔ)接口、raid存儲(chǔ)引擎、對(duì)象存儲(chǔ)接口、直接文件接口、數(shù)據(jù)庫(kù)存儲(chǔ)接口、密鑰值存儲(chǔ)接口、存儲(chǔ)引擎、網(wǎng)絡(luò)存儲(chǔ)協(xié)議接口、定制接口、驅(qū)動(dòng)器、庫(kù)、應(yīng)用編程接口(api)等。存儲(chǔ)服務(wù)層102可被配置成尤其是通過(guò)向存儲(chǔ)陣列110發(fā)布寫(xiě)入數(shù)據(jù)(諸如數(shù)據(jù)140)的請(qǐng)求,發(fā)布從存儲(chǔ)陣列110讀取數(shù)據(jù)的請(qǐng)求等,通過(guò)接口111對(duì)存儲(chǔ)陣列110執(zhí)行數(shù)據(jù)存儲(chǔ)和/或檢索操作。
存儲(chǔ)層102可另外包括驗(yàn)證管理器106,其被配置成驗(yàn)證寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)140(例如,驗(yàn)證存儲(chǔ)在數(shù)據(jù)組130內(nèi)的數(shù)據(jù)單元132a-n-1)。驗(yàn)證管理器106可被配置成獨(dú)立于由存儲(chǔ)陣列110管理的陣列元數(shù)據(jù)134(和/或其他重構(gòu)信息)來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130。在一些實(shí)施例中,驗(yàn)證管理器106被配置成生成對(duì)應(yīng)于被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)140的完整性數(shù)據(jù)144。存儲(chǔ)服務(wù)層102可包括被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)140中的完整性數(shù)據(jù)144,使得完整性數(shù)據(jù)144與數(shù)據(jù)140一起存儲(chǔ)在數(shù)據(jù)組130中。另選地,存儲(chǔ)層102可被配置成將完整性數(shù)據(jù)144寫(xiě)入單獨(dú)的存儲(chǔ)資源(未示出)。在一些實(shí)施例中,完整性數(shù)據(jù)144包括從數(shù)據(jù)140導(dǎo)出的驗(yàn)證信息,諸如散列值、簽名、校驗(yàn)和等。如本文進(jìn)一步詳細(xì)所公開(kāi)的,驗(yàn)證管理器106可使用完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)尤其是由于無(wú)效關(guān)機(jī)狀況而導(dǎo)致的寫(xiě)漏洞,無(wú)效關(guān)機(jī)狀況可包括但不限于:如本文所公開(kāi)的,存儲(chǔ)服務(wù)層102的無(wú)效關(guān)機(jī)、存儲(chǔ)服務(wù)層102的崩潰、存儲(chǔ)陣列110的無(wú)效關(guān)機(jī)、存儲(chǔ)陣列110的崩潰、存儲(chǔ)元件112a-n中的一個(gè)或更多個(gè)的無(wú)效關(guān)機(jī)、存儲(chǔ)元件112a-n中的一個(gè)或更多個(gè)的崩潰、陣列控制器120的無(wú)效關(guān)機(jī)、陣列控制器120的崩潰等。
響應(yīng)于檢測(cè)到無(wú)效關(guān)機(jī),驗(yàn)證管理器106可被配置成實(shí)施與存儲(chǔ)陣列110有關(guān)的一個(gè)或更多個(gè)恢復(fù)操作。驗(yàn)證管理器106可被配置成比陣列控制器120更有效地標(biāo)識(shí)存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130中的寫(xiě)漏洞和/或可防止損壞數(shù)據(jù)在存儲(chǔ)陣列110內(nèi)傳播。由驗(yàn)證管理器106實(shí)施的恢復(fù)操作可被配置成替換和/或搶占存儲(chǔ)陣列110的一個(gè)或更多個(gè)崩潰恢復(fù)操作(例如,替換和/或搶占本文所公開(kāi)的陣列恢復(fù)操作124中的一個(gè)或更多個(gè)和/或存儲(chǔ)陣列110的其他崩潰恢復(fù)操作)。在一些實(shí)施例中,存儲(chǔ)服務(wù)層102被配置成防止存儲(chǔ)陣列110實(shí)施陣列恢復(fù)操作124和/或配置存儲(chǔ)陣列110以將崩潰恢復(fù)委托給存儲(chǔ)服務(wù)層102(通過(guò)使用協(xié)調(diào)模塊101)。協(xié)調(diào)模塊101可被配置成在檢測(cè)到無(wú)效關(guān)機(jī)狀況之后防止存儲(chǔ)陣列110實(shí)施所選的陣列恢復(fù)操作124。協(xié)調(diào)模塊101可配置存儲(chǔ)陣列110以通過(guò)和/或通過(guò)使用存儲(chǔ)陣列110的接口111將崩潰恢復(fù)委托給存儲(chǔ)服務(wù)層102,其可包括但不限于:配置存儲(chǔ)陣列110以通過(guò)接口111將崩潰恢復(fù)委托給存儲(chǔ)服務(wù)層102、通過(guò)接口111向存儲(chǔ)陣列110發(fā)布一個(gè)或更多個(gè)配置命令、通過(guò)接口111(和/或存儲(chǔ)陣列110的另一配置接口)設(shè)置存儲(chǔ)陣列110的配置參數(shù)、通過(guò)接口111和/或另一通信信道向存儲(chǔ)陣列110發(fā)送消息、通過(guò)接口111和/或另一通信信道向存儲(chǔ)陣列110發(fā)送指令和/或命令等。
如上所述,驗(yàn)證管理器106可被配置成通過(guò)使用對(duì)應(yīng)于數(shù)據(jù)組130的完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)和管理存儲(chǔ)陣列110上的寫(xiě)漏洞狀況。如圖1g所示,驗(yàn)證管理器106可被配置成生成對(duì)應(yīng)于被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)140的完整性數(shù)據(jù)144。完整性數(shù)據(jù)144可包括對(duì)應(yīng)于數(shù)據(jù)140的內(nèi)容(例如,數(shù)據(jù)單元132a-n-1的內(nèi)容)的散列碼、簽名、校驗(yàn)和、摘要和/或其他數(shù)據(jù)。在一些實(shí)施例中,完整性數(shù)據(jù)144被包含在數(shù)據(jù)塊132a-n-1的一個(gè)或更多個(gè)中。在圖1g的實(shí)施例中,驗(yàn)證管理器106將完整性數(shù)據(jù)144存儲(chǔ)在數(shù)據(jù)單元132a中。完整性數(shù)據(jù)144可作為單獨(dú)的數(shù)據(jù)單元132存儲(chǔ)和/或可與數(shù)據(jù)單元132的其他內(nèi)容一起包含(例如,可嵌入在另一數(shù)據(jù)單元中)。另選地,如本文進(jìn)一步詳細(xì)公開(kāi)的,完整性數(shù)據(jù)144可被存儲(chǔ)在單獨(dú)的存儲(chǔ)位置,諸如元數(shù)據(jù)日志中。在圖1g的實(shí)施例中,完整性數(shù)據(jù)144可被包含在數(shù)據(jù)單元132a中。如本文所公開(kāi)的,包括完整性數(shù)據(jù)144的數(shù)據(jù)140可作為數(shù)據(jù)組130被寫(xiě)入存儲(chǔ)陣列110(例如,響應(yīng)于來(lái)自存儲(chǔ)服務(wù)層102的寫(xiě)請(qǐng)求141)。
在一些實(shí)施例中,完整性數(shù)據(jù)144對(duì)應(yīng)于數(shù)據(jù)單元132a-n-1的內(nèi)容。因此,完整性數(shù)據(jù)144可指示數(shù)據(jù)單元132a-n-1中的任一者是否包括無(wú)效數(shù)據(jù)(例如,無(wú)效數(shù)據(jù)131)。另選地,完整性數(shù)據(jù)144可包括對(duì)應(yīng)于相應(yīng)數(shù)據(jù)單元132a-n-1的多個(gè)完整性數(shù)據(jù)。完整性數(shù)據(jù)144可包括對(duì)應(yīng)于數(shù)據(jù)單元132a(例如,數(shù)據(jù)單元132a的校驗(yàn)和)的完整性數(shù)據(jù)、對(duì)應(yīng)于數(shù)據(jù)單元132b的完整性數(shù)據(jù)等等。如結(jié)合圖1i進(jìn)一步公開(kāi)的,驗(yàn)證管理器106可使用相應(yīng)的完整性數(shù)據(jù)來(lái)確定特定數(shù)據(jù)單元132a-n-1是否包含有效數(shù)據(jù)、標(biāo)識(shí)數(shù)據(jù)組130內(nèi)寫(xiě)漏洞的具體位置和/或重構(gòu)數(shù)據(jù)單元132a-n中的一個(gè)或更多個(gè)。
驗(yàn)證管理器106可被配置成響應(yīng)于檢測(cè)到與存儲(chǔ)陣列110有關(guān)的無(wú)效關(guān)機(jī)狀況來(lái)驗(yàn)證寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)140。如圖1h所示,驗(yàn)證存儲(chǔ)數(shù)據(jù)組130可包括:a)尤其是通過(guò)向存儲(chǔ)陣列110發(fā)布讀取請(qǐng)求143(通過(guò)接口111并通過(guò)使用協(xié)調(diào)模塊101)來(lái)訪問(wèn)存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù),以及b)將對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144與所訪問(wèn)的數(shù)據(jù)(例如,數(shù)據(jù)單元132a-132n-1的內(nèi)容)進(jìn)行比較。無(wú)效關(guān)機(jī)狀況可能在存儲(chǔ)數(shù)據(jù)組130中導(dǎo)致寫(xiě)漏洞,使得數(shù)據(jù)單元132b的內(nèi)容未被寫(xiě)入存儲(chǔ)陣列110(和/或在寫(xiě)操作期間被損壞)。因此,所存儲(chǔ)的從存儲(chǔ)陣列110訪問(wèn)的數(shù)據(jù)組130可包括代替數(shù)據(jù)單元132b的原始內(nèi)容的無(wú)效數(shù)據(jù)131。因此,從數(shù)據(jù)單元132a提取的完整性數(shù)據(jù)144將不對(duì)應(yīng)于所訪問(wèn)的數(shù)據(jù),并且驗(yàn)證管理器106可確定存儲(chǔ)數(shù)據(jù)組130包括寫(xiě)漏洞。
驗(yàn)證管理器106可另外被配置成響應(yīng)于檢測(cè)到寫(xiě)漏洞而實(shí)施一個(gè)或更多個(gè)緩解操作(寫(xiě)漏洞恢復(fù)操作),該緩解操作可包括但不限于以下操作:向存儲(chǔ)陣列110通知檢測(cè)到寫(xiě)漏洞、使存儲(chǔ)數(shù)據(jù)組130無(wú)效、使存儲(chǔ)數(shù)據(jù)組130的部分無(wú)效、恢復(fù)和/或重構(gòu)存儲(chǔ)數(shù)據(jù)組130、請(qǐng)求與存儲(chǔ)數(shù)據(jù)組130有關(guān)的替換數(shù)據(jù)等等。驗(yàn)證管理器106可被配置成通過(guò)接口111(和/或通過(guò)使用協(xié)調(diào)模塊101)向存儲(chǔ)陣列110通知所標(biāo)識(shí)的寫(xiě)漏洞狀況。在一些實(shí)施例中,驗(yàn)證管理器106被配置成尤其是通過(guò)發(fā)布與映射到存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n-1的邏輯地址有關(guān)的trim消息來(lái)使存儲(chǔ)數(shù)據(jù)組130無(wú)效。trim消息可在存儲(chǔ)服務(wù)層102內(nèi)發(fā)布(例如,發(fā)布到轉(zhuǎn)換層105),可被發(fā)布給一個(gè)或更多個(gè)客戶端、可被發(fā)布到存儲(chǔ)陣列110等等。驗(yàn)證管理器106可被配置成向存儲(chǔ)陣列110通知寫(xiě)漏洞狀況(通過(guò)接口111),并且作為響應(yīng),存儲(chǔ)陣列110可被配置成移除存儲(chǔ)數(shù)據(jù)組130和/或使其無(wú)效。在一些實(shí)施例中,驗(yàn)證管理器106尤其是通過(guò)從轉(zhuǎn)換層105移除與存儲(chǔ)數(shù)據(jù)組130有關(guān)的映射使存儲(chǔ)數(shù)據(jù)組130無(wú)效(例如,通過(guò)使存儲(chǔ)數(shù)據(jù)組130內(nèi)的邏輯地址和數(shù)據(jù)單元132a-n-1的存儲(chǔ)地址之間的關(guān)聯(lián)無(wú)效)。在一些實(shí)施例中,驗(yàn)證管理器106標(biāo)識(shí)對(duì)應(yīng)于寫(xiě)漏洞的特定數(shù)據(jù)單元132a-n-1,并且使所標(biāo)識(shí)的數(shù)據(jù)單元132a-n-1無(wú)效,同時(shí)保留存儲(chǔ)數(shù)據(jù)組130的其他數(shù)據(jù)單元132a-n-1。另選地或除此之外,驗(yàn)證管理器106可實(shí)施一個(gè)或更多個(gè)恢復(fù)操作以重構(gòu)數(shù)據(jù)組130(例如,重寫(xiě)存儲(chǔ)數(shù)據(jù)組130的部分)、通過(guò)使用存儲(chǔ)陣列110來(lái)重構(gòu)無(wú)效數(shù)據(jù)等。在一些實(shí)施例中,存儲(chǔ)服務(wù)層102被配置成從一個(gè)或更多個(gè)客戶端、替代存儲(chǔ)位置(例如,如本文進(jìn)一步詳細(xì)公開(kāi)的日志存儲(chǔ))等請(qǐng)求存儲(chǔ)數(shù)據(jù)組130的替換數(shù)據(jù)。
在一些實(shí)施例中,驗(yàn)證管理器106可被配置成通過(guò)使用完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)包括無(wú)效數(shù)據(jù)131的特定數(shù)據(jù)單元132。如上文所述且如圖1i所示,完整性數(shù)據(jù)144可包括對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130內(nèi)的數(shù)據(jù)單元132a-n-1的相應(yīng)完整性數(shù)據(jù)(完整性數(shù)據(jù)144a-144n-1)。驗(yàn)證管理器106可通過(guò)以下方式來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130:a)訪問(wèn)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n,以及b)將數(shù)據(jù)單元132a-n與相應(yīng)的完整性數(shù)據(jù)144a-n-1進(jìn)行比較。在圖1i的實(shí)施例中,完整性數(shù)據(jù)144a和144c-n-1可對(duì)應(yīng)于相應(yīng)的數(shù)據(jù)單元132a和132c-n-1。完整性數(shù)據(jù)144b可能不對(duì)應(yīng)于數(shù)據(jù)單元132b的無(wú)效數(shù)據(jù)131。因此,驗(yàn)證管理器106可確定存儲(chǔ)數(shù)據(jù)組130包括寫(xiě)漏洞。驗(yàn)證管理器106也可確定寫(xiě)漏洞與數(shù)據(jù)單元132b有關(guān),以及其他數(shù)據(jù)單元132a和132c-n-1包括有效數(shù)據(jù)。作為響應(yīng),驗(yàn)證管理器106可實(shí)施寫(xiě)漏洞恢復(fù)操作,其可包括但不限于以下操作:a)向存儲(chǔ)陣列110和/或(一個(gè)或更多個(gè))客戶端通知寫(xiě)漏洞,b)使數(shù)據(jù)單元132b無(wú)效(例如,使邏輯地址空間104與數(shù)據(jù)單元132b的存儲(chǔ)地址之間的(一個(gè)或更多個(gè))映射無(wú)效)和/或c)保留其他有效數(shù)據(jù)單元132a和132c-n-1(例如,保留至有效數(shù)據(jù)單元132a和132c-n-1的映射和/或重寫(xiě)數(shù)據(jù)單元132a和132c-n-1的內(nèi)容在存儲(chǔ)陣列110上和/或至另一存儲(chǔ)資源);d)恢復(fù)數(shù)據(jù)單元132b的內(nèi)容;e)訪問(wèn)數(shù)據(jù)單元132b的替換數(shù)據(jù)等。
如上所述,在圖1i的實(shí)施例中,驗(yàn)證管理器106可另外被配置成尤其是通過(guò)保留存儲(chǔ)數(shù)據(jù)組130的其他有效數(shù)據(jù)單元132a和132c-n-1來(lái)緩解數(shù)據(jù)單元132b處的寫(xiě)漏洞、通過(guò)使用其他數(shù)據(jù)單元132a和132c-n-1(以及由存儲(chǔ)陣列110管理的陣列元數(shù)據(jù)134)重構(gòu)數(shù)據(jù)單元132b等。驗(yàn)證管理器106可被配置成通過(guò)以下方式來(lái)保留有效數(shù)據(jù)單元132a和132c-n-1:a)保留與轉(zhuǎn)換層105中所存儲(chǔ)的數(shù)據(jù)單元132a和132c-n-1有關(guān)的映射(同時(shí)移除與數(shù)據(jù)單元132b有關(guān)的映射),b)將數(shù)據(jù)單元132a和132c-n-1的有效數(shù)據(jù)重寫(xiě)到其他存儲(chǔ)資源和/或另一數(shù)據(jù)組130內(nèi)等。另選地或除此之外,驗(yàn)證管理器106可被配置成通過(guò)使用存儲(chǔ)陣列110來(lái)重構(gòu)數(shù)據(jù)單元132b。如本文所公開(kāi)的,存儲(chǔ)陣列110可被配置成與陣列元數(shù)據(jù)134一起存儲(chǔ)數(shù)據(jù)組130,陣列元數(shù)據(jù)134尤其是可包括奇偶校驗(yàn)重構(gòu)數(shù)據(jù)。因此,存儲(chǔ)陣列110可通過(guò)使用存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134和其他數(shù)據(jù)單元132a和132c-n-1的內(nèi)容來(lái)重構(gòu)數(shù)據(jù)單元132b的內(nèi)容。在一個(gè)實(shí)施例中,響應(yīng)于確定數(shù)據(jù)單元132b包括無(wú)效數(shù)據(jù)131,驗(yàn)證管理器106向存儲(chǔ)陣列110發(fā)布標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130中的無(wú)效數(shù)據(jù)單元132的重構(gòu)請(qǐng)求147(例如,標(biāo)識(shí)數(shù)據(jù)單元132),并且通過(guò)存儲(chǔ)陣列110請(qǐng)求重構(gòu)所標(biāo)識(shí)的數(shù)據(jù)單元132。重構(gòu)請(qǐng)求147可包括重構(gòu)存儲(chǔ)數(shù)據(jù)組130內(nèi)的數(shù)據(jù)單元132b的內(nèi)容的明確的請(qǐng)求。另選地,重構(gòu)請(qǐng)求147可包括指示數(shù)據(jù)單元132b包括無(wú)效數(shù)據(jù)131(例如,讀取錯(cuò)誤信號(hào))的錯(cuò)誤消息,和/或其他通知、信號(hào)和/或指令。作為響應(yīng),存儲(chǔ)陣列110可使用對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的重構(gòu)數(shù)據(jù)(例如,陣列元數(shù)據(jù)134,諸如奇偶校驗(yàn)重構(gòu)數(shù)據(jù))來(lái)重構(gòu)數(shù)據(jù)單元132b。在一個(gè)實(shí)施例中,存儲(chǔ)陣列110在異或操作中(使用奇偶校驗(yàn)重構(gòu)數(shù)據(jù))來(lái)重構(gòu)數(shù)據(jù)單元132b,其中,重構(gòu)數(shù)據(jù)單元132b,使得:數(shù)據(jù)單元132b=數(shù)據(jù)單元132a異或數(shù)據(jù)單元132c...異或數(shù)據(jù)單元132n-1異或數(shù)據(jù)單元132n(奇偶校驗(yàn)重構(gòu)數(shù)據(jù))。存儲(chǔ)陣列110可另外被配置成將重構(gòu)數(shù)據(jù)單元132b重寫(xiě)到存儲(chǔ)陣列110(例如,用重構(gòu)的數(shù)據(jù)單元132b重寫(xiě)存儲(chǔ)位置115b上的無(wú)效數(shù)據(jù)131)。如本文所公開(kāi)的,驗(yàn)證管理器106可通過(guò)使用完整性數(shù)據(jù)144(例如,完整性數(shù)據(jù)144b)來(lái)驗(yàn)證重構(gòu)的數(shù)據(jù)單元132b。重構(gòu)的數(shù)據(jù)單元132b可被重新驗(yàn)證,以確保存儲(chǔ)數(shù)據(jù)組130的奇偶校驗(yàn)重構(gòu)數(shù)據(jù)(例如,陣列元數(shù)據(jù)134)是有效的(例如,不對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130中的另一寫(xiě)漏洞)。如果陣列元數(shù)據(jù)134是無(wú)效的(尤其是由于無(wú)效關(guān)機(jī)狀況而未正確寫(xiě)入),則重構(gòu)的數(shù)據(jù)單元132b將不對(duì)應(yīng)于完整性數(shù)據(jù)144b。
驗(yàn)證管理器106可被配置成根據(jù)存儲(chǔ)陣列110的能力(例如,陣列元數(shù)據(jù)134的“強(qiáng)度”)重構(gòu)存儲(chǔ)數(shù)據(jù)組130內(nèi)的任意數(shù)量的無(wú)效數(shù)據(jù)單元132。如本文所使用的,存儲(chǔ)陣列110的重構(gòu)信息的“強(qiáng)度”是指重構(gòu)信息能夠檢測(cè)和/或校正的數(shù)據(jù)單元錯(cuò)誤的數(shù)量。在單個(gè)數(shù)據(jù)單元132用于存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134的實(shí)施例中,存儲(chǔ)陣列110可僅能夠重構(gòu)單個(gè)無(wú)效數(shù)據(jù)單元132。因此,包括兩個(gè)或更多個(gè)無(wú)效數(shù)據(jù)單元132的存儲(chǔ)數(shù)據(jù)組130可能不能夠通過(guò)使用陣列元數(shù)據(jù)134來(lái)重構(gòu)。在另一實(shí)施例中,存儲(chǔ)陣列110可被配置成將多個(gè)數(shù)據(jù)單元132專(zhuān)用于重構(gòu)信息的存儲(chǔ),并因此可能能夠重構(gòu)存儲(chǔ)數(shù)據(jù)組130的多個(gè)數(shù)據(jù)單元132。存儲(chǔ)陣列110可例如被配置成以糾錯(cuò)碼(ecc)和/或其他技術(shù)對(duì)數(shù)據(jù)單元編碼。在圖1i的實(shí)施例中,驗(yàn)證管理器106可確定存儲(chǔ)陣列110能夠校正(通過(guò)查詢接口111等)的數(shù)據(jù)單元132的數(shù)量,并且可請(qǐng)求能夠通過(guò)使用由存儲(chǔ)陣列110維持的重構(gòu)數(shù)據(jù)進(jìn)行校正的存儲(chǔ)數(shù)據(jù)組130的校正。
在一些情況下,包括存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144的數(shù)據(jù)單元132內(nèi)可能會(huì)出現(xiàn)寫(xiě)漏洞。在此情況下,驗(yàn)證管理器106可確定用于存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144是無(wú)效的,并因此存儲(chǔ)數(shù)據(jù)組130包括寫(xiě)漏洞。然而,驗(yàn)證管理器106可能不能確定存儲(chǔ)數(shù)據(jù)組130的其他數(shù)據(jù)單元132b-n-1是否無(wú)效。在此種實(shí)施例中,驗(yàn)證管理器106可被配置成嘗試通過(guò)使用由存儲(chǔ)陣列110維護(hù)的重構(gòu)數(shù)據(jù)從寫(xiě)漏洞狀態(tài)恢復(fù)。如上所述,驗(yàn)證管理器106可請(qǐng)求重構(gòu)數(shù)據(jù)單元132a。驗(yàn)證管理器106然后可確定所重構(gòu)的數(shù)據(jù)單元132a是否包括完整性數(shù)據(jù)144(例如,完整性數(shù)據(jù)144a-n-1)和/或完整性數(shù)據(jù)144是否對(duì)應(yīng)于數(shù)據(jù)單元132a-n-1。如果是這樣,則驗(yàn)證管理器106可清除寫(xiě)漏洞狀況,并保留存儲(chǔ)數(shù)據(jù)組130的內(nèi)容(與重構(gòu)的數(shù)據(jù)單元132a一起)。
返回參考圖1h,圖1h的驗(yàn)證管理器106可被配置成確定數(shù)據(jù)單元132中的一個(gè)或更多個(gè)是否包括寫(xiě)漏洞,但是可能不能標(biāo)識(shí)包括無(wú)效數(shù)據(jù)131的(一個(gè)或更多個(gè))特定數(shù)據(jù)單元132a-n-1。驗(yàn)證管理器106可被配置成尤其是通過(guò)迭代重構(gòu)操作來(lái)嘗試重構(gòu)存儲(chǔ)數(shù)據(jù)組130的無(wú)效數(shù)據(jù)單元132。在迭代重構(gòu)操作中,驗(yàn)證管理器106被配置成請(qǐng)求數(shù)據(jù)單元132a-n-1中的相應(yīng)一者的重構(gòu)。然后,驗(yàn)證管理器106可嘗試使用完整性數(shù)據(jù)144來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130(利用所重構(gòu)的數(shù)據(jù)單元132a-n-1)。如果重構(gòu)有效的數(shù)據(jù)單元132(例如,數(shù)據(jù)單元132a),則重構(gòu)的數(shù)據(jù)單元132將被(一個(gè)或更多個(gè))其他數(shù)據(jù)單元的無(wú)效數(shù)據(jù)(例如,數(shù)據(jù)單元132b的無(wú)效數(shù)據(jù)131)損壞,并且如這樣,所得的數(shù)據(jù)組130將不能對(duì)完整性數(shù)據(jù)144進(jìn)行驗(yàn)證。重構(gòu)數(shù)據(jù)單元132b可致使重構(gòu)數(shù)據(jù)單元132b的有效內(nèi)容(例如,通過(guò)如本文所公開(kāi)的奇偶校驗(yàn)重構(gòu)),并因此,包括重構(gòu)數(shù)據(jù)單元132b的所得數(shù)據(jù)組將針對(duì)完整性數(shù)據(jù)144進(jìn)行驗(yàn)證。如本文所公開(kāi)的,作為響應(yīng),驗(yàn)證模塊106可清除寫(xiě)漏洞狀況并繼續(xù)驗(yàn)證其他存儲(chǔ)數(shù)據(jù)組130。如本文所公開(kāi)的,如果存儲(chǔ)數(shù)據(jù)組130與可由存儲(chǔ)陣列110校正(和/或結(jié)合未被驗(yàn)證管理器106迭代)的相比包括更多無(wú)效的數(shù)據(jù)單元132,則驗(yàn)證管理器106可確定存儲(chǔ)數(shù)據(jù)組130包括不能被校正的寫(xiě)漏洞,并且驗(yàn)證管理器106可實(shí)施一個(gè)或更多個(gè)寫(xiě)漏洞恢復(fù)操作。
在一些實(shí)施例中,驗(yàn)證管理器106被配置成標(biāo)識(shí)受數(shù)據(jù)組130中的寫(xiě)漏洞影響的特定數(shù)據(jù)單元132。參考圖1g,驗(yàn)證管理器106可被配置成生成包括與相應(yīng)數(shù)據(jù)單元132a-n-1有關(guān)的完整性數(shù)據(jù)的完整性數(shù)據(jù)144。驗(yàn)證管理器106可另外被配置成包括在被寫(xiě)入存儲(chǔ)陣列110上的數(shù)據(jù)組130內(nèi)的數(shù)據(jù)單元132a-n-1的一個(gè)或更多個(gè)中的完整性數(shù)據(jù)144。驗(yàn)證管理器106可被配置成將完整性數(shù)據(jù)144嵌入數(shù)據(jù)單元132a-n-1中的一個(gè)或更多個(gè)(作為數(shù)據(jù)單元132a-n-1的數(shù)據(jù)頭(header)等)。另選地或除此之外,完整性數(shù)據(jù)144可作為數(shù)據(jù)單元132a-n-1的一個(gè)或更多個(gè)中的日志條目和/或元數(shù)據(jù)來(lái)存儲(chǔ)。在一些實(shí)施例中,數(shù)據(jù)140包括使數(shù)據(jù)單元132a-n-1與相應(yīng)的邏輯地址(和/或其他標(biāo)識(shí)符)相關(guān)聯(lián)的持久性映射元數(shù)據(jù)(例如,映射日志條目),以及完整性數(shù)據(jù)144與數(shù)據(jù)單元132a-n-1的持久映射元數(shù)據(jù)包含在一起。
驗(yàn)證管理器106可另外被配置成向存儲(chǔ)陣列110通知所檢測(cè)到的寫(xiě)漏洞。驗(yàn)證管理器106可通過(guò)標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130(通過(guò)存儲(chǔ)地址)的存儲(chǔ)陣列110的接口111(通過(guò)使用協(xié)調(diào)模塊101)發(fā)布消息和/或指令,并且指示存儲(chǔ)數(shù)據(jù)組130包括寫(xiě)漏洞。另選地或除此之外,驗(yàn)證管理器106可尤其是通過(guò)向存儲(chǔ)陣列110發(fā)布trim和/或刪除消息來(lái)向存儲(chǔ)陣列110通知寫(xiě)漏洞狀況,該存儲(chǔ)陣列110被配置成使存儲(chǔ)數(shù)據(jù)組130無(wú)效和/或?qū)⑵鋸拇鎯?chǔ)陣列110刪除。
如上所述,存儲(chǔ)服務(wù)層102可被配置成防止存儲(chǔ)陣列110響應(yīng)于無(wú)效的關(guān)閉狀況來(lái)實(shí)施陣列恢復(fù)操作124。在一些實(shí)施例中,存儲(chǔ)服務(wù)層102被配置成向存儲(chǔ)陣列110發(fā)布被配置成防止存儲(chǔ)陣列110執(zhí)行特定的崩潰恢復(fù)操作的一個(gè)或更多個(gè)消息和/或指令145(例如,陣列控制器120的某些陣列恢復(fù)操作124的塊執(zhí)行)。消息和/或指令145可通過(guò)存儲(chǔ)陣列110的接口111發(fā)布。另選地,消息和/或指令145可通過(guò)存儲(chǔ)陣列110的配置接口傳送、可通過(guò)修改存儲(chǔ)陣列110的配置參數(shù)和/或文件等來(lái)傳送。本公開(kāi)不限于這方面,并且可以適用于防止存儲(chǔ)陣列110使用任何合適的機(jī)制來(lái)實(shí)施陣列恢復(fù)操作124,包括但不限于:設(shè)置與存儲(chǔ)陣列110有關(guān)的配置標(biāo)記、設(shè)置與存儲(chǔ)陣列110有關(guān)的存儲(chǔ)參數(shù)(例如,ioctrl參數(shù)、fadvise參數(shù)等)等等。
存儲(chǔ)陣列110可包括能夠存儲(chǔ)大量數(shù)據(jù)組130的存儲(chǔ)元件112a-n。因此并如圖1i所示,存儲(chǔ)陣列110的存儲(chǔ)地址空間116可能能夠存儲(chǔ)大量的數(shù)據(jù)組130。例如,存儲(chǔ)陣列110可包括16太字節(jié)(16tb)的存儲(chǔ)容量,并且因此可能夠存儲(chǔ)400,000,000個(gè)數(shù)據(jù)組130,其中,每個(gè)數(shù)據(jù)組130包括五個(gè)4kb數(shù)據(jù)單元132。驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的所有數(shù)據(jù)組130可能消耗大量的計(jì)算資源,并且需要相當(dāng)長(zhǎng)的時(shí)間,在此期間存儲(chǔ)陣列110(和/或存儲(chǔ)服務(wù)層102)的存儲(chǔ)服務(wù)可能不可用。
在一些實(shí)施例中,存儲(chǔ)服務(wù)層102包括被配置成在存儲(chǔ)陣列110上維護(hù)有序存儲(chǔ)日志的日志模塊108。響應(yīng)于檢測(cè)到無(wú)效關(guān)機(jī),驗(yàn)證管理器106可被配置成在存儲(chǔ)日志的前面驗(yàn)證數(shù)據(jù)組130,而不是驗(yàn)證存儲(chǔ)陣列110上的所有存儲(chǔ)數(shù)據(jù)組130。因此,驗(yàn)證管理器106可利用由存儲(chǔ)服務(wù)層102維護(hù)的存儲(chǔ)日志來(lái)減少響應(yīng)于與存儲(chǔ)陣列110有關(guān)的無(wú)效關(guān)機(jī)必須被驗(yàn)證的存儲(chǔ)數(shù)據(jù)組130的數(shù)量。相比之下,存儲(chǔ)陣列110的陣列恢復(fù)操作124可能需要對(duì)存儲(chǔ)陣列110上的基本上所有存儲(chǔ)數(shù)據(jù)組130進(jìn)行操作。
如本文進(jìn)一步詳細(xì)公開(kāi)的,日志模塊108可被配置成在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的附加點(diǎn)109將數(shù)據(jù)附加到存儲(chǔ)日志。日志模塊108可另外被配置成保持持久性元數(shù)據(jù),其尤其是定義了被寫(xiě)入存儲(chǔ)日志的數(shù)據(jù)(和/或?qū)?yīng)的數(shù)據(jù)組130)的日志次序。因此,日志模塊108可被配置成確定在存儲(chǔ)陣列110上執(zhí)行的某些存儲(chǔ)操作的時(shí)間次序。驗(yàn)證管理器106可在發(fā)生無(wú)效關(guān)機(jī)時(shí)確定被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)組130的(一個(gè)或更多個(gè))存儲(chǔ)位置,并且可將驗(yàn)證操作限制到(一個(gè)或更多個(gè))所確定的存儲(chǔ)位置。
在一些實(shí)施例中,驗(yàn)證管理器106尤其是通過(guò)使用日志模塊108來(lái)確定日志附加點(diǎn)109的存儲(chǔ)地址。驗(yàn)證管理器106可被配置成驗(yàn)證在存儲(chǔ)日志的前面的數(shù)據(jù)組130(例如,在附加點(diǎn)109被寫(xiě)入的數(shù)據(jù)組130),而不是驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的所有數(shù)據(jù)組130。在一些實(shí)施例中,驗(yàn)證管理器106被配置成驗(yàn)證在存儲(chǔ)日志的前面的數(shù)據(jù)組130(例如,在日志附加點(diǎn)109的數(shù)據(jù)組130)。另選地或除此之外,驗(yàn)證管理器106可被配置成驗(yàn)證存儲(chǔ)地址空間116(驗(yàn)證區(qū)域118)的特定區(qū)域內(nèi)的(一個(gè)或更多個(gè))數(shù)據(jù)組130。驗(yàn)證區(qū)域118可包括在無(wú)效關(guān)機(jī)時(shí)寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)組130(基于所確定的日志附加點(diǎn)109的存儲(chǔ)地址和/或存儲(chǔ)陣列110上的存儲(chǔ)數(shù)據(jù)組130的日志次序)。因此,驗(yàn)證區(qū)域118可包括可能受無(wú)效關(guān)機(jī)(例如,所存儲(chǔ)的可包括寫(xiě)漏洞的數(shù)據(jù)組)影響的存儲(chǔ)數(shù)據(jù)組130。盡管驗(yàn)證區(qū)域118被描繪為存儲(chǔ)地址空間116中的連續(xù)區(qū)域,但是本公開(kāi)不限于這方面,并且可以適于根據(jù)存儲(chǔ)地址空間116內(nèi)的任何合適的模式附加數(shù)據(jù)組。
如上所述,在實(shí)施陣列恢復(fù)操作124的同時(shí),存儲(chǔ)陣列110可能不可用。在圖1i的實(shí)施例中,存儲(chǔ)服務(wù)層102可被配置成指示存儲(chǔ)陣列110不執(zhí)行指定的陣列恢復(fù)操作124。存儲(chǔ)服務(wù)層102可另外被配置成指示存儲(chǔ)陣列110在無(wú)效關(guān)機(jī)之后(并且未完成指定的陣列恢復(fù)操作124)提供對(duì)存儲(chǔ)服務(wù)的訪問(wèn)。如本文所公開(kāi)的,存儲(chǔ)服務(wù)層102可在驗(yàn)證管理器106驗(yàn)證存儲(chǔ)數(shù)據(jù)組130時(shí),防止對(duì)存儲(chǔ)陣列110(由其他客戶端)的訪問(wèn)。
在一些實(shí)施例中,存儲(chǔ)服務(wù)層102可防止對(duì)存儲(chǔ)陣列110的特定區(qū)域的訪問(wèn)并允許訪問(wèn)其他區(qū)域。如上所述,驗(yàn)證管理器106可被配置成在無(wú)效關(guān)機(jī)時(shí)確定對(duì)應(yīng)于存儲(chǔ)日志的前面的(一個(gè)或更多個(gè))存儲(chǔ)地址(例如,驗(yàn)證區(qū)域118)。驗(yàn)證管理器106可防止對(duì)(一個(gè)或更多個(gè))所確定的存儲(chǔ)地址的訪問(wèn),并且可允許訪問(wèn)存儲(chǔ)陣列110的存儲(chǔ)地址空間116的其他區(qū)域。因此,可在無(wú)效關(guān)機(jī)之后以及同時(shí)驗(yàn)證管理器106驗(yàn)證存儲(chǔ)在存儲(chǔ)地址空間116的其他區(qū)域內(nèi)(例如,驗(yàn)證區(qū)域118)的數(shù)據(jù)組130時(shí),對(duì)不受寫(xiě)漏洞狀況影響的與存儲(chǔ)地址空間116的區(qū)域有關(guān)的存儲(chǔ)請(qǐng)求進(jìn)行維護(hù)。
圖2為用于存儲(chǔ)錯(cuò)誤管理的方法200的一個(gè)實(shí)施例的流程圖。步驟210包括生成對(duì)應(yīng)于被諸如存儲(chǔ)陣列110的存儲(chǔ)引擎存儲(chǔ)的數(shù)據(jù)的完整性元數(shù)據(jù)144。如本文所公開(kāi)的,存儲(chǔ)引擎可被配置成將數(shù)據(jù)存儲(chǔ)在相應(yīng)的數(shù)據(jù)組130內(nèi),并與重構(gòu)數(shù)據(jù)(例如,陣列元數(shù)據(jù)134)一起存儲(chǔ)。
步驟220包括從與存儲(chǔ)引擎有關(guān)的無(wú)效關(guān)機(jī)恢復(fù)。步驟220可包括檢測(cè)對(duì)應(yīng)于電力損耗、電力中斷、電力畸變、崩潰狀況、錯(cuò)誤狀況、中斷、崩潰、故障、硬件故障、軟件故障和/或除了存儲(chǔ)陣列和/或其部件的正常關(guān)機(jī)之外的任何其他狀況中的一個(gè)或更多個(gè)的無(wú)效關(guān)機(jī)狀況。無(wú)效的關(guān)機(jī)狀況可對(duì)應(yīng)于存儲(chǔ)陣列(例如,存儲(chǔ)陣列控制器)的無(wú)效關(guān)機(jī)狀況、存儲(chǔ)元件的無(wú)效關(guān)機(jī)、存儲(chǔ)陣列的通信基礎(chǔ)設(shè)施的無(wú)效關(guān)機(jī)、高級(jí)存儲(chǔ)客戶端的無(wú)效關(guān)機(jī)、包括存儲(chǔ)陣列的計(jì)算系統(tǒng)、存儲(chǔ)元件和/或高級(jí)存儲(chǔ)客戶端的無(wú)效關(guān)機(jī)等。如本文所公開(kāi)的,存儲(chǔ)層102、協(xié)調(diào)模塊101和/或驗(yàn)證管理器106可檢測(cè)出無(wú)效關(guān)機(jī)狀況。
步驟220可另外包括通過(guò)使用步驟210的完整性元數(shù)據(jù)從無(wú)效關(guān)機(jī)中恢復(fù)。步驟220可包括通過(guò)使用步驟210的完整性元數(shù)據(jù)144驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130。因此,步驟220可包括訪問(wèn)存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù),并將訪問(wèn)的數(shù)據(jù)與對(duì)應(yīng)的完整性數(shù)據(jù)144進(jìn)行比較。步驟220可另外包括從存儲(chǔ)數(shù)據(jù)組130的一個(gè)或更多個(gè)數(shù)據(jù)單元132提取存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144。另選地或除此之外,步驟220可包括從單獨(dú)的存儲(chǔ)元件112a-n和/或單獨(dú)的存儲(chǔ)資源訪問(wèn)數(shù)據(jù)組130的完整性數(shù)據(jù)144。在一些實(shí)施例中,步驟220包括響應(yīng)于確定完整性數(shù)據(jù)不對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的訪問(wèn)數(shù)據(jù),確定存儲(chǔ)數(shù)據(jù)組包括寫(xiě)漏洞。如本文所公開(kāi)的,步驟220可另外包括尤其是通過(guò)使存儲(chǔ)數(shù)據(jù)組130無(wú)效、重寫(xiě)存儲(chǔ)數(shù)據(jù)組130的部分、向存儲(chǔ)引擎通知寫(xiě)漏洞(通過(guò)存儲(chǔ)陣列110的接口111)等來(lái)緩解寫(xiě)漏洞。
在一些實(shí)施例中,存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144包括對(duì)應(yīng)于數(shù)據(jù)組130內(nèi)的多個(gè)數(shù)據(jù)單元132中的每者的完整性數(shù)據(jù)。因此,步驟220可包括通過(guò)使用相應(yīng)的完整性數(shù)據(jù)來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130的各個(gè)數(shù)據(jù)單元132。步驟220可另外包括確定數(shù)據(jù)單元132中的任一者是否包括無(wú)效數(shù)據(jù)(例如,存儲(chǔ)數(shù)據(jù)組130是否不完整和/或包括寫(xiě)漏洞)。步驟220可另外包括確定包括寫(xiě)漏洞的存儲(chǔ)數(shù)據(jù)組130內(nèi)的(一個(gè)或更多個(gè))特定數(shù)據(jù)單元132。步驟220可另外包括如本文所公開(kāi)的緩解檢測(cè)到的寫(xiě)漏洞,和/或如本文所公開(kāi)的,通過(guò)使用存儲(chǔ)數(shù)據(jù)組130的其他有效數(shù)據(jù)來(lái)恢復(fù)寫(xiě)漏洞的數(shù)據(jù)。
步驟220可另外包括驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130的子集(與存儲(chǔ)在存儲(chǔ)陣列110上的所有數(shù)據(jù)組130相對(duì))??苫谟绕涫怯纱鎯?chǔ)日志定義的數(shù)據(jù)組130的時(shí)間次序來(lái)標(biāo)識(shí)子集。步驟220可包括標(biāo)識(shí)存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的附加點(diǎn)109和/或確定對(duì)應(yīng)附加點(diǎn)109和/或存儲(chǔ)日志的前面的存儲(chǔ)地址空間116內(nèi)的驗(yàn)證區(qū)域118。步驟220可包括在存儲(chǔ)日志的前面和/或在指定的驗(yàn)證區(qū)域118內(nèi)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130。步驟220可另外包括防止對(duì)驗(yàn)證區(qū)域118中存儲(chǔ)數(shù)據(jù)組的訪問(wèn),直到其中的存儲(chǔ)數(shù)據(jù)組130已被驗(yàn)證。步驟220可另外包括允許訪問(wèn)存儲(chǔ)在存儲(chǔ)地址空間116的(一個(gè)或更多個(gè))其他區(qū)域中的數(shù)據(jù)組130。
步驟230包括更換存儲(chǔ)引擎的恢復(fù)操作。如本文所公開(kāi)的,步驟230可包括防止存儲(chǔ)引擎實(shí)施一個(gè)或更多個(gè)陣列恢復(fù)操作124。步驟230可另外包括配置存儲(chǔ)引擎以允許在無(wú)效關(guān)機(jī)之后訪問(wèn)存儲(chǔ)陣列110,而無(wú)需實(shí)施一個(gè)或更多個(gè)陣列恢復(fù)操作124。
圖3為用于存儲(chǔ)錯(cuò)誤管理的方法300的另一實(shí)施例的流程圖。如本文所公開(kāi)的,步驟310可包括存儲(chǔ)對(duì)應(yīng)于被寫(xiě)入raid存儲(chǔ)系統(tǒng)諸如存儲(chǔ)陣列110的相應(yīng)數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)的校驗(yàn)和數(shù)據(jù)。步驟310的校驗(yàn)和數(shù)據(jù)可包括由存儲(chǔ)服務(wù)層102的驗(yàn)證管理器106生成的完整性數(shù)據(jù)144。被寫(xiě)入raid存儲(chǔ)系統(tǒng)的數(shù)據(jù)條帶可包括奇偶校驗(yàn)重構(gòu)數(shù)據(jù)(陣列元數(shù)據(jù)134)。
步驟320包括響應(yīng)于無(wú)效關(guān)機(jī)來(lái)驗(yàn)證被寫(xiě)入raid存儲(chǔ)系統(tǒng)的數(shù)據(jù)條帶。步驟320可包括通過(guò)使用步驟310的校驗(yàn)和數(shù)據(jù)(例如,完整性數(shù)據(jù)144)來(lái)驗(yàn)證數(shù)據(jù)條帶,其與raid存儲(chǔ)系統(tǒng)的奇偶校驗(yàn)重構(gòu)數(shù)據(jù)(例如,陣列元數(shù)據(jù)134)無(wú)關(guān)。步驟320可包括通過(guò)以下方式來(lái)驗(yàn)證數(shù)據(jù)條帶:a)讀取數(shù)據(jù)條帶的數(shù)據(jù)單元132,b)計(jì)算讀取數(shù)據(jù)單元132的校驗(yàn)和,以及c)將所計(jì)算的校驗(yàn)和與步驟310的校驗(yàn)和進(jìn)行比較(與數(shù)據(jù)條帶一起存儲(chǔ)和/或在單獨(dú)的存儲(chǔ)位置中)。如本文所公開(kāi)的,步驟320可另外包括緩解檢測(cè)到的寫(xiě)漏洞狀況。在一些實(shí)施例中,步驟320另外包括確定數(shù)據(jù)條帶的特定數(shù)據(jù)單元132是否包括無(wú)效數(shù)據(jù)(通過(guò)使用與相應(yīng)數(shù)據(jù)單元132有關(guān)的校驗(yàn)和數(shù)據(jù))、重構(gòu)特定數(shù)據(jù)單元(如果可能的話)等等。步驟320可另外包括尤其是基于raid存儲(chǔ)系統(tǒng)的存儲(chǔ)地址空間116內(nèi)的數(shù)據(jù)條帶的日志次序來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)條帶的子集。
步驟330可包括驗(yàn)證存儲(chǔ)層102處的數(shù)據(jù)條帶,以取代raid存儲(chǔ)系統(tǒng)的崩潰恢復(fù)操作(例如,取代一個(gè)或更多個(gè)陣列恢復(fù)操作124)。如本文所公開(kāi)的,步驟330可包括配置raid存儲(chǔ)系統(tǒng)以委托崩潰恢復(fù)操作。步驟330可另外包括配置raid存儲(chǔ)系統(tǒng)以允許在無(wú)效關(guān)機(jī)之后訪問(wèn)存儲(chǔ)陣列110,并且無(wú)需實(shí)施raid存儲(chǔ)系統(tǒng)的崩潰恢復(fù)操作。
圖4為用于存儲(chǔ)錯(cuò)誤管理的方法400的一個(gè)實(shí)施例的流程圖。步驟410包括通過(guò)使用存儲(chǔ)陣列控制器120將數(shù)據(jù)組130附加到在存儲(chǔ)陣列110上維護(hù)的存儲(chǔ)日志,其中,存儲(chǔ)陣列控制器120被配置成與對(duì)應(yīng)的陣列元數(shù)據(jù)134(例如raid奇偶校驗(yàn)重構(gòu)數(shù)據(jù))一起將數(shù)據(jù)組130存儲(chǔ)在存儲(chǔ)陣列110上的相應(yīng)數(shù)據(jù)條帶內(nèi)。
步驟420包括將與存儲(chǔ)在相應(yīng)數(shù)據(jù)條帶內(nèi)的數(shù)據(jù)組130對(duì)應(yīng)的完整性數(shù)據(jù)144存儲(chǔ)在存儲(chǔ)陣列110上。完整性數(shù)據(jù)144可包括數(shù)據(jù)組130的數(shù)據(jù)單元132的校驗(yàn)和。另選地或除此之外,完整性數(shù)據(jù)144可包括數(shù)據(jù)組130的多個(gè)數(shù)據(jù)單元132中的每者的校驗(yàn)和數(shù)據(jù)。完整性數(shù)據(jù)144可被存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130內(nèi)和/或可被存儲(chǔ)在單獨(dú)的存儲(chǔ)位置和/或存儲(chǔ)資源中。
步驟430包括響應(yīng)于存儲(chǔ)陣列110的無(wú)效關(guān)機(jī),搶占存儲(chǔ)陣列控制器120的崩潰恢復(fù)操作。步驟430可包括如本文所公開(kāi)的,防止陣列控制器120執(zhí)行一個(gè)或更多個(gè)陣列恢復(fù)操作124。步驟430可另外包括驗(yàn)證存儲(chǔ)陣列110上的一個(gè)或更多個(gè)存儲(chǔ)數(shù)據(jù)條帶。在一些實(shí)施例中,步驟430包括通過(guò)使用與數(shù)據(jù)條帶一起存儲(chǔ)的完整性數(shù)據(jù)144來(lái)驗(yàn)證在存儲(chǔ)陣列110上的存儲(chǔ)日志前面的數(shù)據(jù)條帶。步驟430可包括確定存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的存儲(chǔ)日志的附加點(diǎn)109,以及標(biāo)識(shí)在存儲(chǔ)日志中的確定附加點(diǎn)109處和/或在其之前存儲(chǔ)的數(shù)據(jù)條帶。
圖5a為系統(tǒng)500a的一個(gè)實(shí)施例的框圖,其包括被配置成向一個(gè)或更多個(gè)客戶端502提供存儲(chǔ)服務(wù)的存儲(chǔ)服務(wù)層102。系統(tǒng)500a可包括計(jì)算系統(tǒng)501。計(jì)算系統(tǒng)501可包括任何合適的計(jì)算裝置,包括但不限于服務(wù)器、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、嵌入式系統(tǒng)、移動(dòng)裝置等。在一些實(shí)施例中,計(jì)算系統(tǒng)501包括多個(gè)計(jì)算裝置,諸如服務(wù)器計(jì)算裝置的集群。計(jì)算系統(tǒng)501可包括處理資源、易失性存儲(chǔ)器資源(例如,隨機(jī)存取存儲(chǔ)器(ram))、非易失性存儲(chǔ)資源、通信接口等等。計(jì)算系統(tǒng)501的處理資源可包括但不限于通用中央處理單元,諸如中央處理單元(cpu)、asic、可編程邏輯元件、fpga、pla、虛擬計(jì)算處理資源等。計(jì)算系統(tǒng)501的非易失性存儲(chǔ)資源可包括諸如磁性硬盤(pán)、固態(tài)存儲(chǔ)裝置、光學(xué)存儲(chǔ)裝置等的非暫態(tài)機(jī)器可讀存儲(chǔ)裝置。計(jì)算系統(tǒng)501的通信接口可被配置成將計(jì)算系統(tǒng)501通信地耦合至網(wǎng)絡(luò)。網(wǎng)絡(luò)可包括任何合適的通信網(wǎng)絡(luò),包括但不限于傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議(tcp/ip)網(wǎng)絡(luò)、局域網(wǎng)(lan)、廣域網(wǎng)(wan)、虛擬專(zhuān)用網(wǎng)(vpn)、存儲(chǔ)區(qū)域網(wǎng)絡(luò)(san)、公共交換電話網(wǎng)(pstn),因特網(wǎng)等。
如本文所公開(kāi)的,存儲(chǔ)服務(wù)層102可被配置成通過(guò)使用包括存儲(chǔ)陣列110的一個(gè)或更多個(gè)存儲(chǔ)資源510來(lái)向客戶端502提供存儲(chǔ)服務(wù)。客戶端502可包括但不限于操作系統(tǒng)(包括裸機(jī)操作系統(tǒng)、客戶操作系統(tǒng)、虛擬機(jī)等)、虛擬化系統(tǒng)(虛擬化內(nèi)核、管理程序、虛擬機(jī)等)、文件系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、遠(yuǎn)程i/o客戶端(例如,通過(guò)網(wǎng)絡(luò)115通信耦合至計(jì)算系統(tǒng)501和/或存儲(chǔ)模塊130的i/o客戶端502)等。存儲(chǔ)服務(wù)層102可包括被配置成向客戶端502公開(kāi)存儲(chǔ)服務(wù)的接口511。接口511可包括存儲(chǔ)接口、塊存儲(chǔ)接口、塊裝置接口、對(duì)象存儲(chǔ)接口、文件存儲(chǔ)接口、密鑰值存儲(chǔ)接口、虛擬化存儲(chǔ)接口、虛擬存儲(chǔ)單元(vsu)、數(shù)據(jù)庫(kù)存儲(chǔ)接口等中的一個(gè)或更多個(gè)。存儲(chǔ)服務(wù)層102(和/或接口511)可通過(guò)使用各種部件、模塊、電路等來(lái)實(shí)施和/或呈現(xiàn)給客戶端502,各種部件、模塊、電路包括但不限于:內(nèi)核級(jí)模塊、用戶空間模塊、驅(qū)動(dòng)器級(jí)模塊、驅(qū)動(dòng)器、i/o控制器、i/o管理器、i/o層、i/o服務(wù)、存儲(chǔ)控制器、存儲(chǔ)管理器、存儲(chǔ)層、存儲(chǔ)服務(wù)、scsi模塊、庫(kù)、共享庫(kù)、可加載庫(kù)、dll、設(shè)備驅(qū)動(dòng)程序、ddi模塊、ldd模塊、pdd模塊、wfd模塊、umdf模塊、kmdf模塊、i/o套件模塊、udi模塊、sdi模塊、sdk等。
如上所述,存儲(chǔ)服務(wù)層102(和/或其部件,諸如驗(yàn)證管理器106、崩潰恢復(fù)模塊516等)可被實(shí)施為硬件部件,其可包括但不限于:電路、集成電路、asic、可編程硬件部件、pla、fpga、控制器硬件、存儲(chǔ)控制器硬件。另選地或除此之外,存儲(chǔ)服務(wù)層102(和/或其部件,諸如驗(yàn)證管理器106、崩潰恢復(fù)模塊516等)的部分可被實(shí)施為存儲(chǔ)在機(jī)器可讀存儲(chǔ)介質(zhì)上的指令,諸如磁性硬盤(pán)、固態(tài)存儲(chǔ)裝置、光學(xué)存儲(chǔ)裝置等。在一些實(shí)施例中,指令被配置成由特定類(lèi)型的硬件執(zhí)行,并且可包括但不限于:固件、fpga比特流、pla配置數(shù)據(jù)等。因此,在一些實(shí)施例中,存儲(chǔ)服務(wù)層102(和/或其部件,諸如驗(yàn)證管理器106、崩潰恢復(fù)模塊516等)的部分包括存儲(chǔ)在特定硬件裝置上(例如,存儲(chǔ)在rom、eprom等上)的只讀數(shù)據(jù)。另選地或除此之外,指令可被配置成由計(jì)算系統(tǒng)501執(zhí)行和/或解釋。存儲(chǔ)服務(wù)層102(和/或其部件,諸如驗(yàn)證管理器106、崩潰恢復(fù)模塊516等)的部分可包括:內(nèi)核級(jí)模塊、用戶空間模塊、驅(qū)動(dòng)器級(jí)模塊、驅(qū)動(dòng)器、i/o控制器、i/o管理器、i/o層、i/o服務(wù)、存儲(chǔ)驅(qū)動(dòng)器、存儲(chǔ)管理器、存儲(chǔ)層、軟件定義的存儲(chǔ)層、scsi模塊、庫(kù)、共享庫(kù)、可加載庫(kù)、dll庫(kù)、設(shè)備驅(qū)動(dòng)程序、ddi模塊、ldd模塊、pdd模塊、wfd模塊、umdf模塊、kmdf模塊、i/o套件模塊、udi模塊、sdi模塊、sdk等。
存儲(chǔ)服務(wù)層102可包括存儲(chǔ)資源管理器521,尤其是其被配置成管理對(duì)存儲(chǔ)資源510的數(shù)據(jù)存儲(chǔ)和/或檢索操作。如本文所公開(kāi)的,存儲(chǔ)資源管理器521可包括被配置成管理存儲(chǔ)陣列110的協(xié)調(diào)模塊101。存儲(chǔ)服務(wù)層102可被配置成管理與邏輯地址空間104有關(guān)的數(shù)據(jù)存儲(chǔ)和檢索操作。存儲(chǔ)操作可在包括存儲(chǔ)陣列110的存儲(chǔ)資源510上實(shí)施。如本文所公開(kāi)的,存儲(chǔ)陣列110可包括多個(gè)存儲(chǔ)元件112a-n,其包括相應(yīng)的存儲(chǔ)位置115。陣列控制器120可被配置成在數(shù)據(jù)組130中排列數(shù)據(jù)以存儲(chǔ)在存儲(chǔ)陣列110內(nèi)。如本文所公開(kāi)的,數(shù)據(jù)組130可包括被配置成用于存儲(chǔ)在存儲(chǔ)陣列110的相應(yīng)存儲(chǔ)元件112a-n上的多個(gè)數(shù)據(jù)單元132。陣列控制器120可另外被配置成生成并存儲(chǔ)與數(shù)據(jù)組130有關(guān)的陣列元數(shù)據(jù)134。在一些實(shí)施例中,存儲(chǔ)陣列110包括raid存儲(chǔ)系統(tǒng)、raid存儲(chǔ)引擎、raid存儲(chǔ)服務(wù)等。
存儲(chǔ)陣列110可通過(guò)互連515通信耦合至存儲(chǔ)服務(wù)層102,該互連515可包括但不限于:外圍部件互連(pci)、pciexpress(pci-e)接口、串行at附件(串行ata或sata)、并行ata(pata)、小型計(jì)算機(jī)系統(tǒng)接口(scsi)、ieee1394(火線,firewire)、光纖信道、通用串行總線(usb)等。在一些實(shí)施例中,存儲(chǔ)陣列110可包括一個(gè)或更多個(gè)遠(yuǎn)程存儲(chǔ)裝置,其通過(guò)網(wǎng)絡(luò)(和/或其他通信接口,諸如存儲(chǔ)區(qū)域網(wǎng)絡(luò)(san)、虛擬存儲(chǔ)區(qū)域網(wǎng)絡(luò)(vsan)等)通信耦合至存儲(chǔ)服務(wù)層102。因此,互連115可包括遠(yuǎn)程總線,諸如pci-e總線、網(wǎng)絡(luò)連接(例如,無(wú)限帶寬技術(shù),infiniband)、rdma連接、存儲(chǔ)網(wǎng)絡(luò)、光纖信道協(xié)議(fcp)網(wǎng)絡(luò)、hyperscsi等。
存儲(chǔ)服務(wù)層102的接口511可尤其是通過(guò)邏輯地址空間104向客戶端502呈現(xiàn)存儲(chǔ)服務(wù)。邏輯地址空間104可包括邏輯標(biāo)識(shí)符(lid)的組、集、集合、范圍和/或擴(kuò)展。如本文所使用的,lid是指用于引用數(shù)據(jù)的任何機(jī)制,并且可包括但不限于:名稱(chēng)(例如,文件名、可分辨名稱(chēng)等)、數(shù)據(jù)標(biāo)識(shí)符、引用、鏈接、前端標(biāo)識(shí)符、邏輯地址、邏輯塊地址(lba)、存儲(chǔ)單元地址、虛擬存儲(chǔ)單元(vsu)地址、邏輯單元號(hào)(lun)地址、虛擬單元號(hào)(vun)地址、虛擬邏輯單元號(hào)(vlun)地址、虛擬存儲(chǔ)地址、唯一標(biāo)識(shí)符、全球唯一標(biāo)識(shí)符(guid)等。
轉(zhuǎn)換層105可被配置成將lid與特定存儲(chǔ)資源(例如,存儲(chǔ)在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的數(shù)據(jù))相關(guān)聯(lián)。邏輯地址空間104可與存儲(chǔ)地址空間116無(wú)關(guān),使得在存儲(chǔ)陣列110的邏輯地址空間104和存儲(chǔ)地址空間116(和/或其他存儲(chǔ)資源510)之間存在設(shè)置或預(yù)定義的映射。在一些實(shí)施例中,邏輯地址空間104是稀疏配置、薄配置和/或過(guò)度配置的,使得邏輯地址空間104的大小與存儲(chǔ)陣列110和/或其他存儲(chǔ)資源510的存儲(chǔ)地址空間116不同。在一些實(shí)施例中,邏輯地址空間104跨多個(gè)存儲(chǔ)資源510。
存儲(chǔ)服務(wù)層102可被配置成維護(hù)與邏輯地址空間104有關(guān)的虛擬化元數(shù)據(jù)505。虛擬化元數(shù)據(jù)505可包括但不限于:包括邏輯地址空間104的lid與存儲(chǔ)地址空間116內(nèi)的存儲(chǔ)地址之間的任意到任意的(any-to-any)映射的前向映射525,與存儲(chǔ)陣列110上的特定存儲(chǔ)位置115的內(nèi)容有關(guān)的反向映射、有效位圖、可靠性測(cè)試和/或狀態(tài)元數(shù)據(jù)、狀態(tài)信息(例如,錯(cuò)誤率、退出(retirement)狀態(tài)等)、高速緩存元數(shù)據(jù)等。虛擬化元數(shù)據(jù)505的一部分可被保持在計(jì)算系統(tǒng)501的易失性存儲(chǔ)器資源內(nèi)。另選地或除此之外,虛擬化元數(shù)據(jù)505的一部分可被存儲(chǔ)在計(jì)算系統(tǒng)501的非易失性存儲(chǔ)資源上和/或一個(gè)或更多個(gè)存儲(chǔ)資源510上。
圖5b描繪了虛擬化元數(shù)據(jù)505的實(shí)施例,具體地,包括存儲(chǔ)陣列110的邏輯地址空間104和存儲(chǔ)地址空間116之間的任意到任意的映射的前向映射525的實(shí)施例。如圖5b所示,邏輯地址空間104的大小可與存儲(chǔ)陣列110的下面的存儲(chǔ)地址空間116不同。在圖5b的實(shí)施例中,邏輯地址空間104可被薄配置,并因此可包括比存儲(chǔ)地址空間116中的存儲(chǔ)地址的范圍更大的lid范圍。另選地或除此之外,邏輯地址空間104可跨多個(gè)存儲(chǔ)資源510。
轉(zhuǎn)換層105可被配置成通過(guò)使用前向映射525的條目526將邏輯地址空間104的任何lid與存儲(chǔ)地址空間116內(nèi)的任何存儲(chǔ)地址相關(guān)聯(lián)。因此,轉(zhuǎn)換層105可包括邏輯地址空間104和存儲(chǔ)資源(例如,邏輯至存儲(chǔ)轉(zhuǎn)換層)之間的任意到任意的和/或多個(gè)對(duì)任意的轉(zhuǎn)換層。前向映射525可包括任何合適的數(shù)據(jù)結(jié)構(gòu),包括但不限于映射、散列映射、樹(shù)數(shù)據(jù)結(jié)構(gòu)、二叉樹(shù)(b-tree)、n元樹(shù)數(shù)據(jù)結(jié)構(gòu)(b+tree)、范圍編碼樹(shù)、基數(shù)樹(shù)等。前向映射525可包括表示已被分配用于存儲(chǔ)在存儲(chǔ)陣列110上的參考數(shù)據(jù)的lid的條目526。條目526可將lid與相應(yīng)的存儲(chǔ)地址相關(guān)聯(lián)。前向映射525可被稀疏地填充,并因此可省略對(duì)應(yīng)于當(dāng)前未被分配給客戶端502的lid的條目和/或當(dāng)前不用于存儲(chǔ)在存儲(chǔ)陣列110上的參考有效數(shù)據(jù)。前向映射525可包括范圍編碼數(shù)據(jù)結(jié)構(gòu),其中,條目526中的一個(gè)或更多個(gè)對(duì)應(yīng)于多個(gè)lid(例如,lid的范圍、程度和/或集合)。在一些實(shí)施例中,條目526可對(duì)應(yīng)于存儲(chǔ)資源510中的一者的存儲(chǔ)粒度。條目526中的一個(gè)或更多個(gè)可對(duì)應(yīng)于由存儲(chǔ)陣列110寫(xiě)入的數(shù)據(jù)組130(例如,包括n-1個(gè)數(shù)據(jù)單元132的數(shù)據(jù)組)。在圖5b的實(shí)施例中,前向映射525包括將lid34和35與存儲(chǔ)地址16987和16988相關(guān)聯(lián)的條目526,將lid42439與存儲(chǔ)地址842相關(guān)聯(lián)的條目526以及將n-l個(gè)lid的范圍(從lid92680開(kāi)始)與數(shù)據(jù)組130的n-1數(shù)據(jù)單元132(從存儲(chǔ)地址988開(kāi)始)相關(guān)聯(lián)的條目526。條目526可由樹(shù)數(shù)據(jù)結(jié)構(gòu)中的lid索引。然而,本公開(kāi)不限于這方面,并且可以適于使用任何合適的數(shù)據(jù)結(jié)構(gòu)和/或索引機(jī)制。
返回參考圖5a,存儲(chǔ)服務(wù)層102可另外包括日志模塊108,其被配置成以日志結(jié)構(gòu)化存儲(chǔ)配置(例如,在存儲(chǔ)日志中)在存儲(chǔ)資源510上存儲(chǔ)數(shù)據(jù)。如本文所使用的,“存儲(chǔ)日志”或“日志結(jié)構(gòu)”是指在存儲(chǔ)資源510的存儲(chǔ)地址空間(例如,在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi))內(nèi)的有序數(shù)據(jù)排列。存儲(chǔ)日志中的數(shù)據(jù)可包括定義與數(shù)據(jù)有關(guān)的上下文信息的持久性元數(shù)據(jù)和/或與其相關(guān)聯(lián),諸如數(shù)據(jù)的日志次序和/或數(shù)據(jù)的“邏輯接口”(例如,與數(shù)據(jù)相關(guān)聯(lián)的lid)。因此,存儲(chǔ)服務(wù)層102可被配置成以上下文的自描述格式存儲(chǔ)數(shù)據(jù)。如本文所使用的,上下文或自描述格式是指與持久性元數(shù)據(jù)相關(guān)聯(lián)地存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)格式。在一些實(shí)施例中,持久性元數(shù)據(jù)可被配置成標(biāo)識(shí)數(shù)據(jù),并因此可包括和/或引用數(shù)據(jù)的邏輯接口(例如,可包括與數(shù)據(jù)相關(guān)聯(lián)的(一個(gè)或更多個(gè))lid)。持久性元數(shù)據(jù)可包括其他信息,包括但不限于與數(shù)據(jù)所有者有關(guān)的信息、訪問(wèn)控制、數(shù)據(jù)類(lèi)型、數(shù)據(jù)的相對(duì)位置或偏移量、與數(shù)據(jù)相關(guān)聯(lián)的(一個(gè)或更多個(gè))存儲(chǔ)操作有關(guān)的信息(例如,原子存儲(chǔ)操作、事務(wù)等)、日志序列信息、數(shù)據(jù)存儲(chǔ)參數(shù)(例如,壓縮算法、加密等)等等。存儲(chǔ)服務(wù)層102可另外包括被配置成管理日志的部分(日志段)的日志管理器508。日志管理器508可被配置成回收和/或重新初始化日志存儲(chǔ)資源,諸如日志段、介質(zhì)存儲(chǔ)單元、介質(zhì)存儲(chǔ)分區(qū)(例如,擦除塊)、虛擬存儲(chǔ)單元、虛擬存儲(chǔ)分區(qū)(例如,擦除塊組)等。
參考圖5c,在一些實(shí)施例中,日志模塊108被配置成以上下文數(shù)據(jù)格式(數(shù)據(jù)包532)存儲(chǔ)數(shù)據(jù)。在一些實(shí)施例中,日志模塊108被配置成將數(shù)據(jù)包532寫(xiě)作存儲(chǔ)資源上的數(shù)據(jù)單元132。圖5c的數(shù)據(jù)包532包括數(shù)據(jù)段534和持久性元數(shù)據(jù)535。數(shù)據(jù)段534可為任意長(zhǎng)度和/或大小。持久性元數(shù)據(jù)535可被實(shí)施為數(shù)據(jù)包532的一個(gè)或更多個(gè)數(shù)據(jù)頭字段。持久性元數(shù)據(jù)535可被配置成定義數(shù)據(jù)段534的邏輯接口,并因此可包括和/或引用與數(shù)據(jù)段534相關(guān)聯(lián)的(一個(gè)或更多個(gè))lid。持久性元數(shù)據(jù)535可另外被配置成使數(shù)據(jù)段534與特定應(yīng)用、用戶、客戶端502、日志段等相關(guān)聯(lián)。在一些實(shí)施例中,持久性元數(shù)據(jù)535定義存儲(chǔ)日志內(nèi)的數(shù)據(jù)包532的日志次序。另選地或除此之外,數(shù)據(jù)包532可與被配置成尤其是定義數(shù)據(jù)包532的日志次序的持久性序列元數(shù)據(jù)537相關(guān)聯(lián)。如本文進(jìn)一步詳細(xì)公開(kāi)的,持久性序列元數(shù)據(jù)537可包括具有數(shù)據(jù)包532的日志段的序列標(biāo)識(shí)符,使得數(shù)據(jù)包532的日志次序?qū)?yīng)于a)與包括數(shù)據(jù)包532的日志段相關(guān)聯(lián)的序列標(biāo)識(shí)符,以及b)日志段內(nèi)的數(shù)據(jù)包532的序列次序。盡管圖5c描繪了數(shù)據(jù)包532的一個(gè)實(shí)施例,但是本公開(kāi)不限于這方面,并且可以以其他方式使數(shù)據(jù)(例如,數(shù)據(jù)段534)與持久性元數(shù)據(jù)相關(guān)聯(lián),包括但不限于單獨(dú)的元數(shù)據(jù)日志條目(例如,元數(shù)據(jù)備注)、單獨(dú)的元數(shù)據(jù)存儲(chǔ)、單獨(dú)的元數(shù)據(jù)日志等。
參考圖5a,存儲(chǔ)服務(wù)層102可被配置成根據(jù)各個(gè)存儲(chǔ)資源510的特性來(lái)排列用于存儲(chǔ)的數(shù)據(jù)。如本文所公開(kāi)的,存儲(chǔ)陣列110可被配置成在包括n-1個(gè)數(shù)據(jù)單元132的各個(gè)數(shù)據(jù)組130中寫(xiě)入數(shù)據(jù)。存儲(chǔ)服務(wù)層102可被配置成根據(jù)數(shù)據(jù)組130(例如,將數(shù)據(jù)合并成包括n-1個(gè)數(shù)據(jù)單元132的數(shù)據(jù)集530)將寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)分組。如本文所公開(kāi)的,驗(yàn)證管理器106可被配置成生成與數(shù)據(jù)集530有關(guān)的完整性數(shù)據(jù)144。存儲(chǔ)資源管理器521可發(fā)布將數(shù)據(jù)集530寫(xiě)入存儲(chǔ)陣列110(經(jīng)由互連515并通過(guò)使用協(xié)調(diào)模塊101)的請(qǐng)求。如本文所公開(kāi)的,作為響應(yīng),存儲(chǔ)陣列110可將數(shù)據(jù)集530寫(xiě)入相應(yīng)的數(shù)據(jù)組130內(nèi)。
圖5d描繪了被配置成被存儲(chǔ)陣列110作為數(shù)據(jù)組130寫(xiě)入的數(shù)據(jù)集530d的一個(gè)實(shí)施例。如圖5d所示,數(shù)據(jù)集530包括n-1個(gè)數(shù)據(jù)單元132a-n-1。數(shù)據(jù)單元132a-n-1可包括相應(yīng)的數(shù)據(jù)包532,其包括持久性元數(shù)據(jù)535和數(shù)據(jù)段534。如本文所公開(kāi)的,持久性元數(shù)據(jù)535可被配置成尤其是定義與數(shù)據(jù)段534相關(guān)聯(lián)的(一個(gè)或更多個(gè))lid。如本文所公開(kāi)的,持久性元數(shù)據(jù)535包括與數(shù)據(jù)段534有關(guān)的附加信息,諸如數(shù)據(jù)段534的日志次序等等。在一些實(shí)施例中,持久性元數(shù)據(jù)535另外包括與數(shù)據(jù)集530d有關(guān)的完整性數(shù)據(jù)144。如圖5d所示,數(shù)據(jù)單元132a的持久性元數(shù)據(jù)535a可包括與數(shù)據(jù)集530d有關(guān)的完整性數(shù)據(jù)144。完整性數(shù)據(jù)144可包括用于驗(yàn)證數(shù)據(jù)集530d的數(shù)據(jù)單元132a-n-1的內(nèi)容的信息。完整性數(shù)據(jù)144可由驗(yàn)證管理器106生成。驗(yàn)證管理器106可從數(shù)據(jù)集530d(例如,數(shù)據(jù)包532a-n-1)的數(shù)據(jù)單元132a-n-1的內(nèi)容導(dǎo)出完整性數(shù)據(jù)144。如本文所公開(kāi)的,完整性數(shù)據(jù)144可包括散列值、校驗(yàn)和、簽名、摘要等。在一些實(shí)施例中,完整性數(shù)據(jù)144包括對(duì)應(yīng)于相應(yīng)數(shù)據(jù)單元132a-n-1的多個(gè)完整性數(shù)據(jù)(例如,對(duì)應(yīng)于相應(yīng)的數(shù)據(jù)包532a-n-1的完整性數(shù)據(jù)144a-n-1)。在圖5d的實(shí)施例中,完整性數(shù)據(jù)144被包含在數(shù)據(jù)包532a(數(shù)據(jù)單元132a)的持久性元數(shù)據(jù)535a中。完整性數(shù)據(jù)144可從其他數(shù)據(jù)單元132b-n-1中省略。另選地,完整性數(shù)據(jù)144可被包含在數(shù)據(jù)單元132a-n-1中的兩或更多者中和/或數(shù)據(jù)單元132a-n-1的每者中。
參考圖5e,在一些實(shí)施例中,日志模塊108被配置成通過(guò)使用尤其是持久性元數(shù)據(jù)條目539(例如,不以本文所公開(kāi)的諸如數(shù)據(jù)包532的包格式寫(xiě)入數(shù)據(jù))來(lái)使數(shù)據(jù)與持久性元數(shù)據(jù)相關(guān)聯(lián)。日志模塊108可被配置成使數(shù)據(jù)集530e的數(shù)據(jù)段534與一個(gè)或更多個(gè)持久性元數(shù)據(jù)條目539相關(guān)聯(lián),該持久性元數(shù)據(jù)條目539可與數(shù)據(jù)集530e一起被寫(xiě)入存儲(chǔ)陣列110和/或另一存儲(chǔ)資源510(例如,附加到單獨(dú)的元數(shù)據(jù)日志)。如圖5e所示,持久性元數(shù)據(jù)條目538可包括與數(shù)據(jù)單元132a-n-1的內(nèi)容(例如,數(shù)據(jù)段534a-n-1)有關(guān)的上下文元數(shù)據(jù),其可包括但不限于:與數(shù)據(jù)單元132a-n-1的相應(yīng)數(shù)據(jù)段534a-n-1相關(guān)聯(lián)的(一個(gè)或更多個(gè))lid,與數(shù)據(jù)集530e有關(guān)的日志序列信息等。持久性元數(shù)據(jù)條目539可另外包括與數(shù)據(jù)集530e有關(guān)的完整性數(shù)據(jù)144??蓮臄?shù)據(jù)單元132a-n-1的內(nèi)容(例如,數(shù)據(jù)段534a-n-1)導(dǎo)出完整性數(shù)據(jù)144。在一些實(shí)施例中,完整性數(shù)據(jù)144包括對(duì)應(yīng)于相應(yīng)數(shù)據(jù)單元132a-n-1的相應(yīng)完整性數(shù)據(jù)144a-n-1(例如,數(shù)據(jù)段534a-n-1)。如本文所公開(kāi)的,完整性數(shù)據(jù)144可由驗(yàn)證管理器106生成并被包含在數(shù)據(jù)集530e中。盡管圖5e描繪了數(shù)據(jù)單元132a(具有數(shù)據(jù)段534a)內(nèi)的持久性元數(shù)據(jù)條目539,但是本公開(kāi)在這方面不受限制,并且可以適于將持久性元數(shù)據(jù)條目539包含在數(shù)據(jù)集530d的數(shù)據(jù)單元132a-n-1中的任一者中、在多個(gè)數(shù)據(jù)單元132a-n-1中和/或在單獨(dú)的數(shù)據(jù)單元132a-n-1(與圖5f所示的數(shù)據(jù)段534a-n-1分開(kāi))中。
圖5f示出了被配置成使數(shù)據(jù)與包括完整性數(shù)據(jù)144的持久性元數(shù)據(jù)相關(guān)聯(lián)的數(shù)據(jù)集530f的另一實(shí)施例。在圖5f的實(shí)施例中,數(shù)據(jù)單元132a-n和/或數(shù)據(jù)段534可具有固定大小,使得數(shù)據(jù)單元132a-n-1不能同時(shí)容納數(shù)據(jù)段534a-n-1和持久性元數(shù)據(jù)條目539。因此,在圖5f的實(shí)施例中,存儲(chǔ)服務(wù)層102被配置成將數(shù)據(jù)排列成包括n-2個(gè)數(shù)據(jù)單元132的數(shù)據(jù)集530f,并且將對(duì)應(yīng)于數(shù)據(jù)單元132a-n-2的持久性元數(shù)據(jù)條目539存儲(chǔ)在數(shù)據(jù)集530f內(nèi)的單獨(dú)數(shù)據(jù)單元132(例如,數(shù)據(jù)單元132a)中。
圖5g為描繪被配置成使數(shù)據(jù)與包括完整性元數(shù)據(jù)144的持久性元數(shù)據(jù)相關(guān)聯(lián)的數(shù)據(jù)集530g的進(jìn)一步的實(shí)施例的框圖。在圖5g的實(shí)施例中,日志模塊108被配置成維護(hù)與被寫(xiě)入存儲(chǔ)陣列110和/或其他存儲(chǔ)資源510(例如,元數(shù)據(jù)日志560)的數(shù)據(jù)有關(guān)的持久性元數(shù)據(jù)存儲(chǔ)。日志模塊108可附加與被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)集530g相對(duì)應(yīng)的持久性元數(shù)據(jù)條目539。在圖5g的實(shí)施例中,存儲(chǔ)服務(wù)層102被配置成將數(shù)據(jù)分組成包括n-1個(gè)數(shù)據(jù)段534a-n-1的數(shù)據(jù)集530g,使得每個(gè)數(shù)據(jù)段534a-n對(duì)應(yīng)于存儲(chǔ)陣列110的相應(yīng)數(shù)據(jù)單元132a-n。日志模塊108可被配置成尤其是通過(guò)將對(duì)應(yīng)于數(shù)據(jù)集530g的持久性元數(shù)據(jù)條目539附加至元數(shù)據(jù)日志560來(lái)維護(hù)與數(shù)據(jù)集530g有關(guān)的持久性的崩潰安全的元數(shù)據(jù)。持久性元數(shù)據(jù)條目539可包括與數(shù)據(jù)段534a-n-1有關(guān)的上下文元數(shù)據(jù),其可包括但不限于:與數(shù)據(jù)段534a-n-1相關(guān)聯(lián)的(一個(gè)或更多個(gè))lid、數(shù)據(jù)段534a-n-1(在存儲(chǔ)陣列110上)的存儲(chǔ)地址、完整性數(shù)據(jù)144等。如本文所公開(kāi)的,完整性數(shù)據(jù)144可從數(shù)據(jù)單元132a-n-1(數(shù)據(jù)段534a-n-1)的內(nèi)容導(dǎo)出。數(shù)據(jù)段534a-n-1的日志次序尤其是可基于元數(shù)據(jù)日志560內(nèi)的持久性元數(shù)據(jù)條目539的日志次序來(lái)確定。
盡管本文所述的數(shù)據(jù)集530d-g的實(shí)施例包括具有特定類(lèi)型的數(shù)據(jù)(例如,數(shù)據(jù)包532、數(shù)據(jù)段534等)的特定數(shù)量的數(shù)據(jù)單元132,但是本公開(kāi)不限于這方面,并且可以適于以任何合適的配置(例如,包括數(shù)據(jù)單元132的任何數(shù)量和/或排列的任何數(shù)據(jù)組130和/或數(shù)據(jù)集530)來(lái)管理存儲(chǔ)陣列110上的數(shù)據(jù)組130內(nèi)的數(shù)據(jù)的存儲(chǔ)。類(lèi)似地,盡管本文描述了用于使數(shù)據(jù)與持久性元數(shù)據(jù)相關(guān)聯(lián)的特定機(jī)制,但是本公開(kāi)在這方面不受限制,并且可以適于使用任何合適的機(jī)制使存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130中的數(shù)據(jù)與持久性元數(shù)據(jù)相關(guān)聯(lián)。用于管理持久性元數(shù)據(jù)有關(guān)的存儲(chǔ)的進(jìn)一步的實(shí)施例由swaminathansundararaman等人在2014年12月12日提交的題為“通用存儲(chǔ)虛擬化接口(generalizedstoragevirtualizationinterface)”的美國(guó)申請(qǐng)序列號(hào)14/569,382中公開(kāi),其通過(guò)引用并入本文。
返回參考圖5a,驗(yàn)證管理器106可被配置成通過(guò)使用與數(shù)據(jù)組130相關(guān)聯(lián)的存儲(chǔ)完整性元數(shù)據(jù)144來(lái)驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130。驗(yàn)證管理器106可被配置成響應(yīng)于與存儲(chǔ)陣列110有關(guān)的無(wú)效關(guān)機(jī)狀況來(lái)驗(yàn)證數(shù)據(jù)組130。在圖5a的實(shí)施例中,驗(yàn)證管理器106包括被配置成標(biāo)識(shí)無(wú)效關(guān)機(jī)狀況的監(jiān)視器506。監(jiān)視器506可被配置成訪問(wèn)存儲(chǔ)陣列110(通過(guò)接口111),以便尤其是確定存儲(chǔ)陣列110的狀態(tài)、檢測(cè)與存儲(chǔ)陣列110有關(guān)的無(wú)效關(guān)機(jī)狀況等等。監(jiān)視器506可另外被配置成標(biāo)識(shí)與存儲(chǔ)服務(wù)層102和/或計(jì)算系統(tǒng)501有關(guān)的無(wú)效關(guān)機(jī)狀況。
響應(yīng)于檢測(cè)到與存儲(chǔ)陣列110相關(guān)的無(wú)效關(guān)機(jī)狀況,驗(yàn)證管理器106可被配置成實(shí)現(xiàn)一個(gè)或更多個(gè)恢復(fù)操作(通過(guò)使用崩潰恢復(fù)模塊516,如本文進(jìn)一步詳細(xì)所公開(kāi)的)。驗(yàn)證管理器106的恢復(fù)操作可替代存儲(chǔ)陣列110的陣列恢復(fù)操作124。因此,在一些實(shí)施例中,驗(yàn)證管理器106被配置成響應(yīng)于檢測(cè)到無(wú)效關(guān)機(jī)狀況而搶占存儲(chǔ)陣列110的恢復(fù)操作。驗(yàn)證管理器106可被配置成指示存儲(chǔ)陣列110通過(guò)以下中的一個(gè)或更多個(gè)來(lái)向存儲(chǔ)服務(wù)層102委派恢復(fù)操作:通過(guò)接口111和/或通過(guò)使用協(xié)調(diào)模塊101向存儲(chǔ)陣列110發(fā)布消息、指令、命令等等。在一些實(shí)施例中,存儲(chǔ)陣列110被配置成通過(guò)使用無(wú)效關(guān)機(jī)指示符(例如,由存儲(chǔ)陣列110和/或其他實(shí)體設(shè)置的無(wú)效關(guān)機(jī)標(biāo)記)來(lái)檢測(cè)無(wú)效關(guān)機(jī)狀況。因此,在一些實(shí)施例中,驗(yàn)證管理器106被配置成防止存儲(chǔ)陣列110通過(guò)以下中的一個(gè)或更多個(gè)來(lái)實(shí)施指定的陣列恢復(fù)操作124:清除存儲(chǔ)陣列110的無(wú)效關(guān)機(jī)指示符、清除存儲(chǔ)陣列110的存儲(chǔ)元件112a-n中的一個(gè)或更多個(gè)的無(wú)效關(guān)機(jī)指示符、清除計(jì)算系統(tǒng)501的無(wú)效關(guān)機(jī)指示符等。在一些實(shí)施例中,存儲(chǔ)服務(wù)層102尤其是通過(guò)設(shè)置存儲(chǔ)陣列110的配置參數(shù)、修改存儲(chǔ)陣列110的配置文件等來(lái)配置存儲(chǔ)陣列110以將恢復(fù)操作委托給存儲(chǔ)服務(wù)層102。存儲(chǔ)服務(wù)層102可通過(guò)經(jīng)由互連515(和/或其他通信信道)向存儲(chǔ)陣列110發(fā)送消息566來(lái)將存儲(chǔ)陣列110配置成阻止和/或搶占特定陣列恢復(fù)操作124。消息566可包括命令、指令、庫(kù)調(diào)用、api調(diào)用、rpc調(diào)用、配置參數(shù)、中斷、信號(hào)和/或其他通知。如本文所公開(kāi)的,消息566可被配置成使得存儲(chǔ)陣列110將特定的崩潰恢復(fù)功能委派給存儲(chǔ)服務(wù)層102和/或防止存儲(chǔ)陣列110執(zhí)行指定的陣列恢復(fù)操作124。盡管在本文中描述了用于覆寫(xiě)存儲(chǔ)陣列110的陣列恢復(fù)操作124的特定機(jī)制和/或技術(shù),但是本公開(kāi)不限于這方面,并且可以適于使用任何合適的機(jī)制和/或技術(shù)來(lái)標(biāo)識(shí)和/或阻止執(zhí)行特定陣列恢復(fù)操作124。
驗(yàn)證管理器106可被配置成驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130的內(nèi)容(例如,驗(yàn)證包括數(shù)據(jù)包532、數(shù)據(jù)段534等的數(shù)據(jù)集530)。驗(yàn)證存儲(chǔ)數(shù)據(jù)組130可包括:a)通過(guò)尤其是向存儲(chǔ)陣列110發(fā)布一個(gè)或更多個(gè)讀取請(qǐng)求從存儲(chǔ)陣列110訪問(wèn)存儲(chǔ)數(shù)據(jù)組130,b)提取所訪問(wèn)數(shù)據(jù)的完整性數(shù)據(jù)144,以及c)將完整性數(shù)據(jù)144與所訪問(wèn)的數(shù)據(jù)進(jìn)行比較。訪問(wèn)存儲(chǔ)數(shù)據(jù)組130可包括通過(guò)尤其是使用由存儲(chǔ)服務(wù)層102維護(hù)的虛擬化元數(shù)據(jù)505(例如,前向映射525)來(lái)確定包括有效數(shù)據(jù)的(一個(gè)或更多個(gè))存儲(chǔ)地址。訪問(wèn)存儲(chǔ)數(shù)據(jù)組130可包括從存儲(chǔ)陣列110讀取包括多個(gè)數(shù)據(jù)單元132的數(shù)據(jù)集530。提取完整性數(shù)據(jù)144可包括從數(shù)據(jù)集530的一個(gè)或更多個(gè)數(shù)據(jù)單元132a-n-1提取完整性數(shù)據(jù)144(基于上面結(jié)合圖5c-5f所示的數(shù)據(jù)集530的存儲(chǔ)配置)。另選地,并如圖5g所示,提取完整性數(shù)據(jù)144可包括訪問(wèn)與元數(shù)據(jù)日志560中的數(shù)據(jù)集530g有關(guān)的持久性元數(shù)據(jù)條目539。
響應(yīng)于確定數(shù)據(jù)集530不對(duì)應(yīng)于完整性數(shù)據(jù)144,驗(yàn)證管理器106可確定在存儲(chǔ)數(shù)據(jù)組130中存在寫(xiě)漏洞。驗(yàn)證管理器106可計(jì)算對(duì)應(yīng)于所訪問(wèn)的數(shù)據(jù)的散列值(例如,數(shù)據(jù)單元132a-n-1的內(nèi)容),并將所計(jì)算的散列值與對(duì)應(yīng)的完整性數(shù)據(jù)144進(jìn)行比較。響應(yīng)于標(biāo)識(shí)寫(xiě)漏洞,驗(yàn)證管理器106可通過(guò)使用崩潰恢復(fù)模塊516來(lái)執(zhí)行一個(gè)或更多個(gè)恢復(fù)操作517,其可包括但不限于以下操作:a)向存儲(chǔ)陣列110通知所標(biāo)識(shí)的寫(xiě)漏洞;b)使數(shù)據(jù)組130無(wú)效;c)使數(shù)據(jù)組130的(一個(gè)或更多個(gè))部分無(wú)效;d)恢復(fù)數(shù)據(jù)組130的損壞數(shù)據(jù),e)請(qǐng)求替換數(shù)據(jù)組130的數(shù)據(jù)等。因此,恢復(fù)操作517可被稱(chēng)為存儲(chǔ)服務(wù)層102的“寫(xiě)漏洞恢復(fù)操作”和/或“崩潰恢復(fù)操作”。
驗(yàn)證管理器106可通過(guò)尤其是向存儲(chǔ)陣列110發(fā)送與檢測(cè)到的寫(xiě)漏洞狀況有關(guān)的消息來(lái)向存儲(chǔ)陣列110通知寫(xiě)漏洞。消息可經(jīng)由協(xié)調(diào)模塊101(和/或經(jīng)由另一通信信道)通過(guò)接口111被發(fā)送至存儲(chǔ)陣列110。消息可標(biāo)識(shí)包含無(wú)效數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)組130的部分。另選地或除此之外,消息可標(biāo)識(shí)包括寫(xiě)漏洞的存儲(chǔ)數(shù)據(jù)組130的有效部分。使存儲(chǔ)數(shù)據(jù)組130無(wú)效可包括發(fā)布與存儲(chǔ)數(shù)據(jù)組130相對(duì)應(yīng)的擦除、刪除和/或trim消息。trim消息可在存儲(chǔ)服務(wù)層102內(nèi)發(fā)布(例如,至轉(zhuǎn)換層105)、可被發(fā)布給一個(gè)或更多個(gè)客戶端502、可被發(fā)布給存儲(chǔ)陣列110等。使存儲(chǔ)數(shù)據(jù)組130無(wú)效可另外包括去除與虛擬化元數(shù)據(jù)505中的存儲(chǔ)數(shù)據(jù)組130有關(guān)的邏輯到存儲(chǔ)關(guān)聯(lián)(例如,前向映射525)和/或使其無(wú)效。恢復(fù)操作517可包括使存儲(chǔ)數(shù)據(jù)組130的(一個(gè)或更多個(gè))部分無(wú)效和/或保留存儲(chǔ)數(shù)據(jù)組130的其他部分。在一些實(shí)施例中,恢復(fù)操作517另外包括尤其是通過(guò)使用由存儲(chǔ)陣列110管理的陣列元數(shù)據(jù)134(例如,通過(guò)奇偶校驗(yàn)重構(gòu))來(lái)恢復(fù)和/或重構(gòu)存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)。另選地或除此之外,恢復(fù)操作517可包括從客戶端502訪問(wèn)與存儲(chǔ)數(shù)據(jù)組130有關(guān)的替換數(shù)據(jù)、鏡像存儲(chǔ)位置(例如,如下面更詳細(xì)地公開(kāi)的另一存儲(chǔ)資源510和/或日志存儲(chǔ))等。請(qǐng)求替換數(shù)據(jù)可包括向客戶端502、存儲(chǔ)陣列110、(一個(gè)或更多個(gè))存儲(chǔ)資源510等發(fā)布替換數(shù)據(jù)的一個(gè)或更多個(gè)請(qǐng)求。
如圖5b所示,前向映射表525可將n-1個(gè)lid(從lid92680開(kāi)始)的范圍與存儲(chǔ)地址988處的存儲(chǔ)數(shù)據(jù)組相關(guān)聯(lián)。響應(yīng)于無(wú)效關(guān)機(jī)狀況,驗(yàn)證管理器106可確定在存儲(chǔ)地址988的存儲(chǔ)數(shù)據(jù)組130包括寫(xiě)漏洞。作為響應(yīng),并如圖5h所示,驗(yàn)證管理器106可去除與無(wú)效數(shù)據(jù)組130有關(guān)的lid關(guān)聯(lián),其可包括從前向映射525移除與在92680處的n-1個(gè)lid有關(guān)的條目526。因此,在92680的對(duì)n-1個(gè)lid的數(shù)據(jù)的后續(xù)請(qǐng)求可能導(dǎo)致來(lái)自存儲(chǔ)層的“空”或“未分配”響應(yīng)。驗(yàn)證管理器106可另外被配置成向存儲(chǔ)陣列110通知寫(xiě)漏洞和/或指示存儲(chǔ)陣列110使存儲(chǔ)地址988處的存儲(chǔ)數(shù)據(jù)組無(wú)效。
在一些實(shí)施例中,驗(yàn)證管理器106被配置成標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130的(一個(gè)或更多個(gè))數(shù)據(jù)單元132中的哪些包括無(wú)效數(shù)據(jù)131。如本文所公開(kāi)的,驗(yàn)證管理器106可被配置成通過(guò)使用相應(yīng)的完整性數(shù)據(jù)144a-n-1來(lái)區(qū)分有效數(shù)據(jù)單元132與無(wú)效數(shù)據(jù)單元。響應(yīng)于標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130中的無(wú)效數(shù)據(jù),并且確定存儲(chǔ)數(shù)據(jù)組130包括其他有效的數(shù)據(jù)單元,驗(yàn)證管理器106可被配置成:a)使存儲(chǔ)數(shù)據(jù)組130的無(wú)效部分無(wú)效,并且b)保留存儲(chǔ)數(shù)據(jù)組130的有效部分。使存儲(chǔ)數(shù)據(jù)組130的一部分無(wú)效可包括從前向映射525移除所選的lid。如圖5i所示,驗(yàn)證管理器106可確定與lid92680相關(guān)聯(lián)的數(shù)據(jù)單元132包括無(wú)效數(shù)據(jù),但是從92681開(kāi)始映射的n-2個(gè)lid的其他數(shù)據(jù)單元132是有效的。作為響應(yīng),驗(yàn)證管理器106可使與lid92680有關(guān)的邏輯到物理關(guān)聯(lián)無(wú)效和/或移除,并且可通過(guò)尤其是修改與n-1個(gè)lid有關(guān)的條目526來(lái)保留與其他n-2個(gè)lid有關(guān)的關(guān)聯(lián),如圖5h所示。驗(yàn)證管理器106可另外被配置成重寫(xiě)存儲(chǔ)陣列110上存儲(chǔ)數(shù)據(jù)組130的有效數(shù)據(jù),其可包括更新條目526以將數(shù)據(jù)與存儲(chǔ)陣列110的不同存儲(chǔ)地址相關(guān)聯(lián)。
另選地或除此之外,驗(yàn)證管理器106可被配置成通過(guò)尤其是使用存儲(chǔ)陣列110來(lái)重構(gòu)一個(gè)或更多個(gè)數(shù)據(jù)單元132的內(nèi)容。如上所述,驗(yàn)證管理器106可被配置成通過(guò)使用完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)包括無(wú)效數(shù)據(jù)的(一個(gè)或更多個(gè))存儲(chǔ)單元132。驗(yàn)證管理器106可尤其是基于存儲(chǔ)數(shù)據(jù)組130中標(biāo)識(shí)的無(wú)效數(shù)據(jù)單元132的數(shù)量和/或存儲(chǔ)陣列110的數(shù)據(jù)恢復(fù)能力來(lái)確定數(shù)據(jù)單元132是否可由存儲(chǔ)陣列110重構(gòu)。如本文所公開(kāi)的,由存儲(chǔ)陣列110維護(hù)的陣列元數(shù)據(jù)134可被配置成校正數(shù)據(jù)組130的一個(gè)或更多個(gè)數(shù)據(jù)單元132中的錯(cuò)誤。驗(yàn)證管理器106可基于存儲(chǔ)陣列110的陣列元數(shù)據(jù)134能夠重構(gòu)多少個(gè)數(shù)據(jù)單元132來(lái)確定存儲(chǔ)陣列110是否能夠恢復(fù)存儲(chǔ)數(shù)據(jù)組130的特定數(shù)量的數(shù)據(jù)單元132的內(nèi)容。然而,在沒(méi)有標(biāo)識(shí)數(shù)據(jù)組130內(nèi)的錯(cuò)誤的位置的信息的情況下(例如,不知道哪個(gè)數(shù)據(jù)單元132a-n包括無(wú)效數(shù)據(jù)),存儲(chǔ)陣列110可能不能校正此種錯(cuò)誤。
響應(yīng)于確定存儲(chǔ)數(shù)據(jù)組130包括可以由存儲(chǔ)陣列110校正的寫(xiě)漏洞,驗(yàn)證管理器106可發(fā)布重構(gòu)存儲(chǔ)數(shù)據(jù)組130的部分的請(qǐng)求到存儲(chǔ)陣列110(經(jīng)由陣列接口111和/或通過(guò)使用協(xié)調(diào)模塊101)。如上所述,該請(qǐng)求可標(biāo)識(shí)包括無(wú)效數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n。作為響應(yīng),存儲(chǔ)陣列110可通過(guò)使用對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134來(lái)重構(gòu)所標(biāo)識(shí)的數(shù)據(jù)單元132a-n。存儲(chǔ)陣列110可另外被配置成將校正的數(shù)據(jù)寫(xiě)入存儲(chǔ)陣列110。另選地,存儲(chǔ)陣列110可將數(shù)據(jù)組130重寫(xiě)到存儲(chǔ)陣列110的(一個(gè)或更多個(gè))其他存儲(chǔ)地址。響應(yīng)于確定由驗(yàn)證管理器106檢測(cè)到的寫(xiě)漏洞已經(jīng)被校正,驗(yàn)證管理器106可保留與存儲(chǔ)數(shù)據(jù)組130有關(guān)的邏輯到存儲(chǔ)關(guān)聯(lián)和/或?qū)⑦壿嫷酱鎯?chǔ)關(guān)聯(lián)更新為參考重寫(xiě)數(shù)據(jù)組130。如果不能通過(guò)使用存儲(chǔ)陣列110來(lái)校正寫(xiě)漏洞,則驗(yàn)證管理器106可實(shí)施如本文所公開(kāi)的其他恢復(fù)操作517(例如,使存儲(chǔ)數(shù)據(jù)組130無(wú)效、存儲(chǔ)數(shù)據(jù)組130的無(wú)效部分、請(qǐng)求替換數(shù)據(jù)等)。
如上所述,在一些實(shí)施例中,驗(yàn)證管理器106被配置成通過(guò)使用相應(yīng)的完整性數(shù)據(jù)144a-n-1來(lái)標(biāo)識(shí)包括無(wú)效數(shù)據(jù)的特定數(shù)據(jù)單元132。在一些實(shí)施例中,完整性數(shù)據(jù)144可包括對(duì)應(yīng)于數(shù)據(jù)單元132a-n-1的單個(gè)值。另選地或除此之外,完整性數(shù)據(jù)144可能不可用(由于與包括完整性數(shù)據(jù)144的數(shù)據(jù)單元132有關(guān)的寫(xiě)錯(cuò)誤)。如本文所公開(kāi)的,作為響應(yīng),驗(yàn)證管理器106可被配置成使整個(gè)存儲(chǔ)數(shù)據(jù)組130無(wú)效。
盡管寫(xiě)漏洞的特定位置是未知的,但是寫(xiě)漏洞可由存儲(chǔ)陣列110校正。在沒(méi)有附加的驗(yàn)證信息的情況下,存儲(chǔ)陣列110可能無(wú)法校正錯(cuò)誤。例如,可通過(guò)使用陣列元數(shù)據(jù)134來(lái)重構(gòu)包括無(wú)效數(shù)據(jù)131的特定數(shù)據(jù)單元132的存儲(chǔ)數(shù)據(jù)組130的內(nèi)容。然而,存儲(chǔ)陣列110可能無(wú)法標(biāo)識(shí)哪個(gè)數(shù)據(jù)單元132包括無(wú)效數(shù)據(jù)131和/或無(wú)法驗(yàn)證特定數(shù)據(jù)單元132的重構(gòu)。
然而,驗(yàn)證管理器106可能能夠標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130內(nèi)的寫(xiě)漏洞的位置,并且尤其是通過(guò)使用如本文所公開(kāi)的完整性數(shù)據(jù)144來(lái)驗(yàn)證存儲(chǔ)數(shù)據(jù)組130的正確重構(gòu)。在一些實(shí)施例中,驗(yàn)證管理器106可嘗試尤其是通過(guò)使用迭代奇偶校驗(yàn)替換操作來(lái)標(biāo)識(shí)和/或校正包括寫(xiě)漏洞的存儲(chǔ)數(shù)據(jù)組130。如上所述,迭代奇偶校驗(yàn)替換可包括指示存儲(chǔ)陣列110重構(gòu)存儲(chǔ)數(shù)據(jù)組130的不同部分(使用陣列元數(shù)據(jù)134)。如本文所公開(kāi)的,驗(yàn)證管理器106可嘗試驗(yàn)證重構(gòu)數(shù)據(jù)。
圖5j描繪了由驗(yàn)證管理器106實(shí)施的迭代奇偶校驗(yàn)替換操作的一個(gè)實(shí)施例。在圖5j的實(shí)施例中,驗(yàn)證管理器106可檢測(cè)存儲(chǔ)數(shù)據(jù)組130中的寫(xiě)漏洞,但是可能不能標(biāo)識(shí)包括存儲(chǔ)數(shù)據(jù)組130內(nèi)的無(wú)效數(shù)據(jù)131的數(shù)據(jù)單元132。作為響應(yīng),驗(yàn)證管理器106可被配置成迭代地重構(gòu)存儲(chǔ)數(shù)據(jù)組130的不同部分。驗(yàn)證管理器106可被配置成將存儲(chǔ)數(shù)據(jù)組130的不同數(shù)據(jù)單元132a-n-1迭代地指定為無(wú)效,以及請(qǐng)求存儲(chǔ)陣列110重構(gòu)指定的數(shù)據(jù)單元132a-n-1(例如,如本文所公開(kāi)的,使用對(duì)應(yīng)的存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134)。如本文所公開(kāi)的,驗(yàn)證管理器106可嘗試驗(yàn)證重構(gòu)數(shù)據(jù)。驗(yàn)證管理器106可通過(guò)使用對(duì)應(yīng)的完整性數(shù)據(jù)144響應(yīng)于驗(yàn)證存儲(chǔ)數(shù)據(jù)組130的重構(gòu)數(shù)據(jù)來(lái)確定存儲(chǔ)數(shù)據(jù)組130被正確地重構(gòu)。否則,如本文所公開(kāi)的,驗(yàn)證管理器106可確定存儲(chǔ)數(shù)據(jù)組130不能被校正,并且可使存儲(chǔ)數(shù)據(jù)組130無(wú)效。
在圖5j的實(shí)施例中,驗(yàn)證管理器106從存儲(chǔ)陣列110迭代地請(qǐng)求重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1]。重構(gòu)數(shù)據(jù)組530j[1]-530j[n-1]可由存儲(chǔ)陣列110生成,尤其是通過(guò)使用存儲(chǔ)數(shù)據(jù)組130的另一個(gè)數(shù)據(jù)單元132(和對(duì)應(yīng)的陣列元數(shù)據(jù)134)來(lái)指定數(shù)據(jù)單元132中的不同的一個(gè)數(shù)據(jù)單元被重構(gòu)而生成。在圖5j的實(shí)施例中,重構(gòu)數(shù)據(jù)集530j[1]可由存儲(chǔ)陣列110響應(yīng)于重構(gòu)數(shù)據(jù)單元132a的內(nèi)容的請(qǐng)求而生成。因此,重構(gòu)數(shù)據(jù)集530j[1]可包括用于數(shù)據(jù)單元132a的重構(gòu)數(shù)據(jù)538a和數(shù)據(jù)單元132b-n-1中的存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)。重構(gòu)數(shù)據(jù)集530j[2]可包括對(duì)應(yīng)于數(shù)據(jù)單元132b的重構(gòu)數(shù)據(jù)538b,重構(gòu)數(shù)據(jù)集530j[3]可包括對(duì)應(yīng)于數(shù)據(jù)單元132c的重構(gòu)數(shù)據(jù)538c等等(重構(gòu)數(shù)據(jù)集530j[n-1]可包括對(duì)應(yīng)于數(shù)據(jù)單元132n-1的重構(gòu)數(shù)據(jù)538n-1)。驗(yàn)證管理器106可嘗試通過(guò)以下方式來(lái)驗(yàn)證重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1]:a)訪問(wèn)完整性數(shù)據(jù)144,以及b)將完整性數(shù)據(jù)144與重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1]進(jìn)行比較。驗(yàn)證管理器106可訪問(wèn)如本文所公開(kāi)的完整性數(shù)據(jù)144(例如,通過(guò)從相應(yīng)的重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1]和/或從單獨(dú)的存儲(chǔ)位置(諸如元數(shù)據(jù)日志560)提取完整性數(shù)據(jù)144)。響應(yīng)于標(biāo)識(shí)由完整性數(shù)據(jù)144驗(yàn)證的重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1],驗(yàn)證管理器106確定寫(xiě)漏洞被校正,并且可指示存儲(chǔ)陣列110保留和/或重寫(xiě)所標(biāo)識(shí)的重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1]。驗(yàn)證管理器106可響應(yīng)于驗(yàn)證重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1]而中斷迭代重構(gòu)操作(例如,響應(yīng)于驗(yàn)證第一重構(gòu)數(shù)據(jù)集530j[1]而中斷迭代)。如本文所公開(kāi)的,如果重構(gòu)數(shù)據(jù)集530j[1]-530j[n-1]都未被驗(yàn)證,則驗(yàn)證管理器106可使存儲(chǔ)數(shù)據(jù)組130無(wú)效。
如上所述,在一些實(shí)施例中,驗(yàn)證管理器106被配置成響應(yīng)于無(wú)效關(guān)機(jī)狀況來(lái)驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130的子集。在一些實(shí)施例中,驗(yàn)證管理器106被配置成響應(yīng)于檢測(cè)到無(wú)效關(guān)機(jī)來(lái)選擇存儲(chǔ)數(shù)據(jù)組130以進(jìn)行驗(yàn)證。驗(yàn)證管理器106可基于任何合適的標(biāo)準(zhǔn)選擇存儲(chǔ)數(shù)據(jù)組130來(lái)進(jìn)行驗(yàn)證。如本文所公開(kāi)的,在一些實(shí)施例中,存儲(chǔ)服務(wù)層102被配置成使用持久元數(shù)據(jù)將數(shù)據(jù)寫(xiě)入存儲(chǔ)陣列110。在一些實(shí)施例中,驗(yàn)證管理器106尤其是基于對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的持久性元數(shù)據(jù)來(lái)選擇數(shù)據(jù)組130以進(jìn)行驗(yàn)證。與存儲(chǔ)數(shù)據(jù)組130相關(guān)聯(lián)的持久性元數(shù)據(jù)可包括以下中的一個(gè)或更多個(gè):存儲(chǔ)數(shù)據(jù)組130內(nèi)的數(shù)據(jù)包532的持久性元數(shù)據(jù)535、持久性序列元數(shù)據(jù)537、持久性元數(shù)據(jù)條目539等。
在一些實(shí)施例中,驗(yàn)證管理器106被配置成選擇在發(fā)生無(wú)效關(guān)機(jī)時(shí)被寫(xiě)入的存儲(chǔ)數(shù)據(jù)組130??赏ㄟ^(guò)使用與存儲(chǔ)數(shù)據(jù)組130相關(guān)聯(lián)的持久性元數(shù)據(jù)來(lái)標(biāo)識(shí)在無(wú)效關(guān)機(jī)時(shí)被寫(xiě)入的存儲(chǔ)數(shù)據(jù)組130。如本文所公開(kāi)的,與存儲(chǔ)數(shù)據(jù)組130相關(guān)聯(lián)的持久性元數(shù)據(jù)可包括序列信息,其可指示將存儲(chǔ)數(shù)據(jù)組130寫(xiě)入存儲(chǔ)陣列110的時(shí)間。如本文所公開(kāi)的,另選地或除此之外,驗(yàn)證管理器106可基于與存儲(chǔ)日志有關(guān)的元數(shù)據(jù)(諸如在發(fā)生無(wú)效關(guān)機(jī)時(shí)的日志附加點(diǎn)109的存儲(chǔ)地址)來(lái)選擇存儲(chǔ)數(shù)據(jù)組130以用于驗(yàn)證。
圖6a描繪了存儲(chǔ)日志650的一個(gè)實(shí)施例600a,其包括依次存儲(chǔ)在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的數(shù)據(jù)。在圖6a的實(shí)施例中,日志模塊108可將存儲(chǔ)地址空間116劃分成多個(gè)日志段670(例如,日志段670[1]-670[n])。日志段670可包括相應(yīng)的存儲(chǔ)地址范圍。日志段670可對(duì)應(yīng)于被重新用作一組的日志存儲(chǔ)單元671的集合。日志模塊108可包括被配置成初始化相應(yīng)日志段670的日志管理器508。初始化日志段670可包括從日志段670重新定位有效數(shù)據(jù)(如果有的話),使得日志段670上的現(xiàn)有數(shù)據(jù)可被重用(例如,擦除和/或重寫(xiě))。然而,本公開(kāi)不局限于這方面,并且可適于將存儲(chǔ)陣列110的整個(gè)存儲(chǔ)地址空間116視為單個(gè)日志段670和/或?qū)⒚總€(gè)日志存儲(chǔ)單元671a-n作為相應(yīng)的日志段670來(lái)管理。
在圖6a的實(shí)施例中,日志段670包括能夠存儲(chǔ)數(shù)據(jù)的多個(gè)日志存儲(chǔ)單元671a-n(例如,數(shù)據(jù)單元132、數(shù)據(jù)組130等)。日志存儲(chǔ)單元671a-n可對(duì)應(yīng)于諸如存儲(chǔ)陣列110的存儲(chǔ)資源510上的(一個(gè)或更多個(gè))存儲(chǔ)位置。因此,如本文所公開(kāi)的,在圖6a的實(shí)施例中,日志存儲(chǔ)單元671a-n包括能夠在存儲(chǔ)陣列110的各個(gè)存儲(chǔ)元件112a-n上存儲(chǔ)n-1個(gè)數(shù)據(jù)單元132的相應(yīng)數(shù)據(jù)組130。
日志模塊108可被配置成在日志段670內(nèi)依次附加數(shù)據(jù)。日志模塊108可另外被配置成將附加到存儲(chǔ)日志650的數(shù)據(jù)與持久性元數(shù)據(jù)相關(guān)聯(lián)。如本文所公開(kāi)的,持久性元數(shù)據(jù)可包括以下中的一個(gè)或更多個(gè):數(shù)據(jù)包532的持久性元數(shù)據(jù)535(數(shù)據(jù)組130的數(shù)據(jù)單元132內(nèi))、與一個(gè)或更多個(gè)數(shù)據(jù)包532相關(guān)聯(lián)的持久性序列元數(shù)據(jù)537和/或與數(shù)據(jù)(和/或單獨(dú)的元數(shù)據(jù)日志560)一起存儲(chǔ)的持久性元數(shù)據(jù)條目539。存儲(chǔ)在相應(yīng)的日志存儲(chǔ)單元671內(nèi)的持久性元數(shù)據(jù)可用于確定其中的日志段670和/或日志存儲(chǔ)單元671的日志存儲(chǔ)次序。在圖6a的實(shí)施例中,日志段670包括被配置成確定日志段670的相對(duì)日志次序的相應(yīng)序列元數(shù)據(jù)673。序列元數(shù)據(jù)673可被寫(xiě)入相應(yīng)日志段670的第一日志存儲(chǔ)單元671內(nèi)(例如,可被寫(xiě)入每個(gè)日志段670內(nèi)的第一數(shù)據(jù)組130的數(shù)據(jù)單元132a)。
日志模塊108可被配置成在存儲(chǔ)地址空間116內(nèi)(例如,在相應(yīng)的日志段670[1]-670[n]內(nèi))按順序附加數(shù)據(jù)組130??筛鶕?jù)日志段670[1]-670[n]的可用性來(lái)確定被寫(xiě)入相應(yīng)日志段670[1]-670[n]內(nèi)的數(shù)據(jù)組130的次序。日志模塊108可被配置在將數(shù)據(jù)附加到其他日志段670[1]-670[n]之前填充相應(yīng)的日志段670[1]-670[n]。日志段670[1]-670[n]可根據(jù)任何合適的填充模式來(lái)填充。
在圖6a的實(shí)施例中,日志模塊108可在日志段670[1]內(nèi)依次寫(xiě)入數(shù)據(jù)組130[1][a]-130[1][p](通過(guò)發(fā)布將相應(yīng)數(shù)據(jù)集530寫(xiě)入到存儲(chǔ)陣列110的請(qǐng)求),使得存儲(chǔ)數(shù)據(jù)組130[1][p]相對(duì)于存儲(chǔ)數(shù)據(jù)組130[1][a]在存儲(chǔ)日志650(最近被存儲(chǔ))中靠后。圖6a另外示出依次存儲(chǔ)在其他日志段670[2]-670[n]的日志存儲(chǔ)單元671內(nèi)的數(shù)據(jù)組130:數(shù)據(jù)組130[2][a]-130[2][p]被依次存儲(chǔ)在日志段670[2]的日志存儲(chǔ)單元671[2][a]-671[2][n]內(nèi)、數(shù)據(jù)組130[3][a]-130[3][p]被依次存儲(chǔ)在日志存儲(chǔ)段670[3]的日志存儲(chǔ)單元671[3][a]-671[3][n]內(nèi)、數(shù)據(jù)組130[n][a]-130[n][p]被依次存儲(chǔ)在日志段670[n]的日志存儲(chǔ)單元671[n][a]-671[n][n]內(nèi),等等。
如上所述,存儲(chǔ)模塊130可用相應(yīng)的序列元數(shù)據(jù)673來(lái)標(biāo)記日志段670[1]-670[n]。序列元數(shù)據(jù)673可被配置成定義日志段670[1]-670[n]被填充的次序。因此,數(shù)據(jù)組130[1][a]-130[n][p]被寫(xiě)入存儲(chǔ)陣列110的次序可尤其是通過(guò)日志段670[1]-670[n]的序列信息673[1]-673[y]來(lái)定義。在一些實(shí)施例中,序列信息673[1]-673[y]被存儲(chǔ)在日志段670[1]-670[n]內(nèi)的預(yù)定位置(例如,在日志段670內(nèi)的第一數(shù)據(jù)組130的第一數(shù)據(jù)單元132中,等等)。
在圖6a的實(shí)施例中,序列信息673[y]可對(duì)應(yīng)于存儲(chǔ)日志650的數(shù)據(jù)頭654(最近被存儲(chǔ)),以及序列信息673[1]可對(duì)應(yīng)于存儲(chǔ)日志650的數(shù)據(jù)尾(tail)655(最早的)。如圖6a所示,日志段670[1]-670[n]的日志次序652可在存儲(chǔ)日志650的數(shù)據(jù)頭654處為670[n](最近寫(xiě)入),其后為670[1]、670[3],以及在存儲(chǔ)日志650的數(shù)據(jù)尾655(最早的日志段670)處的670[2]。相應(yīng)存儲(chǔ)數(shù)據(jù)組130[1][a]-130[n][p]的日志次序652可基于相應(yīng)日志段670的序列信息673和相應(yīng)日志段670內(nèi)的存儲(chǔ)數(shù)據(jù)組130[1][a]-130[n][p]的相對(duì)次序來(lái)確定。在圖6a的實(shí)施例中,從存儲(chǔ)日志650的數(shù)據(jù)頭654(最近被存儲(chǔ))到存儲(chǔ)日志650的數(shù)據(jù)尾655(最早)的日志次序652:130[n][p]-130[n][a]、130[1][p]-130[1][a]、130[3][p]-130[3][a]和130[2][p]-130[2][a]。
如上所述,驗(yàn)證管理器106可被配置成基于存儲(chǔ)數(shù)據(jù)組130的日志次序652來(lái)選擇數(shù)據(jù)組130以進(jìn)行驗(yàn)證。驗(yàn)證管理器106可被配置成在存儲(chǔ)日志650的數(shù)據(jù)頭654(例如,最近被存儲(chǔ))選擇所存儲(chǔ)的數(shù)據(jù)單元132以進(jìn)行驗(yàn)證,因?yàn)榇朔N數(shù)據(jù)組130更可能受到無(wú)效關(guān)機(jī)狀況的影響。相比之下,在存儲(chǔ)日志650的數(shù)據(jù)尾655的數(shù)據(jù)組130可被確定為在發(fā)生無(wú)效關(guān)機(jī)之前被寫(xiě)入,因此不需要驗(yàn)證。在圖6a的實(shí)施例中,驗(yàn)證管理器106可選擇在存儲(chǔ)日志650的數(shù)據(jù)頭654的數(shù)據(jù)單元以進(jìn)行驗(yàn)證(例如,存儲(chǔ)數(shù)據(jù)組130[n][p])。驗(yàn)證管理器106可被配置成驗(yàn)證在存儲(chǔ)日志650的數(shù)據(jù)頭654處和/或其附近的存儲(chǔ)數(shù)據(jù)組130(例如,在日志段670[n]和/或日志段670[1]內(nèi))。在一些實(shí)施例中,驗(yàn)證管理器106驗(yàn)證在驗(yàn)證區(qū)域118內(nèi)的存儲(chǔ)數(shù)據(jù)組130。驗(yàn)證區(qū)域118可包括存儲(chǔ)地址空間116內(nèi)的區(qū)域。在圖6a的實(shí)施例中,驗(yàn)證區(qū)域118包括日志段670[n]和日志段670[1]的一部分。因此,驗(yàn)證區(qū)域118可包括存儲(chǔ)陣列110的存儲(chǔ)地址空間116(例如,和/或在其他存儲(chǔ)資源內(nèi))的不相交和/或不連續(xù)的存儲(chǔ)地址集。驗(yàn)證管理器106可選擇驗(yàn)證區(qū)域118的大小以包括可能受到無(wú)效關(guān)機(jī)狀況影響的存儲(chǔ)數(shù)據(jù)組130(例如,在無(wú)效關(guān)機(jī)時(shí)刻或接近無(wú)效關(guān)機(jī)時(shí)刻被寫(xiě)入的數(shù)據(jù)組130)。因此,可根據(jù)在無(wú)效關(guān)機(jī)時(shí)由存儲(chǔ)服務(wù)層102執(zhí)行的寫(xiě)操作的速率來(lái)確定驗(yàn)證區(qū)域118的大小。響應(yīng)于確定存儲(chǔ)服務(wù)層102正以相對(duì)較高的速率發(fā)布寫(xiě)操作,驗(yàn)證管理器106可被配置成擴(kuò)展驗(yàn)證區(qū)域118,以及可響應(yīng)于確定存儲(chǔ)服務(wù)層102正以較低的速率發(fā)布寫(xiě)操作而收縮驗(yàn)證區(qū)域118。驗(yàn)證管理器106可通過(guò)使用由存儲(chǔ)層102維護(hù)的虛擬化元數(shù)據(jù)505、通過(guò)使用由存儲(chǔ)陣列102維護(hù)的元數(shù)據(jù)等來(lái)確定和/或估算在存儲(chǔ)陣列110上執(zhí)行的寫(xiě)操作的速率。如本文所公開(kāi)的,驗(yàn)證管理器106可被配置成驗(yàn)證在驗(yàn)證區(qū)域118內(nèi)的存儲(chǔ)數(shù)據(jù)組130。驗(yàn)證管理器106可另外被配置成防止訪問(wèn)存儲(chǔ)在驗(yàn)證區(qū)域118內(nèi)的數(shù)據(jù)(例如,在驗(yàn)證區(qū)域118內(nèi)的存儲(chǔ)地址處存儲(chǔ)在數(shù)據(jù)組130中的數(shù)據(jù)),直到驗(yàn)證操作完成。驗(yàn)證管理器106可允許訪問(wèn)存儲(chǔ)地址空間116的其他部分(例如,可允許對(duì)存儲(chǔ)在驗(yàn)證區(qū)域118之外的存儲(chǔ)地址上的存儲(chǔ)數(shù)據(jù)組130內(nèi)的數(shù)據(jù)進(jìn)行訪問(wèn))。
圖6b描繪了由存儲(chǔ)服務(wù)層102的日志模塊108執(zhí)行的日志存儲(chǔ)操作的實(shí)施例。日志模塊108可被配置成將數(shù)據(jù)附加在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的附加點(diǎn)109(例如,在相應(yīng)的日志段670內(nèi))。因此,附加點(diǎn)109可對(duì)應(yīng)于存儲(chǔ)日志650的數(shù)據(jù)頭654。在圖6b的實(shí)施例中,當(dāng)前附加點(diǎn)109對(duì)應(yīng)于日志段670[1]內(nèi)的存儲(chǔ)地址682。響應(yīng)于在存儲(chǔ)地址682向數(shù)據(jù)組130寫(xiě)入數(shù)據(jù),日志模塊108可推進(jìn)681附加點(diǎn)109至日志段670[1]內(nèi)的下一存儲(chǔ)地址(如果有的話)。當(dāng)日志段670[1]被填充時(shí),日志模塊108可將附加點(diǎn)109遞增到下一可用日志段670。如本文所使用的,“可用”日志段670指的是可以被日志模塊108擦除和/或覆寫(xiě)的日志段670(例如,不包括需要保留的有效數(shù)據(jù)的日志段670)。
包括有效數(shù)據(jù)的日志段671可為“不可用”、“不可寫(xiě)”和/或處于“不可寫(xiě)”狀態(tài)。在圖6b的實(shí)施例中,日志段670[2]可能不能被日志模塊108使用(例如,日志段670[2]可包括與邏輯地址空間104的一個(gè)或更多個(gè)lid相關(guān)聯(lián)的有效數(shù)據(jù))。如上所述,日志模塊108可包括被配置成回收日志段670以用于重用的日志管理器508?;厥杖罩径?70可包括尤其是通過(guò)將數(shù)據(jù)重寫(xiě)到另一日志段670來(lái)重定位存儲(chǔ)在日志段670(如果有的話)內(nèi)的有效數(shù)據(jù)。回收日志段670可另外包括擦除日志段670的內(nèi)容、記錄日志段670可供使用等等。
在填充日志存儲(chǔ)段670[1]之后,日志模塊108可將附加點(diǎn)109推進(jìn)681到下一可用的存儲(chǔ)分區(qū)670[3](存儲(chǔ)地址683)。日志模塊108可通過(guò)尤其是將數(shù)據(jù)寫(xiě)入日志段670[3]內(nèi)的相應(yīng)存儲(chǔ)地址來(lái)將數(shù)據(jù)附加在附加點(diǎn)109(例如,將數(shù)據(jù)集530作為存儲(chǔ)陣列110上的相應(yīng)數(shù)據(jù)組130來(lái)寫(xiě)入)。如本文所公開(kāi)的,日志模塊108可另外被配置成將序列元數(shù)據(jù)673寫(xiě)入日志段670(例如,在相應(yīng)日志段670內(nèi)的第一存儲(chǔ)地址處將序列元數(shù)據(jù)673寫(xiě)入數(shù)據(jù)組130)。
日志模塊108可被配置成在存儲(chǔ)地址682附加數(shù)據(jù),其可包括:a)如本文所公開(kāi)的,將數(shù)據(jù)單元132a-n-1合并(coalesce)為數(shù)據(jù)組130以用于存儲(chǔ)(例如,將數(shù)據(jù)單元132a-n-1分組為數(shù)據(jù)集530),以及b)(通過(guò)使用驗(yàn)證管理器106)生成對(duì)應(yīng)于數(shù)據(jù)集530的完整性數(shù)據(jù)144。驗(yàn)證管理器106可另外被配置成將完整性數(shù)據(jù)144包含在數(shù)據(jù)集530內(nèi)(例如,在數(shù)據(jù)單元132a-n的一個(gè)或更多個(gè)內(nèi)包括完整性數(shù)據(jù)144)。另選地或除此之外,驗(yàn)證管理器106可被配置成將完整性數(shù)據(jù)544寫(xiě)入單獨(dú)的存儲(chǔ)資源,諸如元數(shù)據(jù)日志560。在存儲(chǔ)地址682寫(xiě)入數(shù)據(jù)組130的數(shù)據(jù)可與相應(yīng)的lid104a-n-1相關(guān)聯(lián)。將數(shù)據(jù)附加在存儲(chǔ)地址682可另外包括記錄持久性元數(shù)據(jù)以將數(shù)據(jù)單元132a-n-1與相應(yīng)的lid相關(guān)聯(lián)。持久性元數(shù)據(jù)可包括數(shù)據(jù)包532的持久性元數(shù)據(jù)535、數(shù)據(jù)單元132a-n的一個(gè)或更多個(gè)內(nèi)的持久性元數(shù)據(jù)條目539、附加到單獨(dú)的元數(shù)據(jù)日志560的持久性元數(shù)據(jù)條目539等。在一些實(shí)施例中,完整性數(shù)據(jù)144與其他持久性元數(shù)據(jù)(諸如對(duì)應(yīng)于數(shù)據(jù)集530的持久性元數(shù)據(jù)條目539)一起被包含。將數(shù)據(jù)附加在存儲(chǔ)地址682可另外包括更新虛擬化元數(shù)據(jù)505,尤其是通過(guò)在前向映射525中記錄條目526以在存儲(chǔ)地址682將lid104a-n-1與存儲(chǔ)數(shù)據(jù)組130相關(guān)聯(lián)來(lái)更新虛擬化元數(shù)據(jù)505。
日志模塊108可被配置成通過(guò)向存儲(chǔ)陣列110發(fā)布寫(xiě)請(qǐng)求(通過(guò)使用協(xié)調(diào)模塊101)來(lái)將數(shù)據(jù)集530附加到存儲(chǔ)日志650。作為響應(yīng),存儲(chǔ)陣列110可將數(shù)據(jù)單元132a-n-1寫(xiě)入在存儲(chǔ)地址683的數(shù)據(jù)組130內(nèi)(例如,在存儲(chǔ)陣列110的相應(yīng)存儲(chǔ)元件112a-n上)。存儲(chǔ)陣列110可另外被配置成生成和/或存儲(chǔ)對(duì)應(yīng)于數(shù)據(jù)組130的陣列元數(shù)據(jù)134。
如上所述,響應(yīng)于無(wú)效關(guān)機(jī),驗(yàn)證管理器106可被配置成尤其是基于附加點(diǎn)109的存儲(chǔ)地址來(lái)選擇存儲(chǔ)數(shù)據(jù)組130以進(jìn)行驗(yàn)證。在圖6b的實(shí)施例中,當(dāng)存儲(chǔ)陣列110在存儲(chǔ)地址682將數(shù)據(jù)集530寫(xiě)入數(shù)據(jù)組130時(shí),可能會(huì)發(fā)生無(wú)效關(guān)機(jī)。響應(yīng)于無(wú)效關(guān)機(jī),驗(yàn)證管理器106可實(shí)施一個(gè)或更多個(gè)恢復(fù)操作。如本文所公開(kāi)的,可執(zhí)行驗(yàn)證管理器106的恢復(fù)操作來(lái)取代存儲(chǔ)陣列110的一個(gè)或更多個(gè)陣列恢復(fù)操作124。
驗(yàn)證管理器106可被配置成尤其是基于附加點(diǎn)109的存儲(chǔ)地址來(lái)選擇存儲(chǔ)數(shù)據(jù)組130以進(jìn)行驗(yàn)證。驗(yàn)證管理器106可通過(guò)使用日志模塊108(例如,基于存儲(chǔ)在日志段670上的序列元數(shù)據(jù)673等)來(lái)確定附加點(diǎn)109的存儲(chǔ)地址。在一些實(shí)施例中,日志模塊108被配置成在持久性存儲(chǔ)中維護(hù)附加點(diǎn)109的存儲(chǔ)地址。日志模塊108可尤其是通過(guò)訪問(wèn)持久性存儲(chǔ)來(lái)確定附加點(diǎn)109的存儲(chǔ)地址。在另一實(shí)施例中,日志模塊108尤其是通過(guò)訪問(wèn)存儲(chǔ)日志650的內(nèi)容、訪問(wèn)單獨(dú)的元數(shù)據(jù)日志560等來(lái)確定附加點(diǎn)109的存儲(chǔ)地址。盡管本文描述了用于確定日志附加點(diǎn)109的存儲(chǔ)地址的特定技術(shù),但是本公開(kāi)不限于這方面,并且可以適用于使用任何合適的技術(shù)或機(jī)制在無(wú)效關(guān)機(jī)之后存儲(chǔ)和/或確定附加點(diǎn)109的存儲(chǔ)地址。
在一個(gè)實(shí)施例中,驗(yàn)證管理器106被配置成驗(yàn)證在存儲(chǔ)日志650的數(shù)據(jù)頭654(例如,在確定的附加點(diǎn)109)的一個(gè)或更多個(gè)存儲(chǔ)數(shù)據(jù)組130。與存儲(chǔ)在存儲(chǔ)日志650的數(shù)據(jù)頭654的數(shù)據(jù)組130有關(guān)的存儲(chǔ)操作可能被無(wú)效關(guān)機(jī)中斷,從而導(dǎo)致寫(xiě)漏洞(和/或其他寫(xiě)錯(cuò)誤)。驗(yàn)證管理器106可基于所確定的附加點(diǎn)109的存儲(chǔ)地址來(lái)選擇存儲(chǔ)數(shù)據(jù)組130以進(jìn)行驗(yàn)證。在圖6b的實(shí)施例中,驗(yàn)證管理器106可選擇存儲(chǔ)在存儲(chǔ)地址682處的數(shù)據(jù)組130以用于驗(yàn)證(基于附加點(diǎn)109的存儲(chǔ)地址)。如本文所公開(kāi)的,驗(yàn)證管理器106可驗(yàn)證存儲(chǔ)數(shù)據(jù)組130(例如,通過(guò)訪問(wèn)存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n-1并將數(shù)據(jù)單元132a-n-1的內(nèi)容與存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144進(jìn)行比較)。驗(yàn)證管理器106可另外被配置成響應(yīng)于確定數(shù)據(jù)組130的存儲(chǔ)數(shù)據(jù)不對(duì)應(yīng)于完整性數(shù)據(jù)144,檢測(cè)所存儲(chǔ)的數(shù)據(jù)組130中的寫(xiě)漏洞。響應(yīng)于確定所存儲(chǔ)的數(shù)據(jù)組130是不完整的,驗(yàn)證管理器106可a)使所存儲(chǔ)的數(shù)據(jù)組130無(wú)效(例如,移除將存儲(chǔ)在存儲(chǔ)地址682的數(shù)據(jù)組130與lid104a-n-1相關(guān)聯(lián)的條目),b)通知存儲(chǔ)陣列110等。如本文所公開(kāi)的,驗(yàn)證管理器106可另外被配置成:a)修復(fù)所存儲(chǔ)的數(shù)據(jù)組130,b)標(biāo)識(shí)并保留所存儲(chǔ)的數(shù)據(jù)組130的有效部分等。
在一些實(shí)施例中,驗(yàn)證管理器106驗(yàn)證在驗(yàn)證區(qū)域118內(nèi)所存儲(chǔ)的數(shù)據(jù)組。驗(yàn)證區(qū)域118可對(duì)應(yīng)于所確定的附加點(diǎn)109的存儲(chǔ)地址。在圖6b的實(shí)施例中,驗(yàn)證區(qū)域118包括對(duì)應(yīng)于附加點(diǎn)109的存儲(chǔ)地址682和在存儲(chǔ)日志650的數(shù)據(jù)頭654的一個(gè)或更多個(gè)存儲(chǔ)地址。驗(yàn)證區(qū)域118可排除存儲(chǔ)在存儲(chǔ)日志650的數(shù)據(jù)尾655的數(shù)據(jù)組130。如本文所公開(kāi)的,驗(yàn)證區(qū)域118的大小和/或配置可基于存儲(chǔ)日志650的日志次序652(例如,相應(yīng)日志段670的序列元數(shù)據(jù)673)、在無(wú)效關(guān)機(jī)時(shí)對(duì)存儲(chǔ)陣列110執(zhí)行的寫(xiě)操作的速率等。
圖7為用于管理存儲(chǔ)錯(cuò)誤的系統(tǒng)700的另一實(shí)施例的示意性框圖。在圖7的實(shí)施例中,存儲(chǔ)服務(wù)層102包括被配置成維護(hù)在存儲(chǔ)裝置710上的元數(shù)據(jù)日志560的元數(shù)據(jù)日志模塊708。元數(shù)據(jù)日志560可包括對(duì)應(yīng)于在存儲(chǔ)陣列110(和/或其他存儲(chǔ)資源510)上實(shí)現(xiàn)的存儲(chǔ)操作的元數(shù)據(jù)日志條目759的有序序列。存儲(chǔ)裝置710可與存儲(chǔ)服務(wù)層102的包括存儲(chǔ)陣列110的其他存儲(chǔ)資源510分開(kāi)。在一些實(shí)施例中,存儲(chǔ)裝置710包括字節(jié)可尋址存儲(chǔ)裝置,諸如持久性存儲(chǔ)器存儲(chǔ)裝置(例如,電池支持的ram)、自動(dòng)提交存儲(chǔ)器、固態(tài)存儲(chǔ)裝置等。存儲(chǔ)裝置710可通過(guò)尤其是互連715通信耦合至存儲(chǔ)服務(wù)層102。互連715可對(duì)應(yīng)于存儲(chǔ)陣列110的互連515。另選地,互連715可與互連515分開(kāi)和/或無(wú)關(guān)。在一些實(shí)施例中,互連715包括被配置成實(shí)施字節(jié)可尋址存儲(chǔ)操作的高性能通信總線?;ミB715可包括計(jì)算系統(tǒng)501的內(nèi)部存儲(chǔ)器總線。
如本文所公開(kāi)的,存儲(chǔ)層102可包括諸如電路、可編程邏輯等的硬件部件。在圖7的實(shí)施例中,存儲(chǔ)層102的部分(諸如,驗(yàn)證管理器106和/或日志模塊108)包括硬件部件702。存儲(chǔ)層102的部分可被實(shí)施為存儲(chǔ)在非暫時(shí)性存儲(chǔ)介質(zhì)上的機(jī)器可讀指令。在圖7的實(shí)施例中,存儲(chǔ)服務(wù)層102可包括非易失性存儲(chǔ)704,其包括被配置成使硬件部件702實(shí)施轉(zhuǎn)換層105、驗(yàn)證模塊106、日志模塊108等的功能的指令。非易失性存儲(chǔ)704可包括硬件部件702的固件、fpga、fpga比特流、可編程邏輯配置數(shù)據(jù)等。在一些實(shí)施例中,非易失性存儲(chǔ)704包括rom、eprom等。
如本文所公開(kāi)的,在圖7的實(shí)施例中,日志模塊108可被配置成在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的附加點(diǎn)109處將數(shù)據(jù)附加到存儲(chǔ)陣列110上的存儲(chǔ)日志650。圖7的日志模塊108可被配置成將數(shù)據(jù)寫(xiě)入存儲(chǔ)陣列110而無(wú)需寫(xiě)入持久性元數(shù)據(jù)(例如,無(wú)需寫(xiě)入包括持久性元數(shù)據(jù)535的數(shù)據(jù)包532和/或無(wú)需向存儲(chǔ)陣列110寫(xiě)入持久性元數(shù)據(jù)條目539)。日志模塊108可被配置成在元數(shù)據(jù)日志560中存儲(chǔ)與存儲(chǔ)在存儲(chǔ)陣列110(和/或其他存儲(chǔ)資源510)上的數(shù)據(jù)有關(guān)的持久性、崩潰安全元數(shù)據(jù)。元數(shù)據(jù)日志560可由存儲(chǔ)服務(wù)層102的元數(shù)據(jù)日志模塊708維護(hù)。元數(shù)據(jù)日志模塊708可被配置成附加持久性的、崩潰安全的元數(shù)據(jù)日志條目759。元數(shù)據(jù)日志模塊708可將元數(shù)據(jù)日志條目759附加到存儲(chǔ)裝置710的存儲(chǔ)地址空間716內(nèi)的有序元數(shù)據(jù)日志560。
元數(shù)據(jù)日志條目759可包括與被寫(xiě)入相應(yīng)的存儲(chǔ)組130內(nèi)的存儲(chǔ)陣列110的數(shù)據(jù)單元132a-n-1有關(guān)的上下文元數(shù)據(jù)。如本文所公開(kāi)的,將數(shù)據(jù)寫(xiě)入存儲(chǔ)陣列110可包括:a)收集包括多個(gè)數(shù)據(jù)單元132a-n-1的數(shù)據(jù)集530,b)生成與數(shù)據(jù)單元132a-n-1有關(guān)的完整性數(shù)據(jù)144,以及c)發(fā)布寫(xiě)請(qǐng)求,以在存儲(chǔ)陣列110上存儲(chǔ)作為數(shù)據(jù)組130的該組n-1個(gè)數(shù)據(jù)單元132。作為響應(yīng),存儲(chǔ)陣列110可在相應(yīng)的存儲(chǔ)元件112a-n上與對(duì)應(yīng)的陣列元數(shù)據(jù)134一起寫(xiě)入作為數(shù)據(jù)組130的數(shù)據(jù)單元132a-n-1。在圖7的實(shí)施例中,將數(shù)據(jù)寫(xiě)入存儲(chǔ)陣列110另外包括將持久性元數(shù)據(jù)日志條目759附加到元數(shù)據(jù)日志560。持久性元數(shù)據(jù)日志條目759可包括與被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)單元132a-n-1有關(guān)的持久性、崩潰安全的元數(shù)據(jù)。如圖7所示,對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的持久性元數(shù)據(jù)日志條目759可包括:與數(shù)據(jù)單元132a-n-1有關(guān)的lid關(guān)聯(lián)、數(shù)據(jù)單元132a-n-1的存儲(chǔ)地址等。持久性元數(shù)據(jù)日志條目759可另外包括與數(shù)據(jù)單元132a-n-1的完整性數(shù)據(jù)144。在圖7的實(shí)施例中,持久性元數(shù)據(jù)日志條目759包括對(duì)應(yīng)于相應(yīng)數(shù)據(jù)單元132a-n-1的多個(gè)完整性數(shù)據(jù)144a-n-1。在一些實(shí)施例中,持久性元數(shù)據(jù)日志條目759另外包括序列元數(shù)據(jù)773,以尤其是定義元數(shù)據(jù)日志560內(nèi)的持久性元數(shù)據(jù)日志條目759的日志次序。另選地,持久性元數(shù)據(jù)日志條目759的日志次序可由存儲(chǔ)裝置710的存儲(chǔ)地址空間716內(nèi)的持久性元數(shù)據(jù)日志條目759的存儲(chǔ)位置(例如,在特定日志段內(nèi))通過(guò)分開(kāi)的次序元數(shù)據(jù)等來(lái)定義。在一些實(shí)施例中,存儲(chǔ)數(shù)據(jù)組130的相對(duì)日志次序由對(duì)應(yīng)的元數(shù)據(jù)日志條目759的日志次序定義。由于存儲(chǔ)數(shù)據(jù)組的日志次序在元數(shù)據(jù)日志560內(nèi)被定義,所以將數(shù)據(jù)寫(xiě)入存儲(chǔ)陣列110(和/或其他存儲(chǔ)資源510)的存儲(chǔ)操作可被無(wú)序?qū)嵤┖?或可不嚴(yán)格按時(shí)間排序。因此,在一些實(shí)施例中,日志模塊108可以以與接收對(duì)應(yīng)請(qǐng)求的次序不同的次序?qū)?shù)據(jù)附加到存儲(chǔ)陣列110和/或其他存儲(chǔ)資源510。日志模塊108可由于任何數(shù)量的狀況而無(wú)序附加數(shù)據(jù),該任何數(shù)量的狀況包括但不限于:性能考慮、服務(wù)質(zhì)量(qos)策略、數(shù)據(jù)的可用性(例如,數(shù)據(jù)源帶寬、直接存儲(chǔ)器訪問(wèn)(dma)和/或遠(yuǎn)程dma延遲等)、存儲(chǔ)資源510的可用性等。
響應(yīng)于無(wú)效關(guān)機(jī)的檢測(cè)(通過(guò)監(jiān)視器506),驗(yàn)證管理器106可被配置成實(shí)施存儲(chǔ)服務(wù)層102的恢復(fù)操作517。如本文所公開(kāi)的,驗(yàn)證管理器106可基于存儲(chǔ)數(shù)據(jù)組130的日志次序來(lái)選擇存儲(chǔ)數(shù)據(jù)組130以用于驗(yàn)證。驗(yàn)證管理器106可通過(guò)使用元數(shù)據(jù)日志模塊708來(lái)確定存儲(chǔ)數(shù)據(jù)組130的日志次序,其可標(biāo)識(shí)當(dāng)發(fā)生無(wú)效關(guān)機(jī)時(shí)被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)組130的(一個(gè)或更多個(gè))存儲(chǔ)地址。元數(shù)據(jù)日志模塊708可基于元數(shù)據(jù)日志560內(nèi)的元數(shù)據(jù)日志條目759的日志次序來(lái)標(biāo)識(shí)(一個(gè)或更多個(gè))存儲(chǔ)地址(例如,與在元數(shù)據(jù)日志560的前面的元數(shù)據(jù)日志條目759相對(duì)應(yīng)的存儲(chǔ)地址)。
圖8a為用于管理存儲(chǔ)錯(cuò)誤的系統(tǒng)800a的另一實(shí)施例的示意性框圖。在圖8a的實(shí)施例中,存儲(chǔ)服務(wù)層102包括被配置成尤其是管理日志存儲(chǔ)810的日志模塊808。日志存儲(chǔ)810可以包括高性能存儲(chǔ)資源,諸如持久性ram、電池支持的ram、自動(dòng)提交存儲(chǔ)器、固態(tài)存儲(chǔ)資源等。日志存儲(chǔ)810可通過(guò)互連815通信耦合至存儲(chǔ)服務(wù)層102,在一些實(shí)施例中,互連815包括計(jì)算系統(tǒng)501的內(nèi)部存儲(chǔ)器總線。如本文所公開(kāi)的,日志模塊808可被配置成將數(shù)據(jù)集530合并以作為相應(yīng)的數(shù)據(jù)組130存儲(chǔ)在存儲(chǔ)陣列110上。日志記錄模塊808可被配置成緩沖和/或排隊(duì)引入的寫(xiě)請(qǐng)求以收集n-1個(gè)數(shù)據(jù)單元132,以作為數(shù)據(jù)組130存儲(chǔ)在存儲(chǔ)陣列110上(例如,在數(shù)據(jù)集530中收集n-1個(gè)數(shù)據(jù)單元132)。如本文所公開(kāi)的,驗(yàn)證管理器106可被配置成生成數(shù)據(jù)集530的完整性數(shù)據(jù)144。
日志模塊808可被配置成將被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)集530作為日記條目830(例如,作為日志條目830a)寫(xiě)入日志存儲(chǔ)810。日志條目830a可包括數(shù)據(jù)單元132a-n-1的內(nèi)容、與數(shù)據(jù)單元132a-n-1有關(guān)的元數(shù)據(jù)(例如,與數(shù)據(jù)單元132a-n-1相關(guān)聯(lián)的(一個(gè)或更多個(gè))lid)和/或?qū)?yīng)于數(shù)據(jù)單元132a-n-1的完整性數(shù)據(jù)144。在一些實(shí)施例中,日志條目830a另外包括數(shù)據(jù)集530被存儲(chǔ)在存儲(chǔ)陣列110上的存儲(chǔ)地址。在一些實(shí)施例中,日志條目830a包括狀態(tài)元數(shù)據(jù)833以指示數(shù)據(jù)單元132a和/或132b是否已被寫(xiě)入存儲(chǔ)陣列110和/或日志條目830a是否準(zhǔn)備好以用于存儲(chǔ)在存儲(chǔ)陣列110上(例如,日志條目830a是否包括n-1個(gè)數(shù)據(jù)單元132)。
在一些實(shí)施例中,日志模塊808緩沖和/或排隊(duì)日志存儲(chǔ)810中的引入的數(shù)據(jù)。日志模塊808可被配置成將數(shù)據(jù)單元132收集到日志存儲(chǔ)808內(nèi)的相應(yīng)數(shù)據(jù)集530中(和/或通過(guò)將數(shù)據(jù)單元132寫(xiě)入日志存儲(chǔ)810)。日志存儲(chǔ)810可包括持久性、崩潰安全的存儲(chǔ)資源。因此,當(dāng)數(shù)據(jù)單元132被寫(xiě)入日志存儲(chǔ)810時(shí),并且在數(shù)據(jù)單元132被包含在數(shù)據(jù)集530中和/或作為數(shù)據(jù)組130寫(xiě)入存儲(chǔ)陣列110之前,存儲(chǔ)服務(wù)層102可確認(rèn)完成與特定數(shù)據(jù)單元132有關(guān)的引入的寫(xiě)請(qǐng)求。
如本文所公開(kāi)的,存儲(chǔ)服務(wù)層102可另外包括崩潰恢復(fù)模塊516,其被配置成從與計(jì)算系統(tǒng)501、存儲(chǔ)陣列110等有關(guān)的無(wú)效關(guān)機(jī)狀況恢復(fù)?;謴?fù)模塊516可被配置成從在一個(gè)或更多個(gè)寫(xiě)請(qǐng)求的數(shù)據(jù)已被寫(xiě)入日志存儲(chǔ)810之后以及在數(shù)據(jù)作為數(shù)據(jù)組130被寫(xiě)入存儲(chǔ)陣列110之前發(fā)生的存儲(chǔ)服務(wù)層102的無(wú)效關(guān)機(jī)恢復(fù)。在圖8a的實(shí)施例中,日志模塊808可接收將數(shù)據(jù)單元132a和132b寫(xiě)入存儲(chǔ)陣列110的請(qǐng)求。在形成n-1個(gè)數(shù)據(jù)單元132的完整數(shù)據(jù)集530之前和/或在將數(shù)據(jù)單元132a和/或132b寫(xiě)入存儲(chǔ)陣列110之前,響應(yīng)于將數(shù)據(jù)單元132a和132b存儲(chǔ)在日志存儲(chǔ)810中,存儲(chǔ)服務(wù)層102可確認(rèn)完成相應(yīng)的寫(xiě)請(qǐng)求。
存儲(chǔ)層102可能引起無(wú)效關(guān)機(jī),這可能影響存儲(chǔ)服務(wù)層102。在將數(shù)據(jù)單元132a和/或132b寫(xiě)入存儲(chǔ)陣列110之前可能發(fā)生無(wú)效關(guān)機(jī)。由于日志存儲(chǔ)810包括持久性、崩潰安全的存儲(chǔ)資源,所以包括數(shù)據(jù)單元132a和132b的日志條目830a可在存儲(chǔ)服務(wù)層102和/或存儲(chǔ)資源510(包括日志存儲(chǔ)810)的無(wú)效關(guān)機(jī)之后可訪問(wèn)?;謴?fù)模塊516可檢測(cè)到無(wú)效關(guān)機(jī),并且作為響應(yīng),可配置日志模塊808以恢復(fù)緩沖和/或排隊(duì)包括數(shù)據(jù)單元132a和/或132b的數(shù)據(jù)集530,其作為數(shù)據(jù)組130存儲(chǔ)在存儲(chǔ)陣列110上。
圖8b為用于管理存儲(chǔ)錯(cuò)誤的系統(tǒng)800b的示意性框圖,其包括與日志存儲(chǔ)810有關(guān)的恢復(fù)操作517的實(shí)施例。在圖8b的實(shí)施例中,恢復(fù)模塊516可檢測(cè)存儲(chǔ)服務(wù)層102的無(wú)效關(guān)機(jī),并且作為響應(yīng),訪問(wèn)日志存儲(chǔ)器810以確定日志存儲(chǔ)810包括一個(gè)或更多個(gè)未寫(xiě)入的數(shù)據(jù)單元132(如記錄在日志條目830a中)?;謴?fù)模塊516可配置日志模塊808以恢復(fù)對(duì)日志條目830a中的引入的數(shù)據(jù)的緩沖和/或排隊(duì)。日志模塊808可修改日志條目830b(例如,將數(shù)據(jù)附加到日志存儲(chǔ)810),從而產(chǎn)生日志條目830b的完整數(shù)據(jù)集530。如圖8b所示,日志條目830b包括具有對(duì)應(yīng)元數(shù)據(jù)的n-1個(gè)數(shù)據(jù)單元132a-n-1和/或完整性數(shù)據(jù)144a-n-1。作為響應(yīng),日志模塊808可更新日志條目830b的狀態(tài)元數(shù)據(jù)833以指示數(shù)據(jù)集530準(zhǔn)備好以作為數(shù)據(jù)組130存儲(chǔ)在存儲(chǔ)陣列110上。如本文所公開(kāi)的,日志模塊808可另外被配置成通過(guò)使用協(xié)調(diào)模塊101來(lái)發(fā)布寫(xiě)入數(shù)據(jù)集530的請(qǐng)求。響應(yīng)于發(fā)布寫(xiě)請(qǐng)求和/或從存儲(chǔ)陣列110接收響應(yīng),日志模塊808可更新日志條目830b的狀態(tài)元數(shù)據(jù)833以指示日志條目830b已被寫(xiě)入存儲(chǔ)陣列110。
日志模塊808可另外被配置成移除已被寫(xiě)入存儲(chǔ)陣列110和/或由驗(yàn)證管理器106驗(yàn)證的日志條目830。在一些實(shí)施例中,日志模塊808根據(jù)日志存儲(chǔ)810的可用容量來(lái)保留日志條目830。日志模塊808可保留日志條目830,以用于尤其是如上所述從無(wú)效關(guān)機(jī)狀況和/或與存儲(chǔ)陣列110有關(guān)的無(wú)效關(guān)機(jī)狀況恢復(fù)。在圖8b的實(shí)施例中,與日志條目830b有關(guān)的寫(xiě)請(qǐng)求可能由于存儲(chǔ)陣列110的無(wú)效關(guān)機(jī)而失敗。
如本文所公開(kāi)的,響應(yīng)于無(wú)效關(guān)機(jī),驗(yàn)證管理器106可被配置成實(shí)施一個(gè)或更多個(gè)恢復(fù)操作517,其可搶占存儲(chǔ)陣列110的陣列恢復(fù)操作124。在圖8b的實(shí)施例中,驗(yàn)證管理器106可確定包括日志條目830b的數(shù)據(jù)的存儲(chǔ)數(shù)據(jù)組130包括寫(xiě)漏洞。作為響應(yīng),驗(yàn)證管理器106可被配置成使用日志條目830b的內(nèi)容重寫(xiě)數(shù)據(jù)段132a-n-1,而不是使存儲(chǔ)數(shù)據(jù)組130無(wú)效和/或嘗試恢復(fù)存儲(chǔ)數(shù)據(jù)組130的部分。
圖9為用于管理存儲(chǔ)錯(cuò)誤的方法900的一個(gè)實(shí)施例的流程圖。步驟910可包括存儲(chǔ)對(duì)應(yīng)于被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)組130的完整性數(shù)據(jù)144。步驟910可包括緩沖和/或排隊(duì)數(shù)據(jù)集530,數(shù)據(jù)集530被配置成由存儲(chǔ)陣列110存儲(chǔ)在相應(yīng)的數(shù)據(jù)組內(nèi),并且生成對(duì)應(yīng)于數(shù)據(jù)集530的完整性數(shù)據(jù)144。步驟910可另外包括在數(shù)據(jù)集530的一個(gè)或更多個(gè)數(shù)據(jù)單元132a-n-1中包括完整性數(shù)據(jù)144。如本文所公開(kāi)的,完整性數(shù)據(jù)144可作為數(shù)據(jù)單元132a-n-1中的一個(gè)或更多個(gè)的數(shù)據(jù)包532的持久性元數(shù)據(jù)535被包含、可作為數(shù)據(jù)單元132a-n-1中的一個(gè)或更多個(gè)的持久性元數(shù)據(jù)目539被包含在附加到單獨(dú)的元數(shù)據(jù)日志560的持久性元數(shù)據(jù)日志條目759中等。在一些實(shí)施例中,步驟910的完整性數(shù)據(jù)包括對(duì)應(yīng)于數(shù)據(jù)組130的相應(yīng)數(shù)據(jù)單元132a-n-1的多個(gè)完整性數(shù)據(jù)144a-n-1。如本文所公開(kāi)的,步驟910可另外包括檢測(cè)與存儲(chǔ)陣列110有關(guān)的無(wú)效關(guān)機(jī)狀況和/或?qū)嵤┗謴?fù)操作517,以通過(guò)使用存儲(chǔ)完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)和/或緩解寫(xiě)漏洞狀況。
如本文所公開(kāi)的,步驟920可包括配置存儲(chǔ)陣列110以委托崩潰恢復(fù)操作。在一些實(shí)施例中,920包括設(shè)置存儲(chǔ)陣列110的配置參數(shù)、修改存儲(chǔ)陣列110的配置文件、向存儲(chǔ)陣列110發(fā)信號(hào)等。步驟920可包括將消息566發(fā)送至存儲(chǔ)陣列110,其被配置成防止存儲(chǔ)陣列110執(zhí)行一個(gè)或更多個(gè)陣列恢復(fù)操作124。消息566可通過(guò)使用協(xié)調(diào)模塊101通過(guò)存儲(chǔ)陣列110的接口111(經(jīng)由互連515)發(fā)送。協(xié)調(diào)模塊101可被配置成管理存儲(chǔ)陣列110。在一些實(shí)施例中,協(xié)調(diào)模塊101被配置成通過(guò)存儲(chǔ)陣列110的定制接口向存儲(chǔ)陣列110發(fā)布消息和/或指令。在一些實(shí)施例中,消息566可包括命令、庫(kù)調(diào)用、函數(shù)調(diào)用、api調(diào)用、rpc調(diào)用、信號(hào)、中斷等。步驟920可包括響應(yīng)于檢測(cè)到與存儲(chǔ)陣列110相關(guān)的無(wú)效關(guān)機(jī),將消息566發(fā)送至存儲(chǔ)陣列110。消息566可被配置成阻止存儲(chǔ)陣列110嘗試驗(yàn)證存儲(chǔ)數(shù)據(jù)單元130、阻止存儲(chǔ)陣列110再同步存儲(chǔ)數(shù)據(jù)單元130、阻止存儲(chǔ)陣列110嘗試重構(gòu)一個(gè)或更多個(gè)存儲(chǔ)數(shù)據(jù)單元130等。因此,步驟920的(一個(gè)或更多個(gè))消息可對(duì)應(yīng)于特定的無(wú)效關(guān)機(jī)狀況。另選地,步驟920可包括將(一個(gè)或更多個(gè))消息566發(fā)送至存儲(chǔ)陣列110,其被配置成防止存儲(chǔ)陣列110響應(yīng)于所有無(wú)效關(guān)機(jī)狀況來(lái)實(shí)施某些陣列重構(gòu)操作124。
如本文所公開(kāi)的,在一些實(shí)施例中,步驟920另外包括向存儲(chǔ)陣列110通知不完整的存儲(chǔ)數(shù)據(jù)組130、使存儲(chǔ)陣列130中的存儲(chǔ)數(shù)據(jù)組130無(wú)效、請(qǐng)求重構(gòu)特定存儲(chǔ)數(shù)據(jù)組130的部分(例如,通過(guò)使用由存儲(chǔ)陣列110維護(hù)的陣列元數(shù)據(jù)134)等。步驟920可包括配置存儲(chǔ)陣列110以將多個(gè)陣列恢復(fù)操作124的子集委托給存儲(chǔ)服務(wù)層102,此第一組陣列恢復(fù)操作124被存儲(chǔ)服務(wù)層102搶占,以及第二組的其他陣列恢復(fù)操作124響應(yīng)于無(wú)效關(guān)機(jī)來(lái)執(zhí)行。存儲(chǔ)陣列110可被配置成繼續(xù)執(zhí)行陣列恢復(fù)操作124以a)驗(yàn)證特定存儲(chǔ)元件112a-n的功能(例如,驗(yàn)證存儲(chǔ)元件112a-n是可用的);b)驗(yàn)證存儲(chǔ)陣列110的通信互連(例如,互連515);c)驗(yàn)證由存儲(chǔ)陣列110維護(hù)的內(nèi)部固件和/或元數(shù)據(jù)等。如本文所公開(kāi)的,在步驟920中被阻止的陣列重構(gòu)操作124可包括用于驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110上的數(shù)據(jù)組130的操作,諸如用于驗(yàn)證存儲(chǔ)數(shù)據(jù)組130(使用陣列元數(shù)據(jù)134)的操作、再同步存儲(chǔ)數(shù)據(jù)組130的操作、重構(gòu)存儲(chǔ)數(shù)據(jù)組130的操作等。
圖10為用于管理存儲(chǔ)錯(cuò)誤的另一實(shí)施例的流程圖。步驟1010包括通過(guò)使用與存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n-1對(duì)應(yīng)的存儲(chǔ)完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130中的寫(xiě)漏洞。如本文所公開(kāi)的,步驟1010可包括:a)生成對(duì)應(yīng)于被寫(xiě)入相應(yīng)數(shù)據(jù)組130內(nèi)的存儲(chǔ)陣列110的數(shù)據(jù)集530的完整性數(shù)據(jù)144,b)將完整性數(shù)據(jù)存儲(chǔ)在相應(yīng)的數(shù)據(jù)組130(和/或其他存儲(chǔ)位置,諸如元數(shù)據(jù)日志560)內(nèi),以及c)實(shí)施恢復(fù)操作517以驗(yàn)證存儲(chǔ)數(shù)據(jù)組130以取代存儲(chǔ)陣列110的一個(gè)或更多個(gè)陣列恢復(fù)操作124。步驟1010可包括響應(yīng)于確定存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)不對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)寫(xiě)漏洞。
步驟1010可另外包括標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130的(一個(gè)或更多個(gè))無(wú)效部分(例如,標(biāo)識(shí)包括無(wú)效數(shù)據(jù)131的(一個(gè)或更多個(gè))數(shù)據(jù)單元132a-n-1)。如本文所公開(kāi)的,步驟1010可包括將相應(yīng)的完整性數(shù)據(jù)144a-n與存儲(chǔ)數(shù)據(jù)組130的對(duì)應(yīng)數(shù)據(jù)單元132a-n-1的數(shù)據(jù)進(jìn)行比較。如本文所公開(kāi)的,步驟1010可另外包括確定存儲(chǔ)數(shù)據(jù)組130的數(shù)據(jù)單元132a-n-1中的一個(gè)或更多個(gè)包括有效數(shù)據(jù)。
如本文所公開(kāi)的,步驟1020包括實(shí)施一個(gè)或更多個(gè)恢復(fù)操作517,其可包括但不限于:a)向轉(zhuǎn)換層105、存儲(chǔ)陣列110、客戶端502等中的一個(gè)或更多個(gè)通知寫(xiě)漏洞;b)使存儲(chǔ)數(shù)據(jù)組130無(wú)效;c)使存儲(chǔ)數(shù)據(jù)組130的一部分無(wú)效;d)重構(gòu)存儲(chǔ)數(shù)據(jù)組130的(一個(gè)或更多個(gè))部分;e)請(qǐng)求與存儲(chǔ)數(shù)據(jù)組130有關(guān)的替換數(shù)據(jù)等。在一些實(shí)施例中,步驟1020包括使在步驟1010被確定為包括無(wú)效數(shù)據(jù)131的數(shù)據(jù)單元132a-n-1無(wú)效。步驟1020可包括使與無(wú)效數(shù)據(jù)單元132a-n-1相關(guān)聯(lián)的lid無(wú)效和/或整理(trim)該lid。步驟1020可包括移除與關(guān)聯(lián)于無(wú)效數(shù)據(jù)單元132a-n-1的lid有關(guān)的邏輯到存儲(chǔ)映射(例如,移除和/或修改前向映射525的一個(gè)或更多個(gè)條目526)。步驟1020可另外包括向存儲(chǔ)陣列110通知存儲(chǔ)數(shù)據(jù)組130包括寫(xiě)漏洞和/或標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130的(一個(gè)或更多個(gè))無(wú)效部分。
如本文所公開(kāi)的,在一些實(shí)施例中,步驟1020包括通過(guò)尤其是保留與存儲(chǔ)數(shù)據(jù)組130的有效數(shù)據(jù)單元132a-n-1相關(guān)的邏輯到存儲(chǔ)映射來(lái)保留存儲(chǔ)數(shù)據(jù)組130的(一個(gè)或更多個(gè))有效部分、重寫(xiě)存儲(chǔ)數(shù)據(jù)組130的有效數(shù)據(jù)等等。另選地或除此之外,步驟1020可包括通過(guò)使用存儲(chǔ)陣列110(例如,通過(guò)奇偶校驗(yàn)重構(gòu))重構(gòu)被確定為包括無(wú)效數(shù)據(jù)的數(shù)據(jù)單元132a-n-1的內(nèi)容,可包括訪問(wèn)用于一個(gè)或更多個(gè)數(shù)據(jù)單元132a-n-1的替換數(shù)據(jù)等等。
圖11為用于管理存儲(chǔ)錯(cuò)誤的方法的另一實(shí)施例1100的流程圖。如本文所公開(kāi)的,步驟1110可包括響應(yīng)于無(wú)效關(guān)機(jī)在存儲(chǔ)數(shù)據(jù)組中標(biāo)識(shí)寫(xiě)漏洞。
步驟1120可包括重構(gòu)存儲(chǔ)數(shù)據(jù)組130的部分。步驟1120可包括通過(guò)使用相應(yīng)的完整性數(shù)據(jù)144a-n-1來(lái)標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)組130的無(wú)效部分。步驟1120可另外包括通過(guò)使用對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的陣列元數(shù)據(jù)134向存儲(chǔ)陣列110發(fā)布重構(gòu)存儲(chǔ)數(shù)據(jù)組130的(一個(gè)或更多個(gè))無(wú)效部分的請(qǐng)求。如本文所公開(kāi)的,另選地或除此之外,步驟1120可包括迭代奇偶校驗(yàn)操作,以迭代重構(gòu)存儲(chǔ)數(shù)據(jù)陣列130的部分、嘗試驗(yàn)證重構(gòu)數(shù)據(jù)以及通過(guò)使用對(duì)應(yīng)于存儲(chǔ)數(shù)據(jù)組130的完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)有效的重構(gòu)。
圖12為用于管理存儲(chǔ)錯(cuò)誤的方法1200的另一實(shí)施例的流程圖。步驟1210可包括維護(hù)與邏輯地址空間104有關(guān)的存儲(chǔ)日志。另選地或除此之外,步驟1210可包括對(duì)應(yīng)于在存儲(chǔ)陣列110上執(zhí)行的存儲(chǔ)操作的存儲(chǔ)日志(例如,存儲(chǔ)包括與邏輯地址空間1040的lid相關(guān)聯(lián)的數(shù)據(jù)的數(shù)據(jù)組130的操作)。步驟1210可包括將數(shù)據(jù)附加至存儲(chǔ)陣列110上的有序存儲(chǔ)日志650。如本文所公開(kāi)的,另選地或除此之外,步驟1210可包括將元數(shù)據(jù)日志560保持在單獨(dú)的存儲(chǔ)裝置710上。如本文所公開(kāi)的,步驟1210可包括在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)(例如,在附加點(diǎn)109)依次附加數(shù)據(jù)組130。
步驟1220可包括選擇存儲(chǔ)數(shù)據(jù)組130以在崩潰恢復(fù)操作中進(jìn)行驗(yàn)證。步驟1220可響應(yīng)于無(wú)效關(guān)機(jī)來(lái)執(zhí)行。步驟1220可另外包括配置存儲(chǔ)陣列110以將崩潰恢復(fù)操作委托和/或延遲到存儲(chǔ)服務(wù)層102。
步驟1220可包括基于步驟1210的有序日志選擇存儲(chǔ)數(shù)據(jù)組130以進(jìn)行驗(yàn)證。步驟1220可包括在存儲(chǔ)日志650的數(shù)據(jù)頭654選擇存儲(chǔ)數(shù)據(jù)組130。因此,在一些實(shí)施例中,步驟1220包括標(biāo)識(shí)對(duì)應(yīng)于存儲(chǔ)日志650的數(shù)據(jù)頭654的存儲(chǔ)地址,并且選擇與所標(biāo)識(shí)的存儲(chǔ)地址相對(duì)應(yīng)的存儲(chǔ)數(shù)據(jù)組130以用于驗(yàn)證。另選地或除此之外,步驟1220可包括在無(wú)效關(guān)機(jī)時(shí)(通過(guò)使用日志模塊108和/或元數(shù)據(jù)日志模塊708)來(lái)確定附加點(diǎn)109的存儲(chǔ)地址。步驟1220可包括在所確定的附加點(diǎn)109選擇存儲(chǔ)數(shù)據(jù)組130。
在一些實(shí)施例中,步驟1220另外包括驗(yàn)證存儲(chǔ)在存儲(chǔ)陣列110的存儲(chǔ)地址空間116內(nèi)的驗(yàn)證區(qū)域118內(nèi)的存儲(chǔ)數(shù)據(jù)組130。驗(yàn)證區(qū)域118可包括在存儲(chǔ)日志650的數(shù)據(jù)頭654處的存儲(chǔ)地址。如本文所公開(kāi)的,驗(yàn)證區(qū)域118的大小和/或配置可基于存儲(chǔ)日志650的日志次序652(例如,存儲(chǔ)日志650的區(qū)段670的相對(duì)日志次序)、在無(wú)效關(guān)機(jī)時(shí)在存儲(chǔ)陣列110上執(zhí)行的寫(xiě)操作的速率等。在一些實(shí)施例中,步驟1220另外包括阻止對(duì)驗(yàn)證區(qū)域118內(nèi)的存儲(chǔ)數(shù)據(jù)組130的訪問(wèn),而其中的存儲(chǔ)數(shù)據(jù)組130由驗(yàn)證管理器106驗(yàn)證。步驟1220可另外包括提供對(duì)驗(yàn)證區(qū)域118之外的存儲(chǔ)地址空間116的(一個(gè)或更多個(gè))其他區(qū)域的訪問(wèn)。
如本文所公開(kāi)的,步驟1230可包括通過(guò)使用與存儲(chǔ)數(shù)據(jù)組130相關(guān)聯(lián)地存儲(chǔ)的完整性數(shù)據(jù)144來(lái)驗(yàn)證所選擇的存儲(chǔ)數(shù)據(jù)組130。如本文所公開(kāi)的,步驟1230可包括標(biāo)識(shí)不完整的存儲(chǔ)數(shù)據(jù)組130、使不完整的存儲(chǔ)數(shù)據(jù)組130無(wú)效、向存儲(chǔ)陣列110通知不完整的存儲(chǔ)數(shù)據(jù)組130、重構(gòu)不完整的存儲(chǔ)數(shù)據(jù)組130等等。
圖13為用于管理存儲(chǔ)錯(cuò)誤的方法1300的另一實(shí)施例的流程圖。步驟1310可包括對(duì)數(shù)據(jù)單元132進(jìn)行日志記錄,以用于存儲(chǔ)在存儲(chǔ)陣列110上。如本文所公開(kāi)的,步驟1310可包括將日志條目830寫(xiě)入日志存儲(chǔ)810。步驟1310可另外包括緩沖和/或排隊(duì)數(shù)據(jù)集530,數(shù)據(jù)集530被配置成存儲(chǔ)在存儲(chǔ)陣列130上的相應(yīng)數(shù)據(jù)組130內(nèi)、生成對(duì)應(yīng)于數(shù)據(jù)集530的內(nèi)容的完整性數(shù)據(jù)144、將完整性數(shù)據(jù)144插入數(shù)據(jù)集530中(和/或?qū)⑼暾詳?shù)據(jù)544存儲(chǔ)在單獨(dú)的存儲(chǔ)位置)并且發(fā)布將數(shù)據(jù)集530作為相應(yīng)數(shù)據(jù)組130寫(xiě)入存儲(chǔ)陣列130上的請(qǐng)求。步驟1310可包括響應(yīng)于來(lái)自客戶端502的寫(xiě)請(qǐng)求,對(duì)數(shù)據(jù)單元132進(jìn)行日志記錄。步驟1310可另外包括響應(yīng)于對(duì)日志存儲(chǔ)810中的數(shù)據(jù)單元132進(jìn)行日志記錄,確認(rèn)完成寫(xiě)請(qǐng)求。寫(xiě)請(qǐng)求可在將數(shù)據(jù)單元132寫(xiě)入存儲(chǔ)陣列110之前(和/或在數(shù)據(jù)單元132被包含在包括n-1個(gè)數(shù)據(jù)單元132的完整數(shù)據(jù)集530中之前)被確認(rèn)。
步驟1320包括響應(yīng)于無(wú)效關(guān)機(jī)來(lái)標(biāo)識(shí)存儲(chǔ)錯(cuò)誤。步驟1320可包括在日志存儲(chǔ)810中標(biāo)識(shí)尚未被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)單元132。步驟1320可包括訪問(wèn)日志存儲(chǔ)810以標(biāo)識(shí)包括尚未被寫(xiě)入存儲(chǔ)陣列110的數(shù)據(jù)單元132的一個(gè)或更多個(gè)日志記錄條目830。另選地或除此之外,步驟1320可包括通過(guò)使用在步驟1310中為數(shù)據(jù)組130存儲(chǔ)的完整性數(shù)據(jù)144來(lái)標(biāo)識(shí)包括寫(xiě)漏洞的存儲(chǔ)數(shù)據(jù)組130。
步驟1320可包括通過(guò)使用日志存儲(chǔ)810的內(nèi)容從無(wú)效關(guān)機(jī)中恢復(fù)。步驟1330可包括將日志存儲(chǔ)810中未寫(xiě)入的數(shù)據(jù)單元132作為存儲(chǔ)數(shù)據(jù)組130寫(xiě)入存儲(chǔ)陣列110上。如本文所公開(kāi)的,另選地或除此之外,步驟1330可包括通過(guò)使用存儲(chǔ)在日志存儲(chǔ)810中的數(shù)據(jù)集530(例如,在一個(gè)或更多個(gè)日志條目830中)重寫(xiě)包括寫(xiě)漏洞的存儲(chǔ)數(shù)據(jù)組130。
本公開(kāi)已經(jīng)參考各種示例性實(shí)施例。然而,本領(lǐng)域技術(shù)人員應(yīng)認(rèn)識(shí)到,在不脫離本公開(kāi)的范圍的情況下,可對(duì)示例性實(shí)施例進(jìn)行改變和修改。例如,各種操作步驟以及用于執(zhí)行操作步驟的部件可根據(jù)特定應(yīng)用或考慮到與系統(tǒng)的操作相關(guān)聯(lián)的任何數(shù)量的成本功能(例如,一個(gè)或更多個(gè)的步驟可被刪除、修改或與其他步驟組合)以替代方式實(shí)施。因此,本公開(kāi)被視為說(shuō)明性的而非限制性的,并且所有此種修改旨在被包含在本公開(kāi)的范圍內(nèi)。同樣,上面已經(jīng)針對(duì)各種實(shí)施例描述了益處、其他優(yōu)點(diǎn)和問(wèn)題的解決方案。然而,益處、優(yōu)點(diǎn)、問(wèn)題的解決方案以及可能引起任何益處、優(yōu)點(diǎn)或解決方案發(fā)生或變得更加顯著的(一個(gè)或更多個(gè))任何元素不應(yīng)被視為關(guān)鍵的、必需的或基本特征或元素。如本文所使用的,術(shù)語(yǔ)“包括(comprises、comprising)”及其任何其他變體旨在涵蓋非排他性包含,使得包括元素列表的過(guò)程、方法、制品或裝置不僅包括這些元素,而且可包括未明確列出的或此種過(guò)程、方法、系統(tǒng)、制品或裝置所固有的其他元素。而且,如本文所使用的,術(shù)語(yǔ)“耦合(coupled、coupling)”及其任何其他變體旨在涵蓋物理連接、電連接、磁連接、光連接、通信連接、功能連接和/或任何其他連接。
另外,如本領(lǐng)域的普通技術(shù)人員應(yīng)理解的,本公開(kāi)的原理可在機(jī)器可讀存儲(chǔ)介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品中反映,該機(jī)器可讀存儲(chǔ)介質(zhì)具有在存儲(chǔ)介質(zhì)中實(shí)施的機(jī)器可讀程序代碼裝置。可使用任何有形的、非暫態(tài)機(jī)器可讀存儲(chǔ)介質(zhì),包括磁存儲(chǔ)裝置(硬盤(pán)、軟盤(pán)等)、光學(xué)存儲(chǔ)裝置(cd-rom、dvd、藍(lán)光光盤(pán)等)、閃存等。這些計(jì)算機(jī)程序指令可被加載到通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置以產(chǎn)生機(jī)器,使得在計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置上執(zhí)行的指令形成用于實(shí)施指定的功能的裝置。這些計(jì)算機(jī)程序指令也可被存儲(chǔ)在機(jī)器可讀存儲(chǔ)器中,這些計(jì)算機(jī)程序指令可引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置以特定方式工作,使得存儲(chǔ)在機(jī)器可讀存儲(chǔ)器中的指令產(chǎn)生包括實(shí)施指定功能的實(shí)施裝置的制品。計(jì)算機(jī)程序指令也可被加載在計(jì)算機(jī)或其他可編程數(shù)據(jù)處理裝置上,以促使一系列操作步驟在計(jì)算機(jī)或其他可編程裝置上執(zhí)行,以產(chǎn)生計(jì)算機(jī)實(shí)施的過(guò)程,使得在計(jì)算機(jī)或其他可編程裝置上執(zhí)行的指令提供用于實(shí)施指定功能的步驟。
盡管已經(jīng)在各種實(shí)施例中示出了本公開(kāi)的原理,但是可在不脫離本公開(kāi)的原理和范圍的情況下,使用特別適于特定環(huán)境和操作要求的結(jié)構(gòu)、布置、比例、元件、材料和部件的許多修改。這些和其他改變或修改旨在被包含在本公開(kāi)的范圍內(nèi)。