在此描述的實施例大體上涉及通過跨存儲裝置執(zhí)行原子寫入操作來跨多個存儲裝置存儲數(shù)據(jù)的主機系統(tǒng)。
背景技術(shù):
獨立磁盤冗余陣列(raid)控制器將數(shù)據(jù)剝離到多個存儲驅(qū)動,并且根據(jù)寫入到raid條帶的數(shù)據(jù)計算奇偶校驗數(shù)據(jù)(典型地通過對所剝離的數(shù)據(jù)進行xor)以寫入到奇偶校驗盤。raid實施方式的一個潛在問題已知是raid寫入洞。在raid條帶中的數(shù)據(jù)更新但奇偶校驗數(shù)據(jù)未更新時發(fā)生寫入洞,從而在盤失效時所有盤xor為零以便重構(gòu)數(shù)據(jù)。問題在于,不存在原子地更新兩個或更多個盤的方式,因此raid條帶在死機或掉電期間可能變得損壞。為了解決這一問題,raid控制器維持非易失性存儲裝置,也稱為nvram,以備份寫入數(shù)據(jù),直到奇偶校驗數(shù)據(jù)可以寫入。然而,添加nvram增加了raid控制器和raid解決方案的成本。沒有顯著性能問題的情況下,還未已知raid軟件實施方式成功地解決寫入洞問題。
在本領(lǐng)域存在對以下的需要:諸如在利用raid存儲解決方案的情況下,提供改進的解決方案以跨多個存儲裝置寫入數(shù)據(jù),這允許在失效的情況下恢復(fù)數(shù)據(jù)。
附圖說明
作為舉例,參照未按照比例繪制的附圖描述實施例,在附圖中相似參考標記指代類似元件。
圖1圖示在其中主機系統(tǒng)跨多個存儲裝置存儲數(shù)據(jù)的存儲系統(tǒng)的實施例。
圖2圖示由用于寫入操作的主機系統(tǒng)和存儲裝置維持的寫入狀態(tài)條目的實施例。
圖3圖示由用于寫入操作的存儲裝置維持的寫入狀態(tài)條目的實施例。
圖4圖示狀態(tài)圖,其示出響應(yīng)于來自主機系統(tǒng)的涉及用于原子寫入操作的數(shù)據(jù)寫入的命令的存儲裝置內(nèi)的狀態(tài)轉(zhuǎn)移。
圖5a和5b圖示由存儲控制器驅(qū)動器執(zhí)行的用于實施寫入操作以跨多個存儲裝置寫入數(shù)據(jù)的操作的實施例。
圖6圖示由存儲裝置執(zhí)行的用于處理來自主機系統(tǒng)的開啟命令的操作的實施例。
圖7、8和9圖示由存儲裝置執(zhí)行的用于處理來自主機系統(tǒng)的寫入命令的操作的實施例。
圖10圖示由存儲裝置執(zhí)行的用于處理關(guān)閉命令的操作的實施例。
圖11、12和13圖示由主機系統(tǒng)執(zhí)行的用于處置對于寫入操作的中斷的操作的實施例。
圖14圖示由存儲裝置執(zhí)行的用于處理狀態(tài)查詢請求的操作的實施例。
圖15圖示在其中可以實施圖1的主機系統(tǒng)的系統(tǒng)。
具體實施方式
目前的raid控制器通過在昂貴nvram裝置中實施回寫高速緩存以部分地緩存寫入的數(shù)據(jù),來解決寫入洞數(shù)據(jù)訛誤問題。然而,這樣的解決方案要求使用nvram,其是raid控制器的最昂貴的部件之一。此外,nvram用于回寫高速緩存可能在底層的存儲裝置具有接近nvram裝置的性能的讀取和寫入性能時造成瓶頸,諸如具有固態(tài)存儲驅(qū)動(ssd)的情況。
所描述的實施例提供了實施raid或其他存儲控制器的技術(shù),其通過將部分寫入的數(shù)據(jù)的存儲卸載到存儲裝置本身來在避免使用nvram裝置的同時免受寫入洞和靜默數(shù)據(jù)訛誤。存儲或raid控制器與分布式存儲裝置協(xié)調(diào)以確保對于存儲裝置的原子更新,而無需單獨的回寫高速緩存或者交付日志裝置來存儲部分寫入的數(shù)據(jù)。
所描述的實施例提供了裝置分布解決方案,用于以原子方式跨多個裝置更新多個非連續(xù)數(shù)據(jù)塊。在數(shù)據(jù)更新期間的任意給定時間點,可以在主機系統(tǒng)中的軟件中實施的存儲控制器可以斷言整個操作整體完成或者通過將部分或全部寫入的數(shù)據(jù)的存儲卸載在存儲裝置處而不完全完成。在ssd的情況下,它們的讀取和寫入速率可以接近nvram的讀取和寫入速率。因此,所描述的實施例不需要nvram來備份卸載到存儲裝置、ssd的部分寫入的數(shù)據(jù)。以這一方式,在存儲裝置是快存取裝置,諸如ssd時,將不存在由nvram引入的瓶頸,這是因為ssd將在原子寫入操作中使用來存儲部分寫入的數(shù)據(jù)以及數(shù)據(jù)的先前版本。
實施所描述的實施例的存儲裝置提供了用于存儲控制器的機構(gòu),諸如軟件raid控制器,用于將意向寄存在存儲裝置中以備份數(shù)據(jù)的先前版本。這一“意向”指示存儲驅(qū)動將提供在對于寫入的中斷發(fā)生的情況下用于恢復(fù)所需要的數(shù)據(jù)。在意向條目對于寫入操作是開放的時,存儲裝置維持所列出的數(shù)據(jù)塊的“舊”和“新”副本。一旦寫入完成,每個裝置中的意向條目和舊數(shù)據(jù)可以丟棄。然而,如果寫入被中斷,則存在跨用于raid實施方式的所有參與存儲裝置和存儲控制器、多裝置文件系統(tǒng)或者數(shù)據(jù)庫的充分分布的元數(shù)據(jù),以前滾事務(wù)以完成,或者回滾到先前的狀態(tài)/數(shù)據(jù)。所描述實施例存儲系統(tǒng)的消費者經(jīng)歷在其整體式或不完全完成的寫入請求。
在以下描述中,闡述了大量具體的細節(jié),例如邏輯實施方式、操作碼、指定操作數(shù)的手段、資源分區(qū)/共享/復(fù)制實施方式、系統(tǒng)部件的類型和相互關(guān)系、以及邏輯分區(qū)/綜合選擇,以便提供對本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員將意識到,沒有這些具體的細節(jié)也可以實踐本發(fā)明。在其他實例中,沒有詳細地示出控制結(jié)構(gòu)、門級電路和全部軟件指令序列,以免模糊了本發(fā)明。本領(lǐng)域的普通技術(shù)人員利用所包括的描述,無需過度試驗就將能夠?qū)嵤┻m當(dāng)?shù)墓δ堋?/p>
在說明書中提及“一種實施例”、“實施例”、“示例實施例”等都是指示所描述的實施例可以包括具體的特征、結(jié)構(gòu)或特性,但是每個實施例可以不一定包括所述具體的特征、結(jié)構(gòu)或特性。而且,這樣的短語不一定是指同一實施例。某些實施例涉及存儲裝置電子組件。實施例包括用于形成電子組件的裝置和方法二者。
圖1圖示具有主機系統(tǒng)100的存儲環(huán)境的實施例,其存儲諸如用戶數(shù)據(jù)的數(shù)據(jù),該數(shù)據(jù)可以從其他附接的計算機系統(tǒng)和裝置傳送到多個存儲裝置1021、1022……102n。主機系統(tǒng)100包括操作系統(tǒng)104,其包括存儲控制器驅(qū)動器106,用于管理存儲裝置1021、1022……102n中的數(shù)據(jù)存儲。存儲控制器驅(qū)動器106維持寫入操作狀態(tài)信息200,其具有有關(guān)分布到用于存儲的存儲裝置1021、1022……102n以及寫入高速緩存110的數(shù)據(jù)的信息,寫入高速緩存110緩沖發(fā)送至存儲裝置1021、1022……102n的數(shù)據(jù),直到存儲裝置證實數(shù)據(jù)已經(jīng)寫入。
在一個實施例中,存儲控制器驅(qū)動器106可以實施獨立磁盤冗余陣列(raid)算法以將數(shù)據(jù)單元的部分剝離到多個存儲裝置1021、1022……102n,計算所剝離的數(shù)據(jù)單元的奇偶校驗數(shù)據(jù),并且將奇偶校驗數(shù)據(jù)存儲在存儲裝置1021、1022……102n之一中。如果具有數(shù)據(jù)的一個存儲裝置1021、1022……102n失效,則奇偶校驗數(shù)據(jù)可以包括xor奇偶校驗數(shù)據(jù)以執(zhí)行奇偶校驗錯誤恢復(fù)。存儲控制器驅(qū)動器106可以實施不同的raid算法,包括交織等。
在圖1的實施例中,存儲控制器驅(qū)動器106包括操作系統(tǒng)104的軟件部件。在替代實施例中,存儲控制器驅(qū)動器106可以在可以通過內(nèi)部總線連接至主機系統(tǒng)100的硬件裝置或單獨硬件控制器或卡中實施。
每個存儲裝置1021、1022……102n包括控制器112,控制器112管理數(shù)據(jù)到一個或多個數(shù)據(jù)存儲單元114的寫入,包括傳送以及接收來自主機系統(tǒng)100的讀取和寫入命令??刂破?12維持寫入操作狀態(tài)300,其具有有關(guān)由主機系統(tǒng)100發(fā)送的寫入請求的狀態(tài)的信息。控制器112還可以包括來自主機系統(tǒng)100的隊列到隊列的讀取和寫入請求。
在一個實施例中,存儲裝置1021、1022……102n可以包括固態(tài)驅(qū)動(ssd)、閃速驅(qū)動等。對于ssd實施方式,數(shù)據(jù)存儲單元114可以包括閃速存儲器儲存單元的nand管芯。在一個實施例中,nand管芯可以包括多級儲存單元(mlc)nand閃速存儲器,其在每個儲存單元中記錄兩個位值,下位值和上位值??商鎿Q地,nand管芯可以包括單級儲存單元(slc)存儲器或者每儲存單元三位(tlc)存儲器。存儲單元114也可以包括但不限于mlcnand閃速存儲器、鐵電隨機存取存儲器(fetram)、基于納米線的非易失性存儲器、諸如相變存儲器(pcm)的三維(3d)交叉點存儲器、結(jié)合憶阻器技術(shù)的存儲器、磁阻隨機存取存儲器(mram)、自旋轉(zhuǎn)移力矩(stt)-mram、單級儲存單元(slc)閃速存儲器、能量源后援(電池/超級電容器)dram以及其他電可擦除可編程只讀存儲器(eeprom)類型裝置。在替代實施例中,存儲裝置1021、1022……102n可以包括其他類型的存儲裝置,諸如硬盤驅(qū)動等。在實施例中,在存儲裝置1021、1022……102n包括硬盤驅(qū)動的情況下,數(shù)據(jù)存儲單元114可以包括磁盤。
主機100可以通過諸如總線接口的接口116與存儲裝置1021、1022……102n通信。主機100和存儲裝置1021、1022……102n可以位于同一個封裝體或分離的封裝體中??商鎿Q地,主機系統(tǒng)100可以通過網(wǎng)絡(luò)與存儲裝置1021、1022……102n通信。
主機100和存儲裝置1021、1022……102n可以包括輸入/輸出(i/o)接口以允許它們之間的通信,諸如串行高級技術(shù)附件(sata)接口,并且包括耦接主機100和存儲裝置102的sata兼容總線。在其他實施例中,可以使用其他類型的i/o接口和總線互連,諸如串行附接小型計算機系統(tǒng)接口(scsi)(或簡稱sas)、快速外圍部件互連(pcie)等。
圖2圖示存儲控制器驅(qū)動器106針對相對于存儲裝置1021、1022……102n之一開啟的每個寫入操作維持的寫入操作狀態(tài)條目200i的實施例。每個條目200i可以具有:提供寫入操作的唯一標識符的寫入操作標簽200,其可以具有跨多個存儲裝置1021、1022……102n剝離的數(shù)據(jù)的軌跡或塊;標識由標簽200標識的寫入操作所指向的存儲裝置1021、1022……102n的存儲裝置標識符(id);以及寫入操作的狀態(tài)206。
如果寫入操作涉及將數(shù)據(jù)單元的部分寫入到存儲裝置1021、1022……102n的多個,則對于每個寫入操作可以有多個寫入狀態(tài)條目200i,這些條目中的每一個相對于存儲裝置1021、1022……102n中具有用于寫入操作標簽202的所接收數(shù)據(jù)的一個存儲裝置,提供針對所標識的寫入操作的狀態(tài)。
狀態(tài)206可以相對于存儲裝置1021、1022……102n之一指示寫入操作的狀態(tài),包括但不限于:
空閑狀態(tài)指示存儲裝置204還未接受開啟命令以指示意向日志記錄。確認意向日志記錄的存儲裝置致力于在更新數(shù)據(jù)之前制作寫入數(shù)據(jù)的先前版本的副本,并且維持該先前版本直到寫入操作完成,即,原子操作完成。
開啟狀態(tài)指示存儲裝置204已經(jīng)確認其已經(jīng)接收到標識寫入操作標簽202的開啟命令,開啟命令指示存儲裝置204已經(jīng)確認寫入的意向并且準備在數(shù)據(jù)針對所標識的寫入操作進行更新之前保存數(shù)據(jù)的先前版本。
臟狀態(tài)在寫入操作202包括多個寫入命令時使用,每個寫入命令針對要在所指定的存儲裝置204處寫入的范圍或數(shù)據(jù)單元的一部分。對于寫入數(shù)據(jù)的一部分的寫入命令之一的臟狀態(tài)指示寫入數(shù)據(jù)的該部分已被寫入到存儲裝置204。針對具有開啟狀態(tài)的數(shù)據(jù)的部分的寫入的寫入狀態(tài)條目200i指示該特定部分未完成。
已寫入狀態(tài)指示對于所指定的存儲裝置204的寫入操作202所要求的寫入已完成。在僅有一個寫入命令已針對寫入操作202被發(fā)送的情況下,在存儲裝置204證實其已經(jīng)完成寫入時,指示已寫入。在對于存儲裝置204的寫入操作202包括多個寫入命令(例如子寫入命令)的情況下,在針對數(shù)據(jù)的部分的所有部件寫入命令已經(jīng)在存儲裝置204處完成時,指示寫入操作202的已寫入。
復(fù)原狀態(tài)指示復(fù)原命令已發(fā)送至存儲裝置204以將由寫入操作204更新的數(shù)據(jù)回滾到已被記錄日志的先前版本。
關(guān)閉狀態(tài)指示存儲裝置204已經(jīng)確認關(guān)閉命令的接受以使存儲裝置204清理所有記錄日志的數(shù)據(jù)的先前版本以及用于寫入操作202的狀態(tài)信息。
圖3圖示存儲裝置1021、1022……102n中的每一個針對由存儲控制器驅(qū)動器106開啟的每個寫入操作維持的寫入操作狀態(tài)條目300i的實施例。每個條目300i可以具有:提供寫入操作的唯一標識符的寫入操作標簽300,其可以具有跨多個存儲裝置1021、1022……102n剝離的數(shù)據(jù)的軌跡或塊;指示存儲裝置維持被更新的數(shù)據(jù)的先前版本的副本的意向的意向日志記錄標記304;以及寫入操作的狀態(tài)306,其可以包括上文描述的狀態(tài)之一。
在替代實施例中,存儲控制器驅(qū)動器106在操作期間可以不維持顯式的寫入操作狀態(tài)200信息。替代地,存儲裝置1021、1022……102n維持狀態(tài)300,并且在需要處置對于寫入操作的中斷時,存儲控制器驅(qū)動器106將從存儲裝置1021、1022……102n獲得狀態(tài)。
存儲控制器驅(qū)動器106可以將以下命令提交給存儲裝置1021、1022……102n作為寫入操作的部分,以將數(shù)據(jù)單元或范圍的部分寫入到多個存儲裝置1021、1022……102n:
open(tag,extents)-指令存儲裝置1021、1022……102n開始針對寫入操作標簽的新意向日志以寫入所標識的范圍或數(shù)據(jù)單元。
close(tag)-指令存儲裝置1021、1022……102n關(guān)閉寫入操作,并且清除任何狀態(tài)信息以及針對寫入操作標簽維持的數(shù)據(jù)的日志記錄的先前版本。
writewithtag(tag,extents)-在此也稱為寫入,指令存儲裝置1021、1022……102n寫入用于開啟寫入操作(標簽)的數(shù)據(jù)(范圍)。
readwithtag(tag,extents,new)-在此也稱為讀取,指令進行接收的存儲裝置1021、1022……102n檢索先前版本、寫入數(shù)據(jù)或者用于寫入操作(標簽)的所標識數(shù)據(jù)(范圍)中兩個的混合。
revert(tag)-指令存儲裝置1021、1022……102n將已寫入的數(shù)據(jù)回滾到針對寫入操作(標簽)的數(shù)據(jù)的日志記錄的先前版本。
圖4圖示描述存儲裝置1021、1022……102n處的不同狀態(tài)的狀態(tài)圖400的實施例。舊數(shù)據(jù)狀態(tài)401示出在數(shù)據(jù)更新之前數(shù)據(jù)的狀態(tài)。一接收到開啟命令,進行接收的存儲裝置1021、1022……102n的狀態(tài)轉(zhuǎn)變402到意向日志記錄狀態(tài)403,在意向日志記錄狀態(tài)403中存儲裝置1021、1022……102n在寫入新數(shù)據(jù)之前保存數(shù)據(jù)的先前版本。存儲裝置1021、1022……102n可以通過執(zhí)行位寫入式(write-in-place)寫入來寫入新數(shù)據(jù),或者使用間接法執(zhí)行寫時拷貝以在寫入時拷貝舊數(shù)據(jù)。在寫入操作包括對于存儲裝置的數(shù)據(jù)單元的部分的一系列寫入命令的實施例中,則一接收到寫入命令之一,在對于數(shù)據(jù)單元的部分之一的特定寫入完成時但在對于存儲裝置的所有寫入完成之前,進行接收的存儲裝置1021、1022……102n的狀態(tài)轉(zhuǎn)變404到臟狀態(tài)405。在寫入操作包括單個寫入命令或者在完成所有部件寫入命令之后的實施例中,狀態(tài)分別轉(zhuǎn)變407和408到已寫入狀態(tài)409。一接收到針對寫入操作(標簽)的關(guān)閉命令,存儲裝置1021、1022……102n轉(zhuǎn)變410到新數(shù)據(jù)狀態(tài)411。在新數(shù)據(jù)狀態(tài)411,存儲裝置1021、1022……102n丟棄數(shù)據(jù)的日志記錄的先前版本以及寫入操作(標簽)的其他信息,諸如用于寫入操作的寫入狀態(tài)條目300i??商鎿Q地,具有數(shù)據(jù)的日志記錄的先前版本以及其他相關(guān)信息的存儲空間可以標記為自由空間并且可用于垃圾回收或再利用。
圖4的狀態(tài)圖實施例提供了原子性,因為寫入操作在任一存儲裝置1021、1022……102n處未完成,直到所有存儲裝置已證實它們的數(shù)據(jù)已經(jīng)在單個寫入命令或多個寫入命令中寫入。直到原子寫入操作完成的點,存儲裝置1021、1022……102n維持部分以及全部寫入的數(shù)據(jù)以及數(shù)據(jù)的先前版本,以允許存儲控制器驅(qū)動器106將用于所有存儲裝置的數(shù)據(jù)回滾到更新或者寫入操作的寫入數(shù)據(jù)之前的數(shù)據(jù)的先前版本。此外,在奇偶校驗數(shù)據(jù)被維持的實施例中,存儲裝置1021、1022……102n維持足夠的信息以允許在原子寫入操作完成之前奇偶校驗數(shù)據(jù)的計算。下文詳細描述在存儲控制器驅(qū)動器106與存儲裝置1021、1022……102n之間的這一原子寫入操作的實施方式。
圖5a和5b圖示由存儲控制器驅(qū)動器106執(zhí)行的操作的實施例,用以管理具有寫入數(shù)據(jù)(例如數(shù)據(jù)單元、軌跡、范圍)的原子寫入操作,以跨多個存儲裝置1021、1022……102n進行寫入或剝離。一初始化(塊500處)用于原子寫入操作的過程,存儲控制器106確定(塊501處)用于唯一地標識寫入操作的標簽。存儲控制器驅(qū)動器106將開啟命令發(fā)送(塊503處)至存儲裝置1021、1022……102n中的每一個以接收用于寫入操作的數(shù)據(jù),來指令存儲裝置1021、1022……102n開始意向日志記錄,從而存儲要更新的數(shù)據(jù)的先前版本。發(fā)送開啟命令導(dǎo)致存儲控制器驅(qū)動器106創(chuàng)建用于寫入操作的數(shù)據(jù)將發(fā)送到的每個存儲裝置1021、1022……102n的寫入狀態(tài)條目200i,該寫入狀態(tài)條目200i具有空閑狀態(tài)。如果寫入操作將涉及用于每個存儲裝置的數(shù)據(jù)的部分的多個寫入命令,則存儲驅(qū)動控制器106可以提供用于寫入數(shù)據(jù)的一部分的每個寫入命令的具有空閑狀態(tài)的寫入狀態(tài)條目200i,以便提供用于存儲裝置1021、1022……102n的數(shù)據(jù)的部分的每個寫入命令的單獨狀態(tài)。
一接收到(塊505處)來自用于寫入操作的存儲裝置1021、1022……102n之一的開啟命令的確認,存儲控制器驅(qū)動器106更新(塊506處)用于寫入操作標簽和存儲裝置1021、1022……102n的狀態(tài)206以指示開啟。如果(塊507處)所有存儲裝置1021、1022……102n未具有開啟狀態(tài),則存儲控制器驅(qū)動器106返回到塊505以等待來自存儲裝置1021、1022……102n中的其他存儲裝置的開啟命令的確認,以確保所有的存儲裝置1021、1022……102n確認它們將從事意向日志記錄。如果(塊507處)所有存儲裝置1021、1022……102n已經(jīng)確認開啟狀態(tài),則存儲控制器驅(qū)動器106確定(塊508處)要發(fā)送至用于寫入操作的存儲裝置1021、1022……102n中的每一個的數(shù)據(jù)。這一操作可能涉及確定要跨多個存儲裝置寫入的數(shù)據(jù)單元的部分。在raid實施方式中,這一操作可以確定要剝離到存儲裝置1021、1022……102n中的每一個的數(shù)據(jù),以及確定所計算的用于存儲xor奇偶校驗數(shù)據(jù)的存儲裝置1021、1022……102n中的一個或多個的xor奇偶校驗數(shù)據(jù)。此外,這一確定可以進一步分解數(shù)據(jù)的部分以針對每個存儲裝置寫入多個寫入命令,以針對每個存儲裝置1021、1022……102n寫入數(shù)據(jù)的每個部分。
存儲控制器驅(qū)動器106將寫入(或以標簽寫入)命令發(fā)送(塊509處)至每個存儲裝置,以寫入針對該存儲裝置確定的所指示的寫入數(shù)據(jù)。針對寫入操作標簽和接收一個或多個寫入命令的存儲裝置1021、1022……102n中的每一個,更新(塊510處)狀態(tài)206以指示寫入已被發(fā)送。在一個實施例中,用于已經(jīng)接收到寫入命令的存儲裝置的開啟狀態(tài)將指示寫入已被發(fā)送但還未完成。
控制隨后前進到圖5b中的塊511,在其中存儲控制器驅(qū)動器106接收(塊511處)來自用于寫入操作標簽的存儲裝置之一的寫入完成的確認。用于寫入操作標簽和確認存儲裝置的狀態(tài)被更新(塊512處)以指示寫入完成,其可以是已寫入狀態(tài)。存儲控制器驅(qū)動器106可以隨后清理(塊513處)寫入高速緩存110中的用于該完成的寫入操作的數(shù)據(jù)。這時,寫入數(shù)據(jù)的副本維持在存儲裝置1021、1022……102n處,并且存儲控制器驅(qū)動器106不需要維持部分寫入的數(shù)據(jù)。如果寫入操作涉及用于一個存儲裝置的多個寫入命令,則存儲控制器驅(qū)動器106可以丟棄用于寫入命令的數(shù)據(jù)的部分,但是針對未接收到對其的確認的寫入命令保留數(shù)據(jù)的部分以針對存儲裝置寫入。如果(塊514處)存在一些未確認寫入完成狀態(tài)(例如已寫入狀態(tài))的接收到寫入命令的存儲裝置1021、1022……102n,則控制前進回到塊511以等待來自所有存儲裝置1021、1022……102n的進一步寫入完成確認。對于涉及將多個寫入命令發(fā)送至存儲裝置1021、1022……102n中的每一個的寫入操作,控制前進回到塊511,如果并不是所有用于數(shù)據(jù)部分的寫入命令已經(jīng)完成的話。
如果(塊514處)在接收到用于寫入操作的寫入數(shù)據(jù)的所有存儲裝置1021、1022……102n處已經(jīng)完成所有的寫入,則存儲控制器驅(qū)動器106將關(guān)閉命令發(fā)送(塊515處)至在寫入狀態(tài)條目200i中針對寫入操作標簽標識的存儲裝置1021、1022……102n中的每一個。一接收到(塊516處)來自存儲裝置1021、1022……102n之一的針對寫入操作的關(guān)閉命令完成的確認,存儲控制器驅(qū)動器106在用于寫入操作標簽202和確認存儲裝置204的寫入狀態(tài)條目200i中更新(塊517處)狀態(tài)206以指示關(guān)閉狀態(tài)。如果(塊508處)不是所有的存儲裝置1021、1022……102n已經(jīng)確認關(guān)閉命令的處理,則控制前進回到塊516以等待來自存儲裝置1021、1022……102n中的其他存儲裝置的關(guān)閉命令的確認。如果(塊518處)已被發(fā)送關(guān)閉命令的所有存儲裝置1021、1022……102n返回了確認,則存儲控制器驅(qū)動器106可以丟棄(塊519處)用于寫入操作標簽的任何信息,諸如用于寫入操作標簽和存儲裝置1021、1022……102n中的每一個的所有寫入狀態(tài)條目200i??商鎿Q地,存儲控制器驅(qū)動器106可以針對作為用于以后垃圾回收或再利用的自由空間的所有存儲裝置,指示用于寫入操作的信息。
在替代實施例中,塊518和519處的操作不執(zhí)行,并且在第一次接收到確認時異步地針對每個存儲裝置1021、1022……102n指示關(guān)閉,因為到第一個關(guān)閉狀態(tài)確認被接收的時候所有裝置已經(jīng)寫入數(shù)據(jù)。在另外的替代實施例中,存儲控制器驅(qū)動器106基于接收自存儲裝置1021、1022……102n的確認不維持狀態(tài)信息,并且僅在需要時、在針對狀態(tài)信息對存儲裝置1021、1022……102n進行詢問時、在存在對于寫入操作的中斷或其他失效時獲得這樣的狀態(tài)信息。
利用圖5a和5b的操作,存儲控制器驅(qū)動器106不需要維持所有的寫入數(shù)據(jù)和寫入數(shù)據(jù)的先前版本,直到整個寫入操作被證實完成。替代地,一旦數(shù)據(jù)被寫入到存儲裝置1021、1022……102n,用于該存儲裝置1021、1022……102n的數(shù)據(jù)可以丟棄,因為原子寫入確保了存儲裝置1021、1022……102n中的每一個維持數(shù)據(jù)的先前版本以及當(dāng)前寫入數(shù)據(jù)以允許回滾或者完成寫入。此外,如果計算了奇偶校驗數(shù)據(jù),則存儲裝置維持部分寫入的數(shù)據(jù)以允許重新計算奇偶校驗數(shù)據(jù),以前滾和完成用于寫入操作的非奇偶校驗和奇偶校驗數(shù)據(jù)的寫入。如所討論的,奇偶校驗數(shù)據(jù)可以包括擦除代碼奇偶校驗數(shù)據(jù),諸如xor奇偶校驗和其他奇偶校驗數(shù)據(jù),其可以在存儲裝置之一失效時用于數(shù)據(jù)恢復(fù)。
圖6-9圖示在存儲裝置1021、1022……102n中的每一個的控制器112中實施的操作,用于處理來自存儲控制器驅(qū)動器106的命令以實施原子寫入操作。圖6圖示由控制器112執(zhí)行以處理來自存儲控制器驅(qū)動器106的開啟命令的操作的實施例。響應(yīng)于接收到(塊600處)指定寫入操作(標簽)的開啟命令,存儲裝置控制器112創(chuàng)建(塊601處)寫入狀態(tài)條目300i,寫入狀態(tài)條目300i標識寫入操作標簽302、指示意向日志記錄304狀態(tài)(指示要更新的作為所標識的寫入操作標簽302的部分的數(shù)據(jù)的先前版本將被日志記錄和保存)、以及指示狀態(tài)306為開啟??刂破?12將開啟完成狀態(tài)返回(塊602處)給主機100。具有開啟狀態(tài)的存儲裝置1021、1022……102n確認保存更新數(shù)據(jù)的先前版本的意向,以及任何發(fā)送的寫入未被接收或者已經(jīng)被接收但未完成。
圖7圖示由存儲裝置控制器112執(zhí)行的操作的實施例,用于處理用于寫入操作標簽的寫入命令,諸如以標簽寫入。一接收到(塊700處)針對(多個)數(shù)據(jù)存儲單元114中的位置尋址的邏輯或物理地址的用于寫入操作(標簽)的寫入命令,控制器112將數(shù)據(jù)的副本保存(塊701處)在數(shù)據(jù)存儲單元114中的存儲地址處作為要更新的數(shù)據(jù)的先前版本,所述命令具有寫入數(shù)據(jù)。在替代的寫時拷貝實施方式中,控制器112可以記住舊數(shù)據(jù)位于的地方并且將新數(shù)據(jù)寫入新存儲區(qū)域,并且間接表格允許舊數(shù)據(jù)的位置被再利用。寫入命令中的寫入數(shù)據(jù)被寫入(塊702處)到存儲地址。一將數(shù)據(jù)寫入到實際存儲單元114(諸如閃速存儲器、ssd等的情況),或者一將存儲裝置1021、1022……102n中的寫入數(shù)據(jù)緩沖在與數(shù)據(jù)存儲單元114分離的緩沖器中,寫入可以視為完成,其中所緩沖的數(shù)據(jù)最終離臺到數(shù)據(jù)存儲單元114(諸如硬盤驅(qū)動的情況)。一完成寫入,控制器112將寫入操作的狀態(tài)306指示(塊703處)為用于寫入操作302的寫入狀態(tài)條目300i中的已寫入。完成返回(塊704處)到主機100。圖7的操作可以在僅有一個寫入命令針對寫入操作發(fā)送至每個存儲裝置1021、1022……102n時執(zhí)行。
圖8圖示由存儲裝置控制器112執(zhí)行的操作的實施例,用于處理多個寫入命令,諸如以標簽寫入,以針對一個存儲裝置和寫入操作標簽寫入數(shù)據(jù)的部分。一接收到(塊800處)多個寫入命令(也稱為子寫入命令)以針對(多個)數(shù)據(jù)單元114中的存儲地址寫入用于寫入操作(標簽)的數(shù)據(jù)的部分,控制器112針對每個寫入執(zhí)行塊801至805處的操作循環(huán)。在塊802處,數(shù)據(jù)存儲單元114中存儲地址處的數(shù)據(jù)的副本被保存為要更新的數(shù)據(jù)的先前版本。在替代的寫入時拷貝實施方式中,控制器112可以記住舊數(shù)據(jù)位于的地方并且將新數(shù)據(jù)寫入到新存儲區(qū)域,并且間接表格允許舊數(shù)據(jù)的位置被再利用。寫入命令中的寫入數(shù)據(jù)被寫入(塊803處)到存儲地址。一完成寫入,控制器112在針對寫入操作302的寫入狀態(tài)條目300i中將寫入操作的狀態(tài)306和寫入的部分數(shù)據(jù)指示(塊804處)為臟。在完成寫入要針對所有寫入操作寫入的數(shù)據(jù)單元的所有部分之后,控制器112將針對寫入命令和寫入操作(標簽)的寫入完成返回給主機100。
在圖8的實施例中,寫入完成或已寫入狀態(tài)僅在執(zhí)行所有寫入命令以寫入數(shù)據(jù)單元的數(shù)據(jù)的所有部分之后返回。在替代實施例中,控制器112可以在每個寫入命令完成時返回臟狀態(tài),從而指示寫入數(shù)據(jù)的該部分完成。
圖9圖示由控制器112執(zhí)行的操作的實施例,用于在存儲裝置1021、1022……102n的數(shù)據(jù)單元獨立地包括可尋址的存儲裝置時,跨多個數(shù)據(jù)單元114(包括奇偶校驗數(shù)據(jù)單元114)剝離所接收的寫入數(shù)據(jù)。數(shù)據(jù)單元114可以包括獨立存儲裝置,諸如閃速裝置、ssd、硬盤驅(qū)動等??商鎿Q地,如果存儲裝置包括ssd,則數(shù)據(jù)單元114可以包括存儲裝置1021、1022……102n中的存儲器儲存單元的管芯,諸如用于ssd存儲裝置的nand管芯。在圖9的實施例中,控制器112可以包括raid控制器,其具有寫入高速緩存,用于緩存要跨數(shù)據(jù)單元114剝離的所有數(shù)據(jù)。再進一步地,控制器112可以實施存儲控制器驅(qū)動器106的邏輯以執(zhí)行關(guān)于存儲控制器驅(qū)動器106所描述的原子寫入操作。
一針對存儲地址處理(塊900處)用于寫入操作(標簽)的寫入命令,控制器112將數(shù)據(jù)存儲單元114中該存儲地址處的數(shù)據(jù)的副本作為數(shù)據(jù)的先前版本保存(塊901處)在寫入高速緩存中,所述寫入命令具有寫入數(shù)據(jù)。在替代的寫入時拷貝實施方式中,控制器112可以記住舊數(shù)據(jù)位于的地方并且將新數(shù)據(jù)寫入到新存儲區(qū)域,并且間接表格允許舊數(shù)據(jù)的位置被再利用??刂破?12確定(塊902處)針對寫入數(shù)據(jù)的剝離單元以跨存儲裝置中的數(shù)據(jù)存儲單元進行剝離,并且計算(塊903處)用于剝離單元的擦除代碼奇偶校驗數(shù)據(jù)(諸如但不限于xor奇偶校驗數(shù)據(jù))以寫入到存儲單元114的奇偶校驗數(shù)據(jù)存儲單元。在一個實施例中,控制器112可以使用raid算法以根據(jù)不同的raid級別來確定剝離單元和奇偶校驗數(shù)據(jù)。控制器112將剝離單元和奇偶校驗數(shù)據(jù)寫入(塊904處)到數(shù)據(jù)存儲單元904,并且一完成數(shù)據(jù)從寫入命令到存儲單元114的剝離,返回(塊905處)給主機110。奇偶校驗數(shù)據(jù)可以使用糾錯碼或者本領(lǐng)域已知的其他奇偶校驗算法來計算。
圖10圖示由存儲裝置控制器112執(zhí)行的操作的實施例,用于處理來自存儲控制器驅(qū)動器106的關(guān)閉命令。一接收到(塊1000處)用于寫入操作(標簽)的關(guān)閉命令,控制器112丟棄(塊1002處)用于寫入操作的數(shù)據(jù)的先前版本以及用于寫入操作的寫入狀態(tài)信息,包括寫入狀態(tài)條目300i。針對寫入操作(標簽),將關(guān)閉完成返回給(塊1004處)主機系統(tǒng)100。
圖11-13圖示由存儲控制器驅(qū)動器106執(zhí)行的操作的實施例,用于從失效(諸如導(dǎo)致寫入操作的中斷的供電失效或其他事件)恢復(fù)。關(guān)于圖11,一檢測到(塊1100處)對于寫入操作的中斷,存儲控制器驅(qū)動器106向不具有已寫入狀態(tài)106的存儲裝置1021、1022……102n中的每一個發(fā)送(塊1101處)狀態(tài)查詢。一接收到(塊1102處)狀態(tài),存儲控制器驅(qū)動器106針對寫入操作標簽202和存儲裝置204更新(塊1103處)寫入狀態(tài)條目200i,以指示對應(yīng)于接收自存儲裝置的狀態(tài)的狀態(tài)206,諸如已寫入、開啟、已關(guān)閉等。如果所接收的狀態(tài)是針對發(fā)送至存儲裝置的多個寫入命令之一,則所返回的狀態(tài)可以指示臟,使得數(shù)據(jù)的部分被寫入,而不是以不同寫入命令發(fā)送的數(shù)據(jù)的所有部分。如果(塊1104處)針對寫入操作(標簽)之一接收對于所有存儲裝置1021、1022……102n的狀態(tài),則存儲控制器驅(qū)動器106發(fā)起(塊1105處)恢復(fù)操作以將寫入操作中涉及的存儲裝置1021、1022……102n返回到數(shù)據(jù)的先前版本(回滾)或者寫入數(shù)據(jù)的版本(前滾)??商鎿Q地,恢復(fù)操作可以涉及通過使用以標簽讀取命令來重新生成在掉電時運行中的數(shù)據(jù),而使存儲裝置中的數(shù)據(jù)一致,所述運行中的數(shù)據(jù)可以通過讀取命令從存儲裝置1021、1022……102n恢復(fù)。圖12和13圖示用于圖11中的塊1105處執(zhí)行的不同類型的恢復(fù)操作的操作的實施例。
圖12圖示由存儲驅(qū)動器控制器106執(zhí)行的操作的實施例,用于執(zhí)行恢復(fù)操作以復(fù)原回到寫入操作之前的數(shù)據(jù)的先前版本。如果存在恢復(fù)操作,則圖12的操作可以針對寫入操作狀態(tài)200中的每個寫入操作標簽來執(zhí)行。一發(fā)起恢復(fù)操作(塊1200處),存儲控制器驅(qū)動器106確定(塊1201處)寫入操作的狀態(tài)是否是中斷的寫入,所述中斷的寫入在用于寫入操作標簽的寫入狀態(tài)條目200i中的存儲裝置1021、1022……102n中的一些而不是全部處于已寫入狀態(tài)時發(fā)生。這可以在一些條目200i指示已寫入狀態(tài)以及其他條目200i指示開啟或臟狀態(tài)或者指示寫入可能還未完成的任意其他狀態(tài)時發(fā)生。如果(塊1201處)針對寫入操作的狀態(tài)不是中斷的寫入,則存儲控制器驅(qū)動器106確定(塊1202處)寫入操作標簽的狀態(tài)是否是中斷的開啟,所述中斷的開啟在存儲裝置1021、1022……102n中的至少一個處于開啟狀態(tài)并且至少一個處于空閑狀態(tài)時發(fā)生。如果是,則恢復(fù)動作包括將關(guān)閉命令發(fā)送(塊1203處)至所有存儲裝置1021、1022……102n。否則,如果(塊1202處)所有都處于空閑狀態(tài),則控制結(jié)束而不采取任何恢復(fù)動作。
如果(塊1201處)寫入操作的狀態(tài)是中斷的寫入,則存儲控制器驅(qū)動器106將復(fù)原命令發(fā)送(塊1204處)至在寫入狀態(tài)條目200i中指示為具有已寫入或臟狀態(tài)的任意存儲裝置1021、1022……102n,以使存儲裝置1021、1022……102n以數(shù)據(jù)的先前版本回滾更新數(shù)據(jù)。一針對寫入操作從存儲裝置之一接收到(塊1205處)復(fù)原命令完成的確認,如果(塊1206處)接收到復(fù)原命令的所有存儲裝置1021、1022……102n已經(jīng)確認復(fù)原操作完成,則存儲控制器驅(qū)動器106將關(guān)閉命令發(fā)送(塊1207處)至在寫入狀態(tài)條目200i中針對寫入操作標識的未處于空閑狀態(tài)的所有存儲裝置1021、1022……102n。此時,由于數(shù)據(jù)已經(jīng)復(fù)原到先前狀態(tài),所以需要寫入的任意數(shù)據(jù)將不得不從生成了寫入數(shù)據(jù)的較高級別的應(yīng)用恢復(fù)。否則,如果(塊1206處)并非所有存儲裝置1021、1022……102n已經(jīng)確認復(fù)原命令完成,則控制前進回到塊1205以等待所有復(fù)原命令完成。
圖13圖示由存儲驅(qū)動器控制器106執(zhí)行的操作的替代實施例,用于執(zhí)行恢復(fù)操作以完成已經(jīng)接收到用于寫入操作的寫入命令的所有存儲裝置1021、1022……102n處的寫入操作。如果存在恢復(fù)操作,則圖13的操作可以針對寫入操作狀態(tài)200中的每個寫入操作標簽來執(zhí)行。一發(fā)起恢復(fù)操作(塊1300處),存儲控制器驅(qū)動器106執(zhí)行與關(guān)于圖12中的塊1201、1202和1203描述的操作相同的塊1301、1302和1303處的操作,以確定寫入操作是否具有中斷的寫入狀態(tài)或中斷的開啟狀態(tài)。一確定(塊1301處)狀態(tài)是中斷的寫入狀態(tài),對于具有奇偶校驗數(shù)據(jù)的實施例,如果(在塊1306處)具有奇偶校驗數(shù)據(jù)的(多個)存儲裝置未處于已寫入狀態(tài),則存儲控制器驅(qū)動器106從具有指示臟或已寫入狀態(tài)206的條目200i的任意存儲裝置讀?。▔K1304處)所寫入的寫入數(shù)據(jù)。針對未完成的寫入,存儲控制器驅(qū)動器106根據(jù)從存儲裝置1021、1022……102n讀取的寫入數(shù)據(jù)以及寫入高速緩存110中的寫入數(shù)據(jù)中的任一個來計算(塊1305處)奇偶校驗數(shù)據(jù)。所計算的奇偶校驗數(shù)據(jù)寫入(塊1306處)到具有奇偶校驗的(多個)存儲裝置。
在完成重新寫入奇偶校驗(塊1306處)之后或者如果(塊1303處)具有奇偶校驗數(shù)據(jù)的(多個)存儲裝置處于已寫入狀態(tài),則對于在狀態(tài)條目200i中針對寫入操作標簽標識為處于開啟狀態(tài)(寫入未完成)的存儲裝置1021、1022……102n中的每一個,于是存儲控制器驅(qū)動器106重新發(fā)送(塊1307處)寫入命令以寫入先前從寫入高速緩存110發(fā)送的寫入數(shù)據(jù)。在不存在奇偶校驗數(shù)據(jù)的實施例中,則在確定針對寫入操作的中斷的寫入狀態(tài)(塊130處)之后,控制將直接前進到塊1307。
利用圖13的所描述的實施例,在寫入所有數(shù)據(jù)之后返回寫入完成的實施例中,則塊1307處的操作將被執(zhí)行以針對未完成寫入的存儲裝置重新寫入數(shù)據(jù)。在所描述的實施例中,一完成寫入,存儲裝置1021、1022……102n可以不返回中間臟確認,而是可以等待直到所有寫入命令或子寫入命令完成并且隨后針對用于寫入操作的所有寫入命令發(fā)送寫入完成。在這一實施例中,僅響應(yīng)于錯誤恢復(fù)期間的狀態(tài)查詢而返回臟狀態(tài)。在替代實施例中,存儲裝置1021、1022……102n可以響應(yīng)于完成用于寫入操作的多個寫入命令之一而返回臟。
圖14圖示響應(yīng)于接收到來自存儲控制器驅(qū)動器106的狀態(tài)查詢而由存儲裝置1021、1022……102n的控制器112執(zhí)行的操作的實施例。響應(yīng)于接收到(塊1400處)狀態(tài)查詢,如果(塊1401處)存在任意針對維持在寫入操作狀態(tài)300中的寫入操作標簽的待決未完成命令,則存儲裝置1021、1022……102n將完成用于寫入操作的待決命令,諸如開啟、寫入、關(guān)閉、復(fù)原。如果(塊1401處)不存在用于寫入操作的待決命令或者在完成(塊1402處)所有待決命令之后,則控制器112發(fā)送(塊1403處)用于在所有寫入狀態(tài)條目300i中所指示的所有寫入操作標簽的狀態(tài)信息。
應(yīng)意識到,貫穿本說明書提及“一個實施例”或“實施例”意味著結(jié)合實施例描述的特定特征、結(jié)構(gòu)或特性包括在本發(fā)明的至少一個實施例中。因此,要強調(diào)和應(yīng)該意識到的是,在本說明書的各個部分兩次或更多次提及“實施例”或“一個實施例”或“替代實施例”并不必然全都指代同一個實施例。此外,特定特征、結(jié)構(gòu)或特性可以在本發(fā)明的一個或多個實施例中合適地組合。
類似地,應(yīng)意識到,在前文對本發(fā)明的實施例的描述中,為了流水化本公開以幫助理解各個發(fā)明性方面中的一個或多個的目的而有時將各種特征一起分組到單個實施例、圖或其描述中。但是,不應(yīng)將這種公開方法解釋為反應(yīng)了所要求保護的主題要求的特征比每個權(quán)利要求中明確記載的更多的意圖。而是,如所附權(quán)利要求所反應(yīng)的,發(fā)明性的方面所依賴的特征少于單個在前文公開的實施例中的全部特征。因此,特此將附于詳細描述的權(quán)利要求明確地并入該詳細描述中。
存儲控制器驅(qū)動器106和存儲裝置1021、1022……102n中的控制器112的所描述的操作可以實施為方法、設(shè)備或計算機可讀存儲介質(zhì),所述計算機可讀存儲介質(zhì)使用標準的編程和/或工程技術(shù)來產(chǎn)生軟件、固件、硬件或其任意組合。所描述的操作可以實施為維持在“計算機可讀存儲介質(zhì)”中的代碼或邏輯,所述代碼或邏輯可以直接執(zhí)行功能,或者其中處理器可以讀取和執(zhí)行來自計算機存儲可讀介質(zhì)的代碼。計算機可讀存儲介質(zhì)包括電子電路、存儲材料、無機材料、有機材料、生物材料、鑄件、殼體、涂層和硬件中的至少一個。計算機可讀存儲介質(zhì)可以包括但不限于磁存儲介質(zhì)(例如,硬盤驅(qū)動、軟盤、磁帶等)、光學(xué)存儲部(cd-rom、dvd、光學(xué)盤等)、易失性和非易失性存儲器裝置(例如,eeprom、rom、prom、ram、dram、sram、閃速存儲器、固件、可編程邏輯等)、固態(tài)裝置(ssd)等。計算機可讀存儲介質(zhì)還可以包括在硬件裝置(例如,集成電路芯片、可編程邏輯器件、可編程門陣列(pga)、現(xiàn)場可編程門陣列(fpga)、專用集成電路(asic)等)中實施的數(shù)字邏輯。再進一步地,實施所描述的操作的代碼可以在“傳輸信號”中實施,其中傳輸信號可以通過空間或者通過諸如光纖、銅導(dǎo)線等的傳輸介質(zhì)來傳播。代碼或邏輯被編碼在其中的傳輸信號還可以包括無線信號、衛(wèi)星傳輸、無線電波、紅外信號、藍牙等。嵌入在計算機可讀存儲介質(zhì)上的程序代碼可以作為傳輸信號從發(fā)射站或計算機傳輸至接收站或計算機。計算機可讀存儲介質(zhì)并不僅僅包括傳輸信號,而是包括有形部件。本領(lǐng)域技術(shù)人員將認識到,在不偏離本發(fā)明的范圍的情況下可以對這一配置做出許多修改,并且制品可以包括本領(lǐng)域已知的合適的信息承載介質(zhì)。
圖15圖示主機系統(tǒng)100可以在其中實施的系統(tǒng)1500的實施例。該系統(tǒng)包括處理器1504,其通過總線1506與易失性存儲器裝置1508和非易失性存儲裝置1510通信,在易失性存儲器裝置1508中緩存執(zhí)行的程序、操作數(shù)和參數(shù),諸如操作系統(tǒng)104和存儲控制器驅(qū)動器106,在非易失性存儲裝置1510中可以存儲數(shù)據(jù)和程序。處理器1504也可以與輸入/輸出(i/o)裝置1512a、1512b通信,它們可以包括輸入裝置、顯示裝置、圖形卡、端口、網(wǎng)絡(luò)接口等。非易失性存儲裝置1510可以安裝到系統(tǒng)外殼1500,諸如在存儲驅(qū)動機架中,或者通過端口接口或通過網(wǎng)絡(luò)連接至系統(tǒng)1500。
示例
以下示例涉及進一步的實施例。
示例1是一種計算機可讀存儲裝置,具有在與多個存儲裝置通信的主機系統(tǒng)中執(zhí)行的計算機程序指令,所述計算機程序指令用于導(dǎo)致操作,所述操作包括:確定在其上要寫入用于寫入操作的數(shù)據(jù)的多個存儲裝置;生成唯一地標識所述寫入操作的標簽;將包括所述標簽和寫入數(shù)據(jù)的寫入命令發(fā)送至所確定的多個存儲裝置中的每一個,以使每一個存儲裝置在所述存儲裝置處寫入所述寫入數(shù)據(jù),其中每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及將具有所述標簽的復(fù)原命令發(fā)送至所述多個存儲裝置中的一個存儲裝置,以使所述一個存儲裝置還原所述一個存儲裝置處的所述寫入數(shù)據(jù)的先前版本的副本。
在示例2中,根據(jù)示例1和3-11的主題可以可選地包括:所述操作還包括:將開啟命令發(fā)送至具有所述標簽的每一個存儲裝置,其中所述開啟命令使每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及其中,響應(yīng)于從已被發(fā)送所述開啟命令的所有存儲裝置接收到所述開啟命令的確認,而將所述寫入命令發(fā)送至每一個存儲裝置。
在示例3中,根據(jù)示例1、2和4-11的主題可以可選地包括:操作還包括:響應(yīng)于接收到對于所有存儲裝置的所述寫入命令在存儲裝置處已完成的確認,而將關(guān)閉命令發(fā)送至每一個存儲裝置,其中所述關(guān)閉命令使每一個存儲裝置去除所述寫入操作的上下文,所述上下文包括所述數(shù)據(jù)的先前版本的副本。
在示例4中,根據(jù)示例1-3和5-11的主題可以可選地包括:所述操作還包括:檢測中斷;確定所有存儲裝置未完成所述寫入命令;以及將關(guān)閉命令發(fā)送至處于開啟狀態(tài)的每一個存儲驅(qū)動以關(guān)閉所述寫入操作。
在示例5中,根據(jù)示例1-4和6-11的主題可以可選地包括:所述操作還包括:響應(yīng)于檢測到中斷,而確定未確認完成所述寫入命令的存儲裝置的狀態(tài),其中,所述復(fù)原命令被發(fā)送至確定已完成所述寫入命令的至少一個存儲裝置。
在示例6中,根據(jù)示例1-5和7-11的主題可以可選地包括:確定存儲裝置的狀態(tài)包括將查詢發(fā)送至已經(jīng)接收到所述寫入命令的未確認所述寫入命令完成的每一個存儲裝置,其中,所述復(fù)原命令被發(fā)送至已響應(yīng)于所述寫入命令從而指示所述寫入完成的每一個存儲裝置,并且被發(fā)送至已響應(yīng)于所述查詢從而指示所述寫入完成的每一個存儲裝置。
在示例7中,根據(jù)示例1-6和8-11的主題可以可選地包括:所述操作還包括:緩存以所述寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于接收到一個寫入命令已完成所緩存的寫入數(shù)據(jù)的確認,而丟棄以所述一個寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于檢測到中斷,確定已經(jīng)接收到所述寫入命令并且未確認所述寫入完成的存儲裝置的狀態(tài);以及將具有所緩存的寫入數(shù)據(jù)的寫入命令重新發(fā)送至具有指示所述寫入未完成的狀態(tài)的每一個存儲裝置。
在示例8中,根據(jù)示例1-7和9-11的主題可以可選地包括:發(fā)送至所述多個存儲裝置的寫入命令包括發(fā)送至所述多個存儲裝置中的多個存儲裝置的非奇偶校驗數(shù)據(jù)以及發(fā)送至所述多個存儲裝置中的至少一個存儲裝置的奇偶校驗數(shù)據(jù)。
在示例9中,根據(jù)示例1-8、10和11的主題可以可選地包括:響應(yīng)于確定所述奇偶校驗數(shù)據(jù)的寫入命令未完成,而執(zhí)行:從具有指示所述寫入命令完成的狀態(tài)的每一個存儲裝置讀取所述寫入數(shù)據(jù);以及根據(jù)從所述多個存儲裝置中的所述至少一個存儲裝置讀取的寫入數(shù)據(jù)以及針對具有指示所述寫入未完成的狀態(tài)的存儲裝置所緩存的寫入數(shù)據(jù),來計算所述奇偶校驗數(shù)據(jù)。
在示例10中,根據(jù)示例1-9和11的主題可以可選地包括:多個寫入命令被發(fā)送至每一個存儲裝置以寫入針對所述存儲裝置的寫入數(shù)據(jù)的一部分,其中,所述操作還包括:緩存以所述多個寫入命令發(fā)送的寫入數(shù)據(jù)的部分;響應(yīng)于檢測到中斷,確定已經(jīng)接收到所述多個寫入命令并且未確認所有寫入完成的存儲裝置的狀態(tài);對于已經(jīng)確認少于所有所發(fā)送的寫入命令完成的每一個存儲裝置,將至少一個讀取命令發(fā)送至所述存儲裝置以讀取所述寫入數(shù)據(jù)的部分;根據(jù)所述寫入數(shù)據(jù)的所讀取的部分以及根據(jù)以未完成的寫入發(fā)送的所述寫入數(shù)據(jù)的所緩存的部分,來計算奇偶校驗數(shù)據(jù);將未完成的具有所述寫入數(shù)據(jù)的所緩存的部分并且用于所計算的奇偶校驗數(shù)據(jù)的寫入命令重新發(fā)送至數(shù)據(jù)的所述部分意圖用于的至少一個存儲裝置。
在示例11中,根據(jù)示例1-10的主題可以可選地包括:所述主機系統(tǒng)將多個寫入操作發(fā)送至所述多個存儲裝置,并且對于每個寫入操作,提供唯一地標識所述寫入操作的標簽,其中,所述操作還包括:響應(yīng)于檢測到對于所述寫入操作的中斷,將對于維持在所述多個存儲裝置處的所述標簽的狀態(tài)的查詢請求發(fā)送至所述多個存儲裝置;以及響應(yīng)于所述請求,從每一個存儲裝置接收在所述多個存儲裝置處發(fā)起的寫入操作的標簽,以及針對指示開啟或已寫入狀態(tài)的每一個標簽的寫入操作的狀態(tài)。
示例12是一種與主機系統(tǒng)通信的存儲裝置,其中所述存儲裝置包括:在執(zhí)行時執(zhí)行操作的控制器,所述操作包括:從所述主機系統(tǒng)接收具有唯一地標識寫入操作的標簽和寫入數(shù)據(jù)的寫入命令;響應(yīng)于所述寫入命令,將所述寫入數(shù)據(jù)寫入所述存儲裝置并且維持更新的數(shù)據(jù)的先前版本的副本作為所述寫入命令的部分;接收具有標識所述寫入命令針對其已被接收的寫入操作的標簽的復(fù)原命令;以及響應(yīng)于所述復(fù)原命令,還原由所述寫入數(shù)據(jù)更新的數(shù)據(jù)的先前版本的副本。
在示例13中,根據(jù)示例12和14-18的主題可以可選地包括:所述寫入命令包括多個寫入命令,每個寫入命令具有用于所述寫入操作的寫入數(shù)據(jù)的一部分,其中寫入所述寫入數(shù)據(jù)以及維持所述先前版本的副本的操作針對每一個寫入命令來執(zhí)行,其中所述操作還包括:響應(yīng)于完成所有寫入命令中所述寫入數(shù)據(jù)的部分的寫入,將確認返回給所述寫入命令;以及將已經(jīng)針對所述多個寫入命令之一寫入的所述數(shù)據(jù)的部分指示為臟。
在示例14中,根據(jù)示例12、13和15-18的主題可以可選地包括:所述操作還包括:接收用于所述寫入操作的關(guān)閉命令;并且響應(yīng)于用于所述寫入操作的所述關(guān)閉命令,刪除有關(guān)所述寫入操作以及用于所述寫入操作的所述數(shù)據(jù)的先前副本的信息;以及將所述關(guān)閉命令的完成的確認返回給所述主機系統(tǒng)。
在示例15中,根據(jù)示例12-14和16-18的主題可以可選地包括:所述存儲裝置包括固態(tài)盤(ssd)。
在示例16中,根據(jù)示例12-15、17和18的主題可以可選地包括:所述操作還包括:從所述主機系統(tǒng)接收具有用于所述寫入操作的標簽的開啟命令;指示用于所述標簽的意向日志記錄以維持更新的數(shù)據(jù)的先前版本的副本作為由所述標簽標識的寫入操作的部分;以及響應(yīng)于指示所述意向日志記錄,而返回所述開啟命令的確認,其中所述寫入命令在返回所述開啟命令的確認之后發(fā)送。
在示例17中,根據(jù)示例12-16和18的主題可以可選地包括:所述操作還包括:從主機接收狀態(tài)查詢;響應(yīng)于接收到所述狀態(tài)查詢:完成用于所述寫入操作的任何待決寫入命令;響應(yīng)于完成所述待決寫入命令,而將寫入完成返回給所述主機;以及響應(yīng)于確定不存在用于所述寫入操作的待決寫入命令,而返回開啟狀態(tài)。
在示例18中,根據(jù)示例12-17的主題可以可選地包括:針對所述存儲裝置處開啟的多個寫入操作中的每一個,執(zhí)行完成所述待決寫入命令以及將所述寫入完成或開啟狀態(tài)返回給所述主機的操作。
示例19是一種與多個存儲裝置通信的系統(tǒng),所述系統(tǒng)包括:處理器;以及計算機可讀存儲介質(zhì),具有由所述處理器執(zhí)行以執(zhí)行操作的程序指令,所述操作包括:確定在其上要寫入用于寫入操作的數(shù)據(jù)的多個存儲裝置;生成唯一地標識所述寫入操作的標簽;將包括所述標簽和寫入數(shù)據(jù)的寫入命令發(fā)送至所確定的多個存儲裝置中的每一個,以使每一個存儲裝置在所述存儲裝置處寫入所述寫入數(shù)據(jù),其中每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及將具有所述標簽的復(fù)原命令發(fā)送至所述多個存儲裝置中的一個存儲裝置,以使所述一個存儲裝置還原所述一個存儲裝置處的所述寫入數(shù)據(jù)的先前版本的副本。
在示例20中,根據(jù)示例19和21-26的主題可以可選地包括:所述操作還包括:將開啟命令發(fā)送至具有所述標簽的每一個存儲裝置,其中所述開啟命令使每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及其中,響應(yīng)于從已被發(fā)送所述開啟命令的所有存儲裝置接收到所述開啟命令的確認,而將所述寫入命令發(fā)送至每一個存儲裝置。
在示例21中,根據(jù)示例19、20和22-26的主題可以可選地包括:所述操作還包括:響應(yīng)于接收到對于所有存儲裝置的所述寫入命令在存儲裝置處已完成的確認,而將關(guān)閉命令發(fā)送至每一個存儲裝置,其中所述關(guān)閉命令使每一個存儲裝置去除所述寫入操作的上下文,所述上下文包括所述數(shù)據(jù)的先前版本的副本。
在示例22中,根據(jù)示例19-21和23-26的主題可以可選地包括:所述操作還包括:檢測中斷;確定所有存儲裝置未完成所述寫入命令;以及將關(guān)閉命令發(fā)送至處于開啟狀態(tài)的每一個存儲驅(qū)動以關(guān)閉所述寫入操作。
在示例23中,根據(jù)示例19-22和24-26的主題可以可選地包括:所述操作還包括:響應(yīng)于檢測到中斷,而確定未確認完成所述寫入命令的存儲裝置的狀態(tài),其中,所述復(fù)原命令被發(fā)送至確定已完成所述寫入命令的至少一個存儲裝置。
在示例24中,根據(jù)示例19-23和25-26的主題可以可選地包括:確定存儲裝置的狀態(tài)包括將查詢發(fā)送至已經(jīng)接收到所述寫入命令的未確認所述寫入命令完成的每一個存儲裝置,其中,所述復(fù)原命令被發(fā)送至已響應(yīng)于所述寫入命令從而指示所述寫入完成的每一個存儲裝置,并且被發(fā)送至已響應(yīng)于所述查詢從而指示所述寫入完成的每一個存儲裝置。
在示例25中,根據(jù)示例19-24和26的主題可以可選地包括:所述操作還包括:緩存以所述寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于接收到一個寫入命令已完成所緩存的寫入數(shù)據(jù)的確認,而丟棄以所述一個寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于檢測到中斷,確定已經(jīng)接收到所述寫入命令并且未確認所述寫入完成的存儲裝置的狀態(tài);以及將具有所緩存的寫入數(shù)據(jù)的寫入命令重新發(fā)送至具有指示所述寫入未完成的狀態(tài)的每一個存儲裝置。
在示例26中,根據(jù)示例19-25的主題可以可選地包括:發(fā)送至所述多個存儲裝置的寫入命令包括發(fā)送至所述多個存儲裝置中的多個存儲裝置的非奇偶校驗數(shù)據(jù)以及發(fā)送至所述多個存儲裝置中的至少一個存儲裝置的奇偶校驗數(shù)據(jù)。
示例27是一種方法,包括:確定在其上要寫入用于寫入操作的數(shù)據(jù)的多個存儲裝置;生成唯一地標識所述寫入操作的標簽;將包括所述標簽和寫入數(shù)據(jù)的寫入命令發(fā)送至所確定的多個存儲裝置中的每一個,以使每一個存儲裝置在所述存儲裝置處寫入所述寫入數(shù)據(jù),其中每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及將具有所述標簽的復(fù)原命令發(fā)送至所述多個存儲裝置中的一個存儲裝置,以使所述一個存儲裝置還原所述一個存儲裝置處的所述寫入數(shù)據(jù)的先前版本的副本。
在示例28中,根據(jù)示例27和29-31的主題可以可選地包括:將開啟命令發(fā)送至具有所述標簽的每一個存儲裝置,其中所述開啟命令使每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及其中,響應(yīng)于從已被發(fā)送所述開啟命令的所有存儲裝置接收到所述開啟命令的確認,而將所述寫入命令發(fā)送至每一個存儲裝置。
在示例29中,根據(jù)示例27、28、30和31的主題可以可選地包括:響應(yīng)于檢測到中斷,而確定未確認完成所述寫入命令的存儲裝置的狀態(tài),其中,所述復(fù)原命令被發(fā)送至確定已完成所述寫入命令的至少一個存儲裝置。
在示例30中,根據(jù)示例27-30的主題可以可選地包括:緩存以所述寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于接收到一個寫入命令已完成所緩存的寫入數(shù)據(jù)的確認,而丟棄以所述一個寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于檢測到中斷,確定已經(jīng)接收到所述寫入命令并且未確認所述寫入完成的存儲裝置的狀態(tài);以及將具有所緩存的寫入數(shù)據(jù)的寫入命令重新發(fā)送至具有指示所述寫入未完成的狀態(tài)的每一個存儲裝置。
在示例31中,示例27-30的主題可以可選地包括:從其余存儲寫入速率以及當(dāng)前存儲寫入速率確定對寫入放大的調(diào)節(jié)包括:確定在應(yīng)用于當(dāng)前存儲寫入速率時導(dǎo)致其余存儲寫入速率的調(diào)節(jié)因素。
在示例32中,示例27的主題可以可選地包括以下中的至少一個步驟:
(1)將開啟命令發(fā)送至具有所述標簽的每一個存儲裝置,其中所述開啟命令使每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及其中,響應(yīng)于從已被發(fā)送所述開啟命令的所有存儲裝置接收到所述開啟命令的確認,而將所述寫入命令發(fā)送至每一個存儲裝置;和/或
(2)響應(yīng)于接收到對于所有存儲裝置的所述寫入命令在存儲裝置處已完成的確認,而將關(guān)閉命令發(fā)送至每一個存儲裝置,其中所述關(guān)閉命令使每一個存儲裝置去除所述寫入操作的上下文,所述上下文包括所述數(shù)據(jù)的先前版本的副本;和/或
(3)檢測中斷;確定所有存儲裝置未完成所述寫入命令;以及將關(guān)閉命令發(fā)送至處于開啟狀態(tài)的每一個存儲驅(qū)動以關(guān)閉所述寫入操作;和/或
(4)響應(yīng)于檢測到中斷,而確定未確認完成所述寫入命令的存儲裝置的狀態(tài),其中,所述復(fù)原命令被發(fā)送至確定已完成所述寫入命令的至少一個存儲裝置;和/或
(5)其中,確定存儲裝置的狀態(tài)包括將查詢發(fā)送至已經(jīng)接收到所述寫入命令的未確認所述寫入命令完成的每一個存儲裝置,其中,所述復(fù)原命令被發(fā)送至已響應(yīng)于所述寫入命令從而指示所述寫入完成的每一個存儲裝置,并且被發(fā)送至已響應(yīng)于所述查詢從而指示所述寫入完成的每一個存儲裝置;和/或
(6)緩存以所述寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于接收到一個寫入命令已完成所緩存的寫入數(shù)據(jù)的確認,而丟棄以所述一個寫入命令發(fā)送的所述寫入數(shù)據(jù);響應(yīng)于檢測到中斷,確定已經(jīng)接收到所述寫入命令并且未確認所述寫入完成的存儲裝置的狀態(tài);以及將具有所緩存的寫入數(shù)據(jù)的寫入命令重新發(fā)送至具有指示所述寫入未完成的狀態(tài)的每一個存儲裝置;和/或
(7)其中,發(fā)送至所述多個存儲裝置的寫入命令包括發(fā)送至所述多個存儲裝置中的多個存儲裝置的非奇偶校驗數(shù)據(jù)以及發(fā)送至所述多個存儲裝置中的至少一個存儲裝置的奇偶校驗數(shù)據(jù);和/或
(8)其中,響應(yīng)于確定所述奇偶校驗數(shù)據(jù)的寫入命令未完成,而執(zhí)行:從具有指示所述寫入命令完成的狀態(tài)的每一個存儲裝置讀取所述寫入數(shù)據(jù);以及根據(jù)從所述多個存儲裝置中的所述至少一個存儲裝置讀取的寫入數(shù)據(jù)以及針對具有指示所述寫入未完成的狀態(tài)的存儲裝置所緩存的寫入數(shù)據(jù),來計算所述奇偶校驗數(shù)據(jù);和/或
(9)其中,多個寫入命令被發(fā)送至每一個存儲裝置以寫入針對所述存儲裝置的寫入數(shù)據(jù)的一部分,還包括:緩存以所述多個寫入命令發(fā)送的寫入數(shù)據(jù)的部分;響應(yīng)于檢測到中斷,確定已經(jīng)接收到所述多個寫入命令并且未確認所有寫入完成的存儲裝置的狀態(tài);對于已經(jīng)確認少于所有所發(fā)送的寫入命令完成的每一個存儲裝置,將至少一個讀取命令發(fā)送至所述存儲裝置以讀取所述寫入數(shù)據(jù)的所述部分;根據(jù)所述寫入數(shù)據(jù)的所讀取的部分以及根據(jù)以未完成的寫入發(fā)送的所述寫入數(shù)據(jù)的所緩存的部分,來計算奇偶校驗數(shù)據(jù);將未完成的具有所述寫入數(shù)據(jù)的所緩存的部分并且用于所計算的奇偶校驗數(shù)據(jù)的寫入命令重新發(fā)送至數(shù)據(jù)的所述部分意圖用于的至少一個存儲裝置;和/或
(10)其中,所述主機系統(tǒng)將多個寫入操作發(fā)送至所述多個存儲裝置,并且對于每個寫入操作,提供唯一地標識所述寫入操作的標簽,還包括:響應(yīng)于檢測到對于所述寫入操作的中斷,將對于維持在所述多個存儲裝置處的所述標簽的狀態(tài)的查詢請求發(fā)送至所述多個存儲裝置;以及響應(yīng)于所述請求,從每一個存儲裝置接收在所述多個存儲裝置處發(fā)起的寫入操作的標簽,以及針對指示開啟或已寫入狀態(tài)的每一個標簽的寫入操作的狀態(tài)。
示例33是一種方法,包括:從主機系統(tǒng)接收具有唯一地標識寫入操作的標簽和寫入數(shù)據(jù)的寫入命令;響應(yīng)于所述寫入命令,將所述寫入數(shù)據(jù)寫入存儲裝置并且維持更新的數(shù)據(jù)的先前版本的副本作為所述寫入命令的部分;接收具有標識所述寫入命令針對其已被接收的寫入操作的標簽的復(fù)原命令;以及響應(yīng)于所述復(fù)原命令,還原由所述寫入數(shù)據(jù)更新的數(shù)據(jù)的先前版本的副本。
在示例34中,示例33的主題可以可選地包括:接收用于所述寫入操作的關(guān)閉命令;并且響應(yīng)于用于所述寫入操作的所述關(guān)閉命令,刪除有關(guān)所述寫入操作以及用于所述寫入操作的所述數(shù)據(jù)的先前副本的信息;以及將所述關(guān)閉命令的完成的確認返回給所述主機系統(tǒng)。
在示例35中,示例33的主題可以可選地包括以下中的至少一個步驟:
(1)其中,所述寫入命令包括多個寫入命令,每個寫入命令具有用于所述寫入操作的寫入數(shù)據(jù)的一部分,其中寫入所述寫入數(shù)據(jù)以及維持所述先前版本的副本的操作針對每一個寫入命令來執(zhí)行,還包括:響應(yīng)于完成所有寫入命令中所述寫入數(shù)據(jù)的部分的寫入,將確認返回給所述寫入命令;以及將已經(jīng)針對所述多個寫入命令之一寫入的所述數(shù)據(jù)的部分指示為臟;和/或
(2)接收用于所述寫入操作的關(guān)閉命令;并且響應(yīng)于用于所述寫入操作的所述關(guān)閉命令,刪除有關(guān)所述寫入操作以及用于所述寫入操作的所述數(shù)據(jù)的先前副本的信息;以及將所述關(guān)閉命令的完成的確認返回給所述主機系統(tǒng);和/或
(3)其中,所述存儲裝置包括固態(tài)盤(ssd);和/或
(4)從所述主機系統(tǒng)接收具有用于所述寫入操作的標簽的開啟命令;指示用于所述標簽的意向日志記錄以維持更新的數(shù)據(jù)的先前版本的副本作為由所述標簽標識的寫入操作的部分;以及響應(yīng)于指示所述意向日志記錄,而返回所述開啟命令的確認,其中所述寫入命令在返回所述開啟命令的確認之后發(fā)送;和/或
(5)從所述主機接收狀態(tài)查詢;響應(yīng)于接收到所述狀態(tài)查詢:完成用于所述寫入操作的任何待決寫入命令;響應(yīng)于完成所述待決寫入命令,而將寫入完成返回給所述主機;以及響應(yīng)于確定不存在用于所述寫入操作的待決寫入命令,而返回開啟狀態(tài);和/或
(6)其中,針對所述存儲裝置處開啟的多個寫入操作中的每一個,執(zhí)行完成所述待決寫入命令以及將所述寫入完成或開啟狀態(tài)返回給所述主機的操作。
示例36是包括用于執(zhí)行如任意前述權(quán)利要求中要求保護的方法的構(gòu)件的設(shè)備。
示例37是包括機器可讀指令的機器可讀存儲部,在所述機器可讀指令執(zhí)行時實施如任意前述權(quán)利要求中要求保護的方法,或者實現(xiàn)如任意前述權(quán)利要求中要求保護的設(shè)備或系統(tǒng)。
示例38是一種設(shè)備,包括:用于確定在其上要寫入用于寫入操作的數(shù)據(jù)的多個存儲裝置的構(gòu)件;用于生成唯一地標識所述寫入操作的標簽的構(gòu)件;用于將包括所述標簽和寫入數(shù)據(jù)的寫入命令發(fā)送至所確定的多個存儲裝置中的每一個,以使每一個存儲裝置在所述存儲裝置處寫入所述寫入數(shù)據(jù)的構(gòu)件,其中每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及用于將具有所述標簽的復(fù)原命令發(fā)送至所述多個存儲裝置中的一個存儲裝置,以使所述一個存儲裝置還原所述一個存儲裝置處的所述寫入數(shù)據(jù)的先前版本的副本的構(gòu)件。
在示例39中,根據(jù)示例38的主題可以可選地包括:用于將開啟命令發(fā)送至具有所述標簽的每一個存儲裝置的構(gòu)件,其中所述開啟命令使每一個存儲裝置維持要由所述寫入操作更新的數(shù)據(jù)的先前版本的副本;以及其中,響應(yīng)于從已被發(fā)送所述開啟命令的所有存儲裝置接收到所述開啟命令的確認,而將所述寫入命令發(fā)送至每一個存儲裝置。