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