專利名稱:基于虛擬內(nèi)存盤的備份與恢復(fù)方法
技術(shù)領(lǐng)域:
基于虛擬內(nèi)存盤的備份與恢復(fù)方法屬于存儲區(qū)域網(wǎng)絡(luò)領(lǐng)域,尤其涉及其中的備份與數(shù)據(jù)恢復(fù)。
背景技術(shù):
固態(tài)磁盤(Solid-state disk,SSD)是一種高性能且與傳統(tǒng)磁盤兼容的外部存儲設(shè)備,它使用記憶芯片(如SDRAM或Flash芯片)代替?zhèn)鹘y(tǒng)磁盤中旋轉(zhuǎn)的盤片來存放數(shù)據(jù),并且使用相應(yīng)的技術(shù)保障數(shù)據(jù)的持久性,完全消除了存儲模塊的機(jī)械延遲,大大提高了應(yīng)用的性能和可靠性。因此,SSD設(shè)備正越來越多地應(yīng)用于對數(shù)據(jù)帶寬與延時要求較高的關(guān)鍵性存儲應(yīng)用中。
SSD根據(jù)其使用的存儲芯片類型來區(qū)分,主要分為基于Flash的SSD和基于SDRAM的SSD兩大類。前者使用非易失的Flash芯片來存儲數(shù)據(jù),芯片掉電之后數(shù)據(jù)仍然保持完整。然而由于Flash芯片單元在幾十萬至幾百萬次寫入之后便會失效,這就造成了該類SSD不適于用作經(jīng)常更新的數(shù)據(jù)存儲。目前應(yīng)用比較廣泛的是后一種SSD,其實(shí)現(xiàn)是基于高速、易失的內(nèi)存,比如SDRAM。此類SSD具有很高的數(shù)據(jù)訪問速度和非常低的延遲,可用于加速因?yàn)榇疟P瓶頸而無法提高性能的應(yīng)用。然而由于SDRAM的易失特性,系統(tǒng)掉電后SSD中的數(shù)據(jù)會完全丟失,因此如何保障其數(shù)據(jù)的完整性是當(dāng)前的一個重要問題。
一種方法是使用內(nèi)部的電池和備份磁盤來保障數(shù)據(jù)的持久性。一旦電源失效,電池會支持該設(shè)備直到數(shù)據(jù)全部被轉(zhuǎn)儲到備份磁盤。當(dāng)系統(tǒng)重新啟動時,數(shù)據(jù)會經(jīng)由備份磁盤復(fù)制到工作內(nèi)存中。目前市場上已經(jīng)有利用這種方法實(shí)現(xiàn)的SSD產(chǎn)品,其性能十分優(yōu)越,但由于是全硬件實(shí)現(xiàn),成本很高,在系統(tǒng)掉電后需要花費(fèi)大量時間磁盤同步數(shù)據(jù)以維護(hù)數(shù)據(jù)的持久性,而且對于數(shù)據(jù)一致性的保證和數(shù)據(jù)恢復(fù)的支持不夠。
我們在先前的工作中,基于虛擬內(nèi)存盤Visual Disk(簡稱VD)的方法實(shí)現(xiàn)了自己的SSD系統(tǒng)——清華SSD(TH-SSD),將存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)的主存和備份磁盤虛擬成統(tǒng)一的設(shè)備VD,向上層應(yīng)用隱藏其實(shí)現(xiàn)細(xì)節(jié),給前端的存儲訪問提供SSD的服務(wù)。由于VD的實(shí)現(xiàn)載體是易失性的主存,因此需要采取措施保護(hù)其中的數(shù)據(jù),以防止系統(tǒng)崩潰或重啟所造成的數(shù)據(jù)丟失。
本發(fā)明中,我們提出了基于快照(Snapshot)和寫時拷貝(Copy-On-Write)的異步鏡像策略,以動態(tài)保持?jǐn)?shù)據(jù)的持久性和一致性。該方法采用快照和寫時拷貝相結(jié)合的方法,使磁盤記錄備份過程開始前一刻VD中的完整數(shù)據(jù)。在系統(tǒng)出現(xiàn)故障后重新啟動的時候,可通過一致的備份磁盤和臨時日志來對數(shù)據(jù)進(jìn)行恢復(fù)。與其他的基于DRAM的快速存儲設(shè)備相比較,該方法減少了在系統(tǒng)掉電后向磁盤同步數(shù)據(jù)所花費(fèi)的大量時間,對于數(shù)據(jù)一致性的保證和數(shù)據(jù)恢復(fù)的支持好,并具有成本低,可移植性好等優(yōu)勢。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種高效、可移植且易于實(shí)現(xiàn)的基于虛擬內(nèi)存盤的備份與恢復(fù)方法。
本發(fā)明的特征在于,所述方法依次含有以下步驟步驟(1)在存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)之上設(shè)置虛擬內(nèi)存盤模塊SSD_VD,把該存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)的內(nèi)存和備份磁盤虛擬成一個對上層應(yīng)用透明的內(nèi)存池,該模塊把該內(nèi)存池中的虛擬內(nèi)存盤VD劃分成為一數(shù)據(jù)塊為單位的數(shù)組并標(biāo)志記號,使用下述位圖中的各個位表示相應(yīng)數(shù)據(jù)塊的狀態(tài)變化情況數(shù)據(jù)塊X指僅在掃描開始時刻T1之前被寫操作訪問的數(shù)據(jù)塊,在該數(shù)據(jù)塊的塊號前端用位01標(biāo)志;數(shù)據(jù)塊O僅在掃描開始時刻T1和掃描結(jié)束時刻T2之間被寫操作訪問的數(shù)據(jù)塊;在該數(shù)據(jù)塊的塊號前端用位10表示;數(shù)據(jù)塊OX指在T1之前已經(jīng)被寫操作訪問,時刻T1到T2之間又被寫操作訪問的數(shù)據(jù)塊,在該數(shù)據(jù)塊的塊號前端用位11表示;數(shù)據(jù)塊CLEAN到T2仍未被寫操作訪問的數(shù)據(jù)塊,在該數(shù)據(jù)塊的塊號前端用位00表示在該虛擬內(nèi)存盤VD中,還設(shè)有寫時拷貝表COW,用于存放備份過程開始后在VD的未掃描位置有寫操作訪問請求的數(shù)據(jù)塊,但在該未被掃描位置的原有內(nèi)容是數(shù)據(jù)塊X;備份數(shù)據(jù)鏈表new_dirty_list,用于存放備份過程開始后在VD描位置有寫訪問請求的數(shù)據(jù)塊;小型計算機(jī)系統(tǒng)接口模塊TH_SSD_SCSI,與虛擬內(nèi)存模塊相連,負(fù)責(zé)處理讀寫命令;主機(jī)模塊,與虛擬內(nèi)存模塊相連,為該存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)與管理主機(jī)的接口;步驟(2)所述方法由虛擬內(nèi)存盤模塊按照以下步驟實(shí)現(xiàn)備份操作步驟(2.1)在T1時刻啟動異步備份線程ssd_workers,掃描所有數(shù)據(jù)塊,把標(biāo)記為X的數(shù)據(jù)塊寫入至備份磁盤的相應(yīng)位置;步驟(2.2)在時刻T1至該線程ssd_workers處理結(jié)束時刻T2間,該網(wǎng)絡(luò)存儲控制端節(jié)點(diǎn)小型計算機(jī)接口模塊上I/O處理線程收到寫命令按照以下情況分別處理(a)若寫入位置在線程ssd_workers當(dāng)前處理到的數(shù)據(jù)塊指針curr之前,說明指針curr指向了該線程ssd_workers已處理完成的區(qū)域,直接設(shè)置該數(shù)據(jù)塊位圖對應(yīng)的標(biāo)志位以便在下一次線程ssd_workers啟動時作為標(biāo)志為X的數(shù)據(jù)塊處理;
(b)若寫入位置在指針curr之后,則按照以下情況分別處理若指向了原來為非O而為X的數(shù)據(jù)塊,只需將該數(shù)據(jù)塊的塊號記錄在new_dirty_list表中,不設(shè)置相應(yīng)的標(biāo)志位;若指向了原來在T1時刻已經(jīng)被寫操作訪問過,在T1與T2之間又被寫操作訪問的數(shù)據(jù)塊X,則把該數(shù)據(jù)塊的標(biāo)志位清空,把該塊內(nèi)容和塊號記錄在COW鏈表中,再把寫入O類數(shù)據(jù)的內(nèi)容直接寫入虛擬內(nèi)存盤VD,將塊號記錄在new_dirty_list表中;步驟(2.3)在T2時刻,所有數(shù)據(jù)塊已遍歷掃描,鎖定虛擬內(nèi)存盤VD,標(biāo)記new_dirty_list中所有數(shù)據(jù)塊在位圖中的相應(yīng)位,并清空該鏈表,解鎖虛擬內(nèi)存盤VD;最后將COW表中所有數(shù)據(jù)塊寫入備份磁盤相應(yīng)位置,ssd_workers線程休眠;步驟(2.4)對于以后進(jìn)入VD的數(shù)據(jù)塊,只標(biāo)記相應(yīng)的位;步驟(3)虛擬內(nèi)存盤模塊按以下方式進(jìn)行數(shù)據(jù)恢復(fù)從備份磁盤的第0個扇區(qū)開始,按順序依次讀入數(shù)據(jù)塊大小的數(shù)據(jù)并放入VD對應(yīng)的數(shù)據(jù)塊中;2.根據(jù)
權(quán)利要求
所述的基于虛擬內(nèi)存盤的備份與恢復(fù)方法其特征在于,異步掃描線程是每隔固定的時間間隔被系統(tǒng)時鐘喚醒,或在被待寫數(shù)據(jù)塊的數(shù)目達(dá)到閾值而被小型計算機(jī)接口模塊喚醒.
圖1.TH-SSD總體軟件架構(gòu)圖。
圖2.ssd_workers線程工作原理。
圖3.基于快照和寫時拷貝的鏡像備份方式工作原理。
圖4.系統(tǒng)結(jié)構(gòu)圖。
圖5.備份時系統(tǒng)的讀寫性能。
圖6.系統(tǒng)流程圖。
具體實(shí)施例方式
數(shù)據(jù)一致性是數(shù)據(jù)備份過程中需要考慮的一個重要問題。數(shù)據(jù)備份并不是簡單地將數(shù)據(jù)從易失性存儲介質(zhì)轉(zhuǎn)移到持久性存儲介質(zhì)上,而是要保證所轉(zhuǎn)移的數(shù)據(jù)正確地反映了某一時刻的存儲狀態(tài)。解決數(shù)據(jù)一致性問題的方法都依賴于持久性的存儲。應(yīng)用與存儲之間的契約就是寫入IO操作的返回值,當(dāng)返回值為成功時應(yīng)用便認(rèn)為該部分?jǐn)?shù)據(jù)已經(jīng)被持久化了。由于目前被普遍使用的兩種存儲介質(zhì)的特性,人們存儲數(shù)據(jù)時需要在慢速且非易失的磁盤和快速且易失的DRAM主存之間進(jìn)行權(quán)衡。
清華SSD系統(tǒng)(TH-SSD)是我們自行開發(fā)的固態(tài)存儲設(shè)備,也是進(jìn)行備份的基礎(chǔ)。它主要由以下三個子模塊組成SCSI(Small Computer System Interface,小型計算機(jī)系統(tǒng)接口)模塊TH-SSD_SCSI、主機(jī)模塊TH-SSD_HOST和緩存模塊TH-SSD_Cache。SCSI模塊負(fù)責(zé)處理讀寫命令,主機(jī)模塊為存儲與管理主機(jī)的接口,而緩存模塊則利用Cache機(jī)制提高系統(tǒng)的整體性能。三個子系統(tǒng)的實(shí)現(xiàn)均依賴于一個核心功能模塊——虛擬內(nèi)存盤模塊(簡稱SSD-VD),其主要功能是將存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)的內(nèi)存和備份磁盤虛擬成統(tǒng)一的設(shè)備,將操作系統(tǒng)為SSD保留的內(nèi)存封裝成一個可以方便使用的內(nèi)存池,向外提供少量接口并隱藏其復(fù)雜的內(nèi)部實(shí)現(xiàn),使得存儲空間的管理對上層應(yīng)用透明。SSD-VD在對虛擬內(nèi)存盤VD的管理上,采用了基于位圖的寫入跟蹤策略,以監(jiān)控對VD的寫入操作。實(shí)現(xiàn)上,將VD劃分成以數(shù)據(jù)塊(簡稱trunk)為單位的數(shù)組,用位圖中的各個位記錄相應(yīng)數(shù)據(jù)塊的狀態(tài)變化情況。前端在向VD寫入數(shù)據(jù)時要設(shè)置數(shù)據(jù)塊在位圖中的相應(yīng)位。SSD-VD的備份和恢復(fù)方法就是其于這種位圖的管理策略來實(shí)現(xiàn)的。
基于Snapshot和Copy-On-Write(COW)的異步鏡像備份采用一塊備份磁盤(為了保證可靠性使用硬件RAID1)與SSD-VD中的內(nèi)容一一對應(yīng),可以保證異步備份副本的完整性(得到在備份開始前一刻的系統(tǒng)的一致的映像,即該時刻的系統(tǒng)的一個快照,即Snapshot)。其實(shí)現(xiàn)方式是在備份過程中,如果有新的寫請求到達(dá),則將VD中原有位置內(nèi)容拷貝到臨時的COW(Copy-On-Write)表空間當(dāng)中。在實(shí)現(xiàn)上,COW表為VD中等待寫入備份磁盤的數(shù)據(jù)塊副本的鏈表。
實(shí)現(xiàn)方式描述如下異步掃描線程ssd_workers每隔一段時間被系統(tǒng)時鐘喚醒或由于待寫數(shù)據(jù)塊的數(shù)目達(dá)到閾值而被SCSI模塊喚醒。它順序掃描整個位圖區(qū)域,將修改過的塊中的數(shù)據(jù)寫入備份磁盤。在此過程中,為了保證數(shù)據(jù)的一致性,遇到不同的數(shù)據(jù)塊使用不同的策略進(jìn)行處理。在異步掃描線程ssd_workers運(yùn)行時,如果未被掃描區(qū)域有寫入操作,則需要將該數(shù)據(jù)塊中原有內(nèi)容拷貝到COW表中,并記錄,待異步掃描線程ssd_workers掃描到該數(shù)據(jù)塊時,再將COW表中的相應(yīng)內(nèi)容寫回備份磁盤。通過這種方式,該算法可以保證備份內(nèi)容為備份開始時刻的精確副本。
具體實(shí)現(xiàn)中,首先定義如下概念定義T1異步掃描線程ssd_workers啟動時刻定義T2異步掃描線程ssd_workers處理結(jié)束時刻對于數(shù)據(jù)塊,定義如下狀態(tài)定義X僅在T1之前被寫操作訪問的數(shù)據(jù)塊定義O僅在T1和T2之間被寫操作訪問的數(shù)據(jù)塊定義OX在T1之前已經(jīng)被寫,T1到T2之間又被寫操作訪問的數(shù)據(jù)塊定義CLEAN到T2仍未被寫過的數(shù)據(jù)塊定義位圖bitmap沒兩位表示一個數(shù)據(jù)塊,并通過編碼分別表示上述四種狀態(tài),即00(CLEAN),01(X),10(O),11(OX)定義指針curr(current position)異步掃描線程ssd_workers當(dāng)前處理到的數(shù)據(jù)塊此外,定義兩個鏈表結(jié)構(gòu)
定義COW表用于存放備份過程開始后未掃描位置有寫入請求而原有位置內(nèi)容就是X的數(shù)據(jù)塊定義new_dirty_list表用于存放備份過程開始后未掃描位置有寫入請求的數(shù)據(jù)塊由定義可知在T1到T2之間只有O。
ssd_workers的具體掃描策略如下T1時刻開始,遍歷所有數(shù)據(jù)塊,找到標(biāo)記為X的數(shù)據(jù)塊,將其寫入至備份磁盤的相應(yīng)位置,并且將curr值向后移動一位。在這期間中間層的I/O處理線程遇到寫命令時若寫入位置在curr之前,說明是位于ssd_workers處理完成的區(qū)域,直接設(shè)置位圖中的相應(yīng)位,該數(shù)據(jù)塊將在下一次ssd_workers啟動時被作為X處理;若寫入位置在curr之后原來不是O而是X數(shù)據(jù)塊只將該數(shù)據(jù)塊的塊號記錄在new_dirty_list表中,不設(shè)置位圖中的位。
原來就是OX的數(shù)據(jù)塊將X內(nèi)容讀出,清空位圖中的相應(yīng)位,將該塊內(nèi)容和塊號記錄在COW鏈表中,O的內(nèi)容直接寫入VD,將塊號記錄在new-dirty_list表中。
待所有trunk遍歷完成(T2時刻),鎖定VD,標(biāo)記new_dirty_list表中所有數(shù)據(jù)塊在位圖中的相應(yīng)位,并清空該鏈表,解鎖VD;最后將COW表中所有數(shù)據(jù)塊寫入備份磁盤相應(yīng)位置,ssd_workers線程休眠。
對于之后的所有到來的I/O寫請求,均只置位圖中的相應(yīng)位。
在T2結(jié)束時刻,備份磁盤上保留了T1時刻VD中的完整數(shù)據(jù)。T1和T2時刻間發(fā)生的寫操作只作用在VD中的數(shù)據(jù)上,并不在備份磁盤上作記錄。在下一個備份過程中才會將這些改變記錄到備份磁盤上。備份磁盤上的鏡像在T1和T2時刻之間是不完整的,而在下一次ssd_workers線程啟動之前備份磁盤上的鏡像是完整的。該方法實(shí)現(xiàn)起來較為簡單,不需要額外的硬件設(shè)備,具有高效低成本的特點(diǎn)。
當(dāng)系統(tǒng)重啟時,數(shù)據(jù)恢復(fù)過程如下虛擬內(nèi)存盤從備份磁盤的第0個扇區(qū)開始,按順序依次讀入trunk大小的數(shù)據(jù)并放入VD的對應(yīng)的數(shù)據(jù)塊中。這樣,就實(shí)現(xiàn)了虛擬內(nèi)存盤的可重入性。
結(jié)合附圖,本發(fā)明詳述如下1.硬件設(shè)備與網(wǎng)絡(luò)本發(fā)明所需的硬件設(shè)備包括前端主機(jī)、I/O節(jié)點(diǎn)、大容量SDRAM和備份磁盤;網(wǎng)絡(luò)包括光纖網(wǎng)絡(luò)及以太網(wǎng)絡(luò)。其中,光纖網(wǎng)絡(luò)由光纖交換機(jī)連接前端主機(jī)、I/O節(jié)點(diǎn),進(jìn)行數(shù)據(jù)傳輸;以太網(wǎng)絡(luò)由以太交換機(jī)連接I/O節(jié)點(diǎn)進(jìn)行配置管理。大容量SDRAM在I/O節(jié)點(diǎn)機(jī)上,通過模擬磁盤的讀寫行為供前端主機(jī)使用以實(shí)現(xiàn)SSD。本系統(tǒng)在32位模式下最大可以支持64GB的SSD。I/O節(jié)點(diǎn)運(yùn)行經(jīng)改造的Linux操作系統(tǒng)(2.4.18以上內(nèi)核),前端主機(jī)為任何主流操作系統(tǒng),包括Linux、Windows及Solaris。
2.系統(tǒng)加載1)I/O節(jié)點(diǎn)機(jī)的Linux啟動I/O節(jié)點(diǎn)機(jī)利用內(nèi)存模擬硬盤實(shí)現(xiàn)虛擬內(nèi)存盤的目標(biāo)機(jī)。
在I/O節(jié)點(diǎn)機(jī)上運(yùn)行的Linux為修改系統(tǒng)啟動代碼的嵌入式Linux系統(tǒng)。在系統(tǒng)啟動時,當(dāng)運(yùn)行到內(nèi)存空間探測及內(nèi)存初始化時,只將少量內(nèi)存交給操作系統(tǒng)管理以維持系統(tǒng)運(yùn)行所需的物理內(nèi)存,保留大量高端物理內(nèi)存交由虛擬內(nèi)存盤管理。其結(jié)果保存在e820結(jié)構(gòu)中。e820為Linux內(nèi)存管理的一個核心數(shù)據(jù)結(jié)構(gòu),它以分段的方式提供給系統(tǒng)所有的物理內(nèi)存,每個段的內(nèi)存具有相同的屬性。在實(shí)現(xiàn)中,我們將保留給虛擬內(nèi)存盤的內(nèi)存標(biāo)記為“虛擬盤”,這樣就實(shí)現(xiàn)了保留的目的。
2)加載內(nèi)核模塊th_scsi_target.o,初始化虛擬內(nèi)存盤。
內(nèi)核模塊th_scsi_target.o該模塊是虛擬內(nèi)存盤的主模塊。它具有兩個功能初始化I/O節(jié)點(diǎn)機(jī)及處理I./O命令。該模塊依次完成以下功能1.根據(jù)Linux啟動時創(chuàng)建的e820map中的信息對內(nèi)存池中地址不連續(xù)的內(nèi)存塊映射為連續(xù)的虛擬磁盤地址空間,再將該空間按照塊進(jìn)行劃分以便于管理,利用位圖記錄每一個快的使用情況。
2.啟動內(nèi)核線程ssd_read_write完成各種讀寫命令。該線程符合iSCSI協(xié)議規(guī)范,從協(xié)議數(shù)據(jù)包中截取命令,然后對虛擬內(nèi)存盤中相應(yīng)的數(shù)據(jù)塊進(jìn)行讀寫操作,然后從iSCSI協(xié)議返回。
3.基于快照和寫時拷貝的異步備份,它定時將虛擬內(nèi)存盤的已更改的數(shù)據(jù)寫入備份磁盤。其過程如下1.在虛擬內(nèi)存盤加載時啟動線程ssd_works。該線程定時對虛擬內(nèi)存盤的位圖進(jìn)行掃描,并根據(jù)位圖各個位的不同狀態(tài)進(jìn)行不同的操作2.對X狀態(tài)的內(nèi)存塊,調(diào)用Linux底層讀寫函數(shù)scsi_do_req將該塊寫入硬盤,并在回調(diào)函數(shù)中將位圖中該塊對應(yīng)的狀態(tài)改為CLEAN;3.對O狀態(tài)的塊,只需在位圖中將該塊對應(yīng)的狀態(tài)改為X;4.對OX狀態(tài)的塊,其數(shù)據(jù)存放在new_dirty_list表,調(diào)用Linux底層讀寫函數(shù)scsi_do_req將其寫入備份磁盤并將位圖對應(yīng)的塊的狀態(tài)改為X。
權(quán)利要求
1.基于虛擬內(nèi)存盤的備份與恢復(fù)方法,其特這在于,所述方法依次含有以下步驟步驟(1)在存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)之上設(shè)置虛擬內(nèi)存盤模塊SSD_VD,把該存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)的內(nèi)存和備份磁盤虛擬成一個對上層應(yīng)用透明的內(nèi)存池,該模塊把該內(nèi)存池中的虛擬內(nèi)存盤VD劃分成為一數(shù)據(jù)塊為單位的數(shù)組并標(biāo)志記號,使用下述位圖中的各個位表示相應(yīng)數(shù)據(jù)塊的狀態(tài)變化情況數(shù)據(jù)塊X指僅在掃描開始時刻T1之前被寫操作訪問的數(shù)據(jù)塊,在該數(shù)據(jù)塊的塊號前端用位01標(biāo)志;數(shù)據(jù)塊O僅在掃描開始時刻T1和掃描結(jié)束時刻T2之間被寫操作訪問的數(shù)據(jù)塊;在該數(shù)據(jù)塊的塊號前端用位10表示;數(shù)據(jù)塊OX指在T1之前已經(jīng)被寫操作訪問,時刻T1到T2之間又被寫操作訪問的數(shù)據(jù)塊,在該數(shù)據(jù)塊的塊號前端用位11表示;數(shù)據(jù)塊CLEAN到T2仍未被寫操作訪問的數(shù)據(jù)塊,在該數(shù)據(jù)塊的塊號前端用位00表示在該虛擬內(nèi)存盤VD中,還設(shè)有寫時拷貝表COW,用于存放備份過程開始后在VD的未掃描位置有寫操作訪問請求的數(shù)據(jù)塊,但在該未被掃描位置的原有內(nèi)容是數(shù)據(jù)塊X;備份數(shù)據(jù)鏈表new_dirty_list,用于存放備份過程開始后在VD未掃描位置有寫訪問請求的數(shù)據(jù)塊;小型計算機(jī)系統(tǒng)接口模塊TH_SSD_SCSI,與虛擬內(nèi)存模塊相連,負(fù)責(zé)處理讀寫命令;主機(jī)模塊,與虛擬內(nèi)存模塊相連,為該存儲網(wǎng)絡(luò)控制端節(jié)點(diǎn)與管理主機(jī)的接口;步驟(2)所述方法由虛擬內(nèi)存盤模塊按照以下步驟實(shí)現(xiàn)備份操作步驟(2.1)在T1時刻啟動異步備份線程ssd_workers,掃描所有數(shù)據(jù)塊,把標(biāo)記為X的數(shù)據(jù)塊寫入至備份磁盤的相應(yīng)位置;步驟(2.2)在時刻T1至該線程ssd_workers處理結(jié)束時刻T2間,該網(wǎng)絡(luò)存儲控制端節(jié)點(diǎn)小型計算機(jī)接口模塊上I/O處理線程收到寫命令按照以下情況分別處理(a)若寫入位置在線程ssd_workers當(dāng)前處理到的數(shù)據(jù)塊指針curr之前,說明指針curr指向了該線程ssd_workers已處理完成的區(qū)域,直接設(shè)置該數(shù)據(jù)塊位圖對應(yīng)的標(biāo)志位以便在下一次線程ssd_workers啟動時作為標(biāo)志為X的數(shù)據(jù)塊處理;(b)若寫入位置在指針curr之后,則按照以下情況分別處理若指向了原來為非O而為X的數(shù)據(jù)塊,只需將該數(shù)據(jù)塊的塊號記錄在new_dirty_list表中,不設(shè)置相應(yīng)的標(biāo)志位;若指向了原來在T1時刻已經(jīng)被寫操作訪問過,在T1與T2之間又被寫操作訪問的數(shù)據(jù)塊X,則把該數(shù)據(jù)塊的標(biāo)志位清空,把該塊內(nèi)容和塊號記錄在COW鏈表中,再把寫入O類數(shù)據(jù)的內(nèi)容直接寫入虛擬內(nèi)存盤VD,將塊號記錄在new_dirty_list表中;步驟(2.3)在T2時刻,所有數(shù)據(jù)塊已遍歷掃描,鎖定虛擬內(nèi)存盤VD,標(biāo)記new_dirty_list表中所有數(shù)據(jù)塊在位圖中的相應(yīng)位,并清空該鏈表,解鎖虛擬內(nèi)存盤VD;最后將COW表中所有數(shù)據(jù)塊寫入備份磁盤相應(yīng)位置,ssd_workers線程休眠;步驟(2.4)對于以后進(jìn)入VD的數(shù)據(jù)塊,只標(biāo)記相應(yīng)的位;步驟(3)虛擬內(nèi)存盤模塊按以下方式進(jìn)行數(shù)據(jù)恢復(fù)從備份磁盤的第0個扇區(qū)開始,按順序依次讀入數(shù)據(jù)塊大小的數(shù)據(jù)并放入VD對應(yīng)的數(shù)據(jù)塊中;
2.根據(jù)
權(quán)利要求
所述的基于虛擬內(nèi)存盤的備份與恢復(fù)方法其特征在于,異步掃描線程是每隔固定的時間間隔被系統(tǒng)時鐘喚醒,或在被待寫數(shù)據(jù)塊的數(shù)目達(dá)到閾值而被小型計算機(jī)接口模塊喚醒。
全文摘要
本發(fā)明屬于存儲區(qū)域網(wǎng)絡(luò)領(lǐng)域,其特征在于快照和寫時拷貝的異步鏡像策略,用位圖來標(biāo)志虛擬內(nèi)存盤模塊中各數(shù)據(jù)塊的狀態(tài),在異步掃描線程控制下,實(shí)現(xiàn)了內(nèi)存的備份與恢復(fù)。本發(fā)明減少了在系統(tǒng)掉電后向磁盤同步數(shù)據(jù)所花費(fèi)的大量時間,對于數(shù)據(jù)一致性的保證和數(shù)據(jù)恢復(fù)的支持好,并具有成本低,可移植性好等優(yōu)勢。
文檔編號G06F9/46GK1955939SQ20061011370
公開日2007年5月2日 申請日期2006年10月13日 優(yōu)先權(quán)日2006年10月13日
發(fā)明者舒繼武, 薛巍, 于冰, 劉坤, 鄭緯民 申請人:清華大學(xué)