基于快照在線回滾的數(shù)據(jù)備份與恢復的方法及裝置的制造方法
【專利摘要】本發(fā)明公開了一種基于快照在線回滾的數(shù)據(jù)備份與恢復的方法及裝置,用戶創(chuàng)建快照時,將源卷按塊級進行劃分編址,并分配一個COW元數(shù)據(jù)集用于記錄源卷的COW信息;當接收到快照回滾的指令,先通知快照代理進行刷臟處理,完成后通知快照模塊,啟動后臺數(shù)據(jù)回滾線程;后臺回滾線程根據(jù)元數(shù)據(jù)集的COW信息,將快照卷上的數(shù)據(jù)拷貝到源卷;當回滾過程中源卷有讀寫請求時,需要根據(jù)讀寫源卷的數(shù)據(jù)塊編號是否做過COW和當前的回滾進度,進行重定向讀取和延遲寫入。本發(fā)明可以實現(xiàn)源卷某個時間點的數(shù)據(jù)備份,通過提供的在線回滾技術(shù),不需要中斷源卷的數(shù)據(jù)訪問,從而可以使源卷上的數(shù)據(jù)迅速恢復到可用的快照時間點給主機應(yīng)用提供服務(wù)。
【專利說明】
基于快照在線回滾的數(shù)據(jù)備份與恢復的方法及裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及一種基于快照在線回滾的數(shù)據(jù)備份與恢復的方法及裝置,屬于存儲容災(zāi)和備份技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]隨著計算機技術(shù)的快速發(fā)展,數(shù)字化信息已經(jīng)逐步取代紙質(zhì)媒體,呈現(xiàn)快速增長的態(tài)勢。海量數(shù)據(jù)催生了云計算、大數(shù)據(jù)和海量存儲系統(tǒng)的發(fā)展,對存儲設(shè)備和數(shù)據(jù)的可靠性、安全性的需求也越來越高。在一些對數(shù)據(jù)安全性和業(yè)務(wù)連續(xù)性有著較高的要求的行業(yè),如政府、銀行證券、電力、通訊等,必須要求存儲系統(tǒng)提供在線的數(shù)據(jù)保護。
[0003]快照(Snapshot)是一種防止存儲設(shè)備數(shù)據(jù)丟失和破壞的有效方法,能夠快速的實現(xiàn)在線數(shù)據(jù)的備份和恢復。幾乎所有的高中低端存儲系統(tǒng),快照都是一個不可或缺的標配功能??煺漳軐υ诰€數(shù)據(jù)提供按需的備份和恢復,當存儲設(shè)備發(fā)生應(yīng)用故障或文件損壞時可進行快速數(shù)據(jù)恢復,從而將數(shù)據(jù)恢復到某個可用的時間點狀態(tài)。除了備份恢復的功能,快照還為存儲用戶提供了一個數(shù)據(jù)訪問通道,當原數(shù)據(jù)進行在線應(yīng)用處理時,用戶可以訪問快照數(shù)據(jù),可以對快照數(shù)據(jù)進行測試、數(shù)據(jù)挖掘等工作。
[0004]寫前拷貝(Copy On fcite’COW)是快照最常用的一種實現(xiàn)技術(shù),即在第一次向源卷寫入數(shù)據(jù)或更新數(shù)據(jù)時,先檢查對應(yīng)的數(shù)據(jù)塊是否已經(jīng)做過C0W,如果還沒有,則先將源卷上該數(shù)據(jù)塊地址上的數(shù)據(jù)拷貝到快照空間,然后再將新的數(shù)據(jù)寫入。如圖1所示,快照空間本身也是存儲資源的一部分,用于存放源卷中需要被修改的原數(shù)據(jù)。
[0005]出于某些原因,例如系統(tǒng)遭受病毒入侵,文件被破壞,需要將源卷還原到某個可用的時間點的數(shù)據(jù)時,就需要使用快照回滾的功能,即將快照卷上的數(shù)據(jù)回寫到源卷。通常在回滾的過程中,源卷是無法對外提供服務(wù)的。而回滾的時間長短取決于快照創(chuàng)建之后源卷的數(shù)據(jù)變化量,如果數(shù)據(jù)變化很大,那么回滾的過程可能需要很長。RT0(ReCOVery TimeObjective,復原時間目標,即系統(tǒng)可容許中斷的時間長度)是存儲產(chǎn)品一個非常重要的指標,理論上這個時間越短越好。本發(fā)明的目的就是提供一種在線回滾的方法,當發(fā)起快照回滾時,源卷不需要或僅僅需要很短的時間即可提供讀寫服務(wù)。
【發(fā)明內(nèi)容】
[0006]發(fā)明目的:在需要將源卷恢復到某個快照時間點的數(shù)據(jù),通常的做法是主機先停止源卷的數(shù)據(jù)訪問,然后將快照卷上的數(shù)據(jù)回寫到源卷,等快照卷上的所有數(shù)據(jù)拷貝完成,才通知主機放開源卷的數(shù)據(jù)訪問,源卷中斷服務(wù)的時間取決于源卷在創(chuàng)建快照的時間點到快照回滾時間點之間的數(shù)據(jù)變化量,變化量越大,源卷中斷的時間就越長。本發(fā)明針對這個缺陷提供一種基于快照在線回滾的數(shù)據(jù)備份方法和裝置,使源卷在快照回滾期間仍然能夠正常進行數(shù)據(jù)讀寫和備份,無需中斷業(yè)務(wù)。
[0007]技術(shù)方案:一種基于快照在線回滾的數(shù)據(jù)備份與恢復的方法,具體實現(xiàn)方案如下:
[0008]當用戶創(chuàng)建快照時,將源卷按塊級進行劃分編址,并給創(chuàng)建的快照分配一個COW元數(shù)據(jù)集,每一個元數(shù)據(jù)代表源卷的一個數(shù)據(jù)塊,元數(shù)據(jù)集按源卷數(shù)據(jù)塊編號進行排序,所述的數(shù)據(jù)塊為快照數(shù)據(jù)訪問的基本單位。當?shù)谝淮螌υ淳淼哪硞€數(shù)據(jù)塊進行寫入時,需要對該數(shù)據(jù)塊執(zhí)行COW操作,即先將源卷上老的數(shù)據(jù)拷貝到快照空間,所述的快照空間為存儲資源的一部分,在源卷啟用快照時進行預留,空間的大小可以隨意擴展,以便當源卷數(shù)據(jù)變化量大時能進行擴充。源卷上老的數(shù)據(jù)拷貝到快照空間后,生成一個元數(shù)據(jù),由源卷的數(shù)據(jù)塊編號、快照空間的數(shù)據(jù)塊編號和數(shù)據(jù)寫入時間三部分信息構(gòu)成。后續(xù)對源卷的同一個數(shù)據(jù)塊寫入時就不需要再執(zhí)行COW操作。所有做過COW的元數(shù)據(jù)組成了快照的元數(shù)據(jù)集。
[0009]當接收到快照回滾的指令后,先通知快照代理進行刷臟處理,所述的快照代理屬于存儲系統(tǒng)的一部分,安裝在主機操作系統(tǒng)上,作用是在創(chuàng)建快照、快照回滾時將主機系統(tǒng)緩存中的數(shù)據(jù)寫入磁盤,這個操作過程叫刷臟,因為通常操作系統(tǒng)會預留一定的緩存空間,用戶的部分數(shù)據(jù)是直接寫到系統(tǒng)緩存中,而這部分數(shù)據(jù)可能還是創(chuàng)建或回滾快照時間點之前的數(shù)據(jù),快照代理的目的就是保證快照出來的數(shù)據(jù)與用戶所期望的時間點的數(shù)據(jù)一致??煺沾硭⑴K完成后通知快照模塊,后臺啟動回滾線程,即通知用戶快照回滾成功,用戶即可立即對源卷進行數(shù)據(jù)訪問。
[0010]后臺回滾線程,先獲取快照的COW元數(shù)據(jù)集,按源卷數(shù)據(jù)塊的順序讀取每一個元數(shù)據(jù),對于做過COW的源卷數(shù)據(jù)塊,先判斷數(shù)據(jù)寫入時間和快照回滾時間,如果晚于快照回滾時間,則不需要進行數(shù)據(jù)拷貝。否則按照元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號,從快照空間讀取數(shù)據(jù),并寫入元數(shù)據(jù)中保存的源卷數(shù)據(jù)塊編號對應(yīng)的源卷空間。執(zhí)行完當前數(shù)據(jù)塊的數(shù)據(jù)回寫,則從COW元數(shù)據(jù)集中取出下一個元數(shù)據(jù)對象,直到遍歷完快照COW元數(shù)據(jù)集的所有元數(shù)據(jù)對象。每執(zhí)行完一個數(shù)據(jù)塊的數(shù)據(jù)回寫,則以當前數(shù)據(jù)塊作為快照回滾的進度。[0011 ]當回滾過程中源卷有讀數(shù)據(jù)請求時,根據(jù)讀源卷的數(shù)據(jù)塊編號,查找快照的COW元數(shù)據(jù)集,如果對應(yīng)的數(shù)據(jù)塊未做過C0W,或者數(shù)據(jù)塊編號小于回滾進度,則直接從源卷上讀取。否則根據(jù)元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號,從快照空間讀取數(shù)據(jù)。如果元數(shù)據(jù)集中不存在該數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)對象,則表示數(shù)據(jù)還在源卷上,直接從源卷上讀取即可。如果需要讀取的數(shù)據(jù)包含多個數(shù)據(jù)塊,則需要對每個數(shù)據(jù)塊進行判斷,等所有數(shù)據(jù)塊從快照空間或源卷讀取完成后進行合并。
[0012]當回滾過程中源卷有寫入數(shù)據(jù)請求時,根據(jù)寫入源卷的數(shù)據(jù)塊編號,查找快照的COW元數(shù)據(jù)集,如果對應(yīng)的數(shù)據(jù)塊已經(jīng)做過C0W,而且待寫入的數(shù)據(jù)塊編號小于回滾進度,則數(shù)據(jù)可以直接寫入源卷;否則先對該數(shù)據(jù)塊進行數(shù)據(jù)回滾,然后再將待寫入的數(shù)據(jù)寫入源卷,并更新元數(shù)據(jù)對象中數(shù)據(jù)寫入時間為系統(tǒng)當前時間。如果待寫入源卷的數(shù)據(jù)塊編號未做過C0W,則直接對該數(shù)據(jù)塊執(zhí)行快照C0W,并生成一條新的COW元數(shù)據(jù)對象,更新元數(shù)據(jù)對象中源卷數(shù)據(jù)塊編號和快照空間數(shù)據(jù)塊編號,數(shù)據(jù)寫入的時間為系統(tǒng)當前時間。
[0013]基于快照在線回滾的數(shù)據(jù)備份與恢復的裝置,包括:
[0014]快照配置處理模塊,對快照空間進行分配和管理,處理用戶的創(chuàng)建快照、刪除快照以及快照信息更改的請求。創(chuàng)建快照時,為快照建立數(shù)據(jù)區(qū),分配快照唯一標識和記錄創(chuàng)建快照時間,建立該快照的COW元數(shù)據(jù)集,初始為空。刪除快照時,如果當前存在快照回滾的任務(wù),則提示用戶需要等快照回滾任務(wù)完成或者停止快照回滾任務(wù),否則直接清除創(chuàng)建快照時建立的相關(guān)數(shù)據(jù)區(qū)。
[0015]快照回滾處理模塊,處理用戶的快照回滾命令,啟動后臺數(shù)據(jù)回寫線程,建立回滾數(shù)據(jù)區(qū),記錄回滾的進度、回滾啟動時間和結(jié)束時間。同時也能處理用戶停止、暫停回滾任務(wù)的命令。
[0016]源卷數(shù)據(jù)讀寫處理模塊,接收主機對源卷的數(shù)據(jù)讀寫請求。對于數(shù)據(jù)寫入需要根據(jù)快照的元數(shù)據(jù)集來判斷是否需要執(zhí)行C0W,如果快照正在執(zhí)行數(shù)據(jù)回滾,則還需要根據(jù)回滾進度來決定是否需要先執(zhí)行數(shù)據(jù)回寫。對于讀源卷請求,如果快照正在執(zhí)行數(shù)據(jù)回滾,則還需要根據(jù)讀源卷的數(shù)據(jù)塊是否做過COW來決定數(shù)據(jù)是從快照空間讀取還是源卷上讀取。如果快照未在回滾進程,則數(shù)據(jù)直接從源卷上讀取。
[0017]快照讀處理模塊,接收主機對快照的讀數(shù)據(jù)請求。根據(jù)讀請求的數(shù)據(jù)塊編號,查找快照的COW元數(shù)據(jù)集,如果對應(yīng)的數(shù)據(jù)塊已經(jīng)做過C0W,則根據(jù)元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號,從快照空間讀取數(shù)據(jù)。如果元數(shù)據(jù)集中不存在該數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)對象,則表示數(shù)據(jù)還在源卷上,直接從源卷上讀取。如果需要讀取的數(shù)據(jù)包含多個數(shù)據(jù)塊,則需要對每個數(shù)據(jù)塊進行判斷,等所有數(shù)據(jù)塊從快照空間或源卷讀取完成后進行合并,向主機應(yīng)答合并后的數(shù)據(jù)。
【附圖說明】
[0018]圖1為本發(fā)明所適用的存儲系統(tǒng)結(jié)構(gòu)圖;
[0019]圖2為本發(fā)明所述的快照回滾流程;
[0020]圖3為本發(fā)明所述的后臺回滾線程的數(shù)據(jù)回寫流程;
[0021 ]圖4為本發(fā)明實施例快照回滾期間的源卷讀流程;
[0022]圖5為本發(fā)明實施例快照回滾期間的未做過COW的數(shù)據(jù)塊源卷寫流程;
[0023]圖6為本發(fā)明實施例快照回滾期間的做過COW且大于回滾進度的數(shù)據(jù)塊源卷寫流程。
【具體實施方式】
[0024]下面結(jié)合具體實施例,進一步闡明本發(fā)明,應(yīng)理解這些實施例僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍,在閱讀了本發(fā)明之后,本領(lǐng)域技術(shù)人員對本發(fā)明的各種等價形式的修改均落于本申請所附權(quán)利要求所限定的范圍。
[0025]圖1為本發(fā)明實施例所適用的存儲系統(tǒng)結(jié)構(gòu)示意圖,包括主機和存儲設(shè)備,主機包含I/O數(shù)據(jù)業(yè)務(wù)主機和存儲系統(tǒng)管理主機。其中I/O數(shù)據(jù)業(yè)務(wù)主機可以包括多個數(shù)據(jù)業(yè)務(wù)應(yīng)用和快照代理,數(shù)據(jù)業(yè)務(wù)應(yīng)用如數(shù)據(jù)庫等。快照代理用于和存儲設(shè)備相結(jié)合創(chuàng)建快照和快照回滾。存儲設(shè)備包括存儲控制器和存儲空間、高速緩存器等。存儲控制器用于控制數(shù)據(jù)的存儲和實現(xiàn)數(shù)據(jù)的快照功能,存儲空間包含源卷存儲空間和快照存儲空間,前者用于存儲源卷當前的數(shù)據(jù),后者是系統(tǒng)為快照預留的存儲空間,存儲空間的物理介質(zhì)通常為硬盤、磁盤等。圖1所示只是存儲系統(tǒng)的一種結(jié)構(gòu)示意圖,實際的存儲系統(tǒng)可以有更多的主機或多個存儲設(shè)備,多個主機組成了應(yīng)用系統(tǒng)。
[0026]當用戶創(chuàng)建快照時,將源卷按塊級進行劃分編址,并給創(chuàng)建的快照分配一個COW元數(shù)據(jù)集,每一個元數(shù)據(jù)代表源卷的一個數(shù)據(jù)塊,元數(shù)據(jù)集按源卷數(shù)據(jù)塊編號進行排序,所述的數(shù)據(jù)塊為快照數(shù)據(jù)訪問的基本單位。當?shù)谝淮螌υ淳淼哪硞€數(shù)據(jù)塊進行寫入時,需要對該數(shù)據(jù)塊執(zhí)行COW操作,即先將源卷上老的數(shù)據(jù)拷貝到快照空間,所述的快照空間為存儲資源的一部分,在源卷啟用快照時進行預留,空間的大小可以隨意擴展,以便當源卷數(shù)據(jù)變化量大時能進行擴充。源卷上老的數(shù)據(jù)拷貝到快照空間后,生成一個元數(shù)據(jù),由源卷的數(shù)據(jù)塊編號、快照空間的數(shù)據(jù)塊編號和數(shù)據(jù)寫入時間三部分信息構(gòu)成。后續(xù)對源卷的同一個數(shù)據(jù)塊寫入時就不需要再執(zhí)行COW操作。所有做過COW的元數(shù)據(jù)組成了快照的元數(shù)據(jù)集。
[0027]現(xiàn)有的快照回滾技術(shù),都需要在回滾期間暫停源卷上的數(shù)據(jù)業(yè)務(wù),而暫停的時間長短取決于快照創(chuàng)建之后源卷的數(shù)據(jù)變化量,如果數(shù)據(jù)變化很大,那么回滾的過程可能需要很長。RT0(Recovery Time Objective,復原時間目標,即系統(tǒng)可容許中斷的時間長度)是存儲產(chǎn)品一個非常重要的指標,理論上這個時間越短越好。為了解決上述現(xiàn)有技術(shù)的問題,本發(fā)明的幾個實施例提供快照在線回滾的技術(shù),在快照回滾期間,源卷不需要暫停業(yè)務(wù)即可提供數(shù)據(jù)讀寫的服務(wù)。結(jié)合圖2和圖3說明快照在線回滾的流程。
[0028]存儲設(shè)備接收到管理主機的快照回滾的指令后,先通知I/O主機上的快照代理進行刷臟處理,將應(yīng)用系統(tǒng)中的緩存數(shù)據(jù)寫入磁盤,刷臟完成后通知存儲設(shè)備的快照模塊,后臺啟動回滾線程,初始化回滾數(shù)據(jù)區(qū),所述的數(shù)據(jù)區(qū)主要是記錄回滾的進度和回滾啟動時間,其中回滾進度表示哪些數(shù)據(jù)塊已經(jīng)完成從快照空間到源卷的數(shù)據(jù)回寫;回滾啟動時間,用來判斷源卷的數(shù)據(jù)塊是否需要進行數(shù)據(jù)回寫。完成數(shù)據(jù)區(qū)初始化后,用戶即可立即對源卷進行數(shù)據(jù)訪問。
[0029]圖3所示為快照回滾的后臺處理線程,其中progressDn代表回滾進度,表示ProgressDn之前的數(shù)據(jù)塊已經(jīng)完成數(shù)據(jù)回寫。StartTime表示回滾任務(wù)啟動的時間。先獲取快照的COW元數(shù)據(jù)集,按源卷數(shù)據(jù)塊的順序讀取每一個元數(shù)據(jù),所述的元數(shù)據(jù)由源卷的數(shù)據(jù)塊編號、快照空間的數(shù)據(jù)塊編號和數(shù)據(jù)寫入時間三部分信息構(gòu)成。對于做過COW的源卷數(shù)據(jù)塊,Dx代表源卷數(shù)據(jù)塊編號,dx代表源卷Dx數(shù)據(jù)塊的快照數(shù)據(jù)在快照空間內(nèi)的數(shù)據(jù)塊編號,timex代表創(chuàng)建快照時間點之后,源卷Dx數(shù)據(jù)塊數(shù)據(jù)更改的時間。后臺回滾線程讀取某一個元數(shù)據(jù),先判斷數(shù)據(jù)更改時間timex和快照回滾時間startTime,如果timex大于startTime,表示已經(jīng)在別的流程中先完成了數(shù)據(jù)回寫或者Dx數(shù)據(jù)塊是在回滾期間改變的,則跳過該數(shù)據(jù)塊,從元數(shù)據(jù)集取下一個元數(shù)據(jù)對象。否則按照元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號dx,從快照空間讀取數(shù)據(jù),并寫入源卷數(shù)據(jù)塊編號Dx對應(yīng)的源卷空間。執(zhí)行完當前數(shù)據(jù)塊的數(shù)據(jù)回寫,則從COW元數(shù)據(jù)集中取出下一個元數(shù)據(jù)對象,直到遍歷完快照COW元數(shù)據(jù)集的所有元數(shù)據(jù)對象。每執(zhí)行完一個數(shù)據(jù)塊的數(shù)據(jù)回寫,則以當前數(shù)據(jù)塊作為快照回滾的進度ProgressDn0
[0030]在回滾期間,I/O數(shù)據(jù)業(yè)務(wù)主機上的應(yīng)用對源卷發(fā)起讀數(shù)據(jù)請求時,如圖4所示,需要讀取源卷上D2和D3數(shù)據(jù)塊,元數(shù)據(jù)集中不存在D2對應(yīng)的元數(shù)據(jù)對象,表示創(chuàng)建快照后,D2的數(shù)據(jù)塊未發(fā)生改變,則數(shù)據(jù)直接從源卷上讀取;元數(shù)據(jù)集中存在D3數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)對象,并且其快照數(shù)據(jù)存放在d8對應(yīng)的快照存儲空間。如果time3小于快照回滾任務(wù)啟動時間StartTime,則數(shù)據(jù)從快照空間讀取,如圖4的實線所示,否則直接從源卷讀取,如圖4的虛線所示。兩部分數(shù)據(jù)都讀取完成后,按照讀數(shù)據(jù)請求的大小進行合并后,返回給應(yīng)用,完成快照回滾期間的源卷讀請求。
[0031]在快照回滾期間,I/O數(shù)據(jù)業(yè)務(wù)主機上的應(yīng)用對源卷發(fā)起寫數(shù)據(jù)請求時,如圖5所示,步驟501主機對源卷D2數(shù)據(jù)塊發(fā)起寫入請求D2',元數(shù)據(jù)集中不存在D2對應(yīng)的元數(shù)據(jù)對象,表示創(chuàng)建快照后,D2的數(shù)據(jù)塊第一次發(fā)生改變,需要將源卷D2數(shù)據(jù)塊對應(yīng)的老數(shù)據(jù)D2先拷貝到快照空間,首先從快照空間分配一個新的數(shù)據(jù)塊d2,然后執(zhí)行步驟502,將D2拷貝到快照空間,拷貝完成后,執(zhí)行步驟503,將新的數(shù)據(jù)寫入源卷D2數(shù)據(jù)塊,寫入完成后,生成一個新的元數(shù)據(jù)對象,源卷數(shù)據(jù)塊編號為D2,快照空間編號為d2,數(shù)據(jù)寫入時間為time2,執(zhí)行步驟504將新的元數(shù)據(jù)對象插入快照的元數(shù)據(jù)集,如圖5虛線框?qū)?yīng)的元數(shù)據(jù)對象。
[0032]圖5所示為D2數(shù)據(jù)塊未做過COW的情況,還有一種情況是D2已經(jīng)做過C0W,如圖6所示,步驟601,tim3'時刻,主機應(yīng)用要將源卷的數(shù)據(jù)塊D3數(shù)據(jù)更改為D3',快照元數(shù)據(jù)集中已經(jīng)存在D3對應(yīng)的元數(shù)據(jù)對象,但此時快照的回滾進度progressDn為D2,小于D3,因此需要先執(zhí)行步驟602,將快照空間d8對應(yīng)的數(shù)據(jù)回寫到源卷的D3數(shù)據(jù)塊,然后執(zhí)行步驟603,將應(yīng)用新的數(shù)據(jù)D3'寫入源卷的D3數(shù)據(jù)塊,完成寫入后,將D3對應(yīng)的元數(shù)據(jù)對象的數(shù)據(jù)寫入時間修改為time3'。當回滾線程執(zhí)行到D3數(shù)據(jù)塊的回寫時,判斷time3'大于回滾任務(wù)啟動時間startT ime,則跳過該數(shù)據(jù)塊。
[0033]基于快照在線回滾的數(shù)據(jù)備份與恢復的裝置,包括:
[0034]快照配置處理模塊,對快照空間進行分配和管理,處理用戶的創(chuàng)建快照、刪除快照以及快照信息更改的請求。創(chuàng)建快照時,為快照建立數(shù)據(jù)區(qū),分配快照唯一標識和記錄創(chuàng)建快照時間,建立該快照的COW元數(shù)據(jù)集,初始為空。刪除快照時,如果當前存在快照回滾的任務(wù),則提示用戶需要等快照回滾任務(wù)完成或者停止快照回滾任務(wù),否則直接清除創(chuàng)建快照時建立的相關(guān)數(shù)據(jù)區(qū)。
[0035]快照回滾處理模塊,處理用戶的快照回滾命令,啟動后臺數(shù)據(jù)回寫線程,建立回滾數(shù)據(jù)區(qū),記錄回滾的進度、回滾啟動時間和結(jié)束時間。同時也能處理用戶停止、暫?;貪L任務(wù)的命令。
[0036]源卷數(shù)據(jù)讀寫處理模塊,接收主機對源卷的數(shù)據(jù)讀寫請求。對于數(shù)據(jù)寫入需要根據(jù)快照的元數(shù)據(jù)集來判斷是否需要執(zhí)行C0W,如果快照正在執(zhí)行數(shù)據(jù)回滾,則還需要根據(jù)回滾進度來決定是否需要先執(zhí)行數(shù)據(jù)回寫。對于讀源卷請求,如果快照正在執(zhí)行數(shù)據(jù)回滾,則還需要根據(jù)讀源卷的數(shù)據(jù)塊是否做過COW來決定數(shù)據(jù)是從快照空間讀取還是源卷上讀取。如果快照未在回滾進程,則數(shù)據(jù)直接從源卷上讀取。
[0037]快照讀處理模塊,接收主機對快照的讀數(shù)據(jù)請求。根據(jù)讀請求的數(shù)據(jù)塊編號,查找快照的COW元數(shù)據(jù)集,如果對應(yīng)的數(shù)據(jù)塊已經(jīng)做過C0W,則根據(jù)元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號,從快照空間讀取數(shù)據(jù)。如果元數(shù)據(jù)集中不存在該數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)對象,則表示數(shù)據(jù)還在源卷上,直接從源卷上讀取。如果需要讀取的數(shù)據(jù)包含多個數(shù)據(jù)塊,則需要對每個數(shù)據(jù)塊進行判斷,等所有數(shù)據(jù)塊從快照空間或源卷讀取完成后進行合并,向主機應(yīng)答合并后的數(shù)據(jù)。
[0038]依照本發(fā)明具體實施例,可以實現(xiàn)源卷某個時間點的數(shù)據(jù)備份,通過提供的在線回滾技術(shù),不需要中斷源卷的數(shù)據(jù)訪問,從而可以使源卷迅速恢復到可用的快照時間點給主機應(yīng)用提供服務(wù)。
【主權(quán)項】
1.一種基于快照在線回滾的數(shù)據(jù)備份與恢復的方法,其特征在于,具體實現(xiàn)方案如下:創(chuàng)建快照,將源卷按塊級進行劃分編址,并給創(chuàng)建的快照分配一個COW元數(shù)據(jù)集,每一個元數(shù)據(jù)代表源卷的一個數(shù)據(jù)塊,元數(shù)據(jù)集按源卷數(shù)據(jù)塊編號進行排序; 當接收到快照回滾的指令后,先通知快照代理進行刷臟處理,快照代理刷臟完成后通知快照模塊,后臺啟動回滾線程,即通知用戶快照回滾成功,用戶即可立即對源卷進行數(shù)據(jù)訪問; 后臺回滾線程,先獲取快照的COW元數(shù)據(jù)集,按源卷數(shù)據(jù)塊的順序讀取每一個元數(shù)據(jù),對于做過COW的源卷數(shù)據(jù)塊,先判斷數(shù)據(jù)寫入時間和快照回滾時間,如果晚于快照回滾時間,則不需要進行數(shù)據(jù)拷貝;否則按照元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號,從快照空間讀取數(shù)據(jù),并寫入元數(shù)據(jù)中保存的源卷數(shù)據(jù)塊編號對應(yīng)的源卷空間;執(zhí)行完當前數(shù)據(jù)塊的數(shù)據(jù)回寫,則從COW元數(shù)據(jù)集中取出下一個元數(shù)據(jù)對象,直到遍歷完快照COW元數(shù)據(jù)集的所有元數(shù)據(jù)對象;每執(zhí)行完一個數(shù)據(jù)塊的數(shù)據(jù)回寫,則以當前數(shù)據(jù)塊作為快照回滾的進度。2.如權(quán)利要求1所述的基于快照在線回滾的數(shù)據(jù)備份與恢復的方法,其特征在于,當回滾過程中源卷有讀數(shù)據(jù)請求時,根據(jù)讀源卷的數(shù)據(jù)塊編號,查找快照的COW元數(shù)據(jù)集,如果對應(yīng)的數(shù)據(jù)塊未做過C0W,或者數(shù)據(jù)塊編號小于回滾進度,則直接從源卷上讀取;否則根據(jù)元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號,從快照空間讀取數(shù)據(jù);如果元數(shù)據(jù)集中不存在該數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)對象,則表示數(shù)據(jù)還在源卷上,直接從源卷上讀取即可;如果需要讀取的數(shù)據(jù)包含多個數(shù)據(jù)塊,則需要對每個數(shù)據(jù)塊進行判斷,等所有數(shù)據(jù)塊從快照空間或源卷讀取完成后進彳T合并; 當回滾過程中源卷有寫入數(shù)據(jù)請求時,根據(jù)寫入源卷的數(shù)據(jù)塊編號,查找快照的COW元數(shù)據(jù)集,如果對應(yīng)的數(shù)據(jù)塊已經(jīng)做過C0W,而且待寫入的數(shù)據(jù)塊編號小于回滾進度,則數(shù)據(jù)可以直接寫入源卷;否則先對該數(shù)據(jù)塊進行數(shù)據(jù)回滾,然后再將待寫入的數(shù)據(jù)寫入源卷,并更新元數(shù)據(jù)對象中數(shù)據(jù)寫入時間為系統(tǒng)當前時間;如果待寫入源卷的數(shù)據(jù)塊編號未做過C0W,則直接對該數(shù)據(jù)塊執(zhí)行快照C0W,并生成一條新的COW元數(shù)據(jù)對象,更新元數(shù)據(jù)對象中源卷數(shù)據(jù)塊編號和快照空間數(shù)據(jù)塊編號,數(shù)據(jù)寫入的時間為系統(tǒng)當前時間。3.如權(quán)利要求1所述的基于快照在線回滾的數(shù)據(jù)備份與恢復的方法,其特征在于,當用戶創(chuàng)建快照時,將源卷按塊級進行劃分編址,并給創(chuàng)建的快照分配一個COW元數(shù)據(jù)集,每一個元數(shù)據(jù)代表源卷的一個數(shù)據(jù)塊,元數(shù)據(jù)集按源卷數(shù)據(jù)塊編號進行排序;當?shù)谝淮螌υ淳淼哪硞€數(shù)據(jù)塊進行寫入時,需要對該數(shù)據(jù)塊執(zhí)行COW操作,即先將源卷上老的數(shù)據(jù)拷貝到快照空間;源卷上老的數(shù)據(jù)拷貝到快照空間后,生成一個元數(shù)據(jù),由源卷的數(shù)據(jù)塊編號、快照空間的數(shù)據(jù)塊編號和數(shù)據(jù)寫入時間三部分信息構(gòu)成;后續(xù)對源卷的同一個數(shù)據(jù)塊寫入時就不需要再執(zhí)行COW操作;所有做過COW的元數(shù)據(jù)組成了快照的元數(shù)據(jù)集。4.一種基于快照在線回滾的數(shù)據(jù)備份與恢復的裝置,其特征在于,包括: 快照配置處理模塊,對快照空間進行分配和管理,處理用戶的創(chuàng)建快照、刪除快照以及快照信息更改的請求;創(chuàng)建快照時,為快照建立數(shù)據(jù)區(qū),分配快照唯一標識和記錄創(chuàng)建快照時間,建立該快照的COW元數(shù)據(jù)集,初始為空;刪除快照時,如果當前存在快照回滾的任務(wù),則提示用戶需要等快照回滾任務(wù)完成或者停止快照回滾任務(wù),否則直接清除創(chuàng)建快照時建立的相關(guān)數(shù)據(jù)區(qū); 快照回滾處理模塊,處理用戶的快照回滾命令,啟動后臺數(shù)據(jù)回寫線程,建立回滾數(shù)據(jù)區(qū),記錄回滾的進度、回滾啟動時間和結(jié)束時間;同時也能處理用戶停止、暫?;貪L任務(wù)的命令; 源卷數(shù)據(jù)讀寫處理模塊,接收主機對源卷的數(shù)據(jù)讀寫請求;對于數(shù)據(jù)寫入需要根據(jù)快照的元數(shù)據(jù)集來判斷是否需要執(zhí)行COW,如果快照正在執(zhí)行數(shù)據(jù)回滾,則還需要根據(jù)回滾進度來決定是否需要先執(zhí)行數(shù)據(jù)回寫;對于讀源卷請求,如果快照正在執(zhí)行數(shù)據(jù)回滾,則還需要根據(jù)讀源卷的數(shù)據(jù)塊是否做過COW來決定數(shù)據(jù)是從快照空間讀取還是源卷上讀取;如果快照未在回滾進程,則數(shù)據(jù)直接從源卷上讀?。?快照讀處理模塊,接收主機對快照的讀數(shù)據(jù)請求;根據(jù)讀請求的數(shù)據(jù)塊編號,查找快照的COW元數(shù)據(jù)集,如果對應(yīng)的數(shù)據(jù)塊已經(jīng)做過C0W,則根據(jù)元數(shù)據(jù)中保存的快照空間數(shù)據(jù)塊編號,從快照空間讀取數(shù)據(jù);如果元數(shù)據(jù)集中不存在該數(shù)據(jù)塊對應(yīng)的元數(shù)據(jù)對象,則表示數(shù)據(jù)還在源卷上,直接從源卷上讀??; 如果需要讀取的數(shù)據(jù)包含多個數(shù)據(jù)塊,則需要對每個數(shù)據(jù)塊進行判斷,等所有數(shù)據(jù)塊從快照空間或源卷讀取完成后進行合并,向主機應(yīng)答合并后的數(shù)據(jù)。
【文檔編號】G06F11/14GK106055431SQ201610368761
【公開日】2016年10月26日
【申請日】2016年5月30日
【發(fā)明人】陳飛, 陳哲, 王慧敏, 李臣明, 徐立中
【申請人】河海大學