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