專利名稱::一種多叉日志存儲的連續(xù)數(shù)據(jù)保護和恢復(fù)方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于計算機數(shù)據(jù)存儲和備份方法,具體涉及一種多叉日志存儲的連續(xù)數(shù)據(jù)保護和恢復(fù)方法。
背景技術(shù):
:數(shù)據(jù)的快速增長及數(shù)據(jù)的高可用性、安全性的要求刺激了存儲技術(shù)的發(fā)展,存儲技術(shù)已成為IT基礎(chǔ)架構(gòu)的一個關(guān)鍵因素,存儲網(wǎng)絡(luò)為海量存儲數(shù)據(jù)和共享數(shù)據(jù)提供了一個有效的硬件基礎(chǔ)。面對海量數(shù)據(jù),數(shù)據(jù)的保護和災(zāi)難恢復(fù)也越來越重要,而原有的數(shù)據(jù)保護方法,如磁帶備份,存在備份窗口大、恢復(fù)時間長、實時響應(yīng)差、影響正常業(yè)務(wù)等弊端,已經(jīng)無法滿足當(dāng)前的需求。使用磁盤的在線復(fù)制和數(shù)據(jù)冗余成為流行的數(shù)據(jù)保護技術(shù)。連續(xù)數(shù)據(jù)保護(ContinuousDataProtection,CDP)是一種在不影響主要數(shù)據(jù)運行的前提下,可以實現(xiàn)持續(xù)捕捉或跟蹤目標(biāo)數(shù)據(jù)所發(fā)生的任何改變,并且能夠恢復(fù)到此前任意時間點的方法。連續(xù)數(shù)據(jù)保護方法可以保護從某時刻開始的巻或者文件在此后的任意時刻的數(shù)據(jù)狀態(tài),也就是數(shù)據(jù)的每次改變,都會被無一遺漏地記錄下來。楊慶等提出一種連續(xù)數(shù)據(jù)保護和恢復(fù)方法,見QingYang,WeijunXiaoandJinRen."TRAP-Array:ADiskArrayArchitectureProvidingTimelyRecoverytoAnyPoint-in-time",InProceedingsofISCA:The33rdAnnualInternationalSymposiumonComputerArchitecture,Boston,USA,2006.但是這種連續(xù)數(shù)據(jù)保護和恢復(fù)方法只能將數(shù)據(jù)從較新的時間狀態(tài)恢復(fù)到較舊的時間狀態(tài),并且將數(shù)據(jù)恢復(fù)到某一時間狀態(tài)時不能再接受來自主機的數(shù)據(jù)更新操作。針對傳統(tǒng)連續(xù)數(shù)據(jù)保護和恢復(fù)方法中的缺點,提出多叉日志的塊級連續(xù)數(shù)據(jù)保護和恢復(fù)方法,能將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較老的時間狀態(tài)或者從較老的數(shù)據(jù)狀態(tài)恢復(fù)到較新的時間狀態(tài)的后,并能夠處理來自上層主機的寫操作,繼續(xù)對恢復(fù)后的源數(shù)據(jù)區(qū)進行數(shù)據(jù)更新操作并施加保護,以提供更加靈活的目標(biāo)恢復(fù)點。
發(fā)明內(nèi)容本發(fā)明提供一種多叉日志存儲的連續(xù)數(shù)據(jù)保護和恢復(fù)方法,解決現(xiàn)有連續(xù)數(shù)據(jù)保護和恢復(fù)方法將數(shù)據(jù)恢復(fù)到某一時間狀態(tài)時,不能再接受來自主機的數(shù)據(jù)更新操作的問題。本發(fā)明的一種多叉日志的塊級連續(xù)數(shù)據(jù)保護和恢復(fù)方法,包括(1)初始化步驟;把存儲空間劃分為源數(shù)據(jù)區(qū)和連續(xù)數(shù)據(jù)保護區(qū),需要保護的備份數(shù)據(jù)位于源數(shù)據(jù)區(qū),連續(xù)數(shù)據(jù)保護區(qū)用于在寫操作到來時,存放源數(shù)據(jù)區(qū)的原始數(shù)據(jù),連續(xù)數(shù)據(jù)保護區(qū)的大小為存儲空間的50%75%;初始化由連續(xù)數(shù)據(jù)保護項鏈表和回滾鏈表組成的連續(xù)數(shù)據(jù)表,同時建立一個連續(xù)數(shù)據(jù)保護項作為當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項,并初始化其所有字段,將該連續(xù)數(shù)據(jù)保護項加入連續(xù)數(shù)據(jù)保護項鏈表中;把源數(shù)據(jù)區(qū)劃分為原子數(shù)據(jù)塊,原子數(shù)據(jù)塊大小為2K、4K、8K、16K或32K中的一種;(2)判斷用戶命令步驟;判斷用戶命令是進行寫操作還是恢復(fù)操作,寫操作順序進行;恢復(fù)操作轉(zhuǎn)步驟(6);(3)判斷是否進行過回滾操作步驟;判斷當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項是否進行過回滾操作,是則轉(zhuǎn)步驟(5),否則順序進行;(4)第一類處理寫操作步驟;獲取當(dāng)前系統(tǒng)時間,采用流水線策略將從源數(shù)據(jù)區(qū)向連續(xù)數(shù)據(jù)保護區(qū)拷貝原子數(shù)據(jù)塊的操作和把新數(shù)據(jù)寫到源數(shù)據(jù)區(qū)的操作并行進行,將元數(shù)據(jù)記錄插到當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項的哈希映射表中,元數(shù)據(jù)記錄包含寫操作到來時的系統(tǒng)時間以及原子數(shù)據(jù)塊在源數(shù)據(jù)區(qū)和連續(xù)數(shù)據(jù)保護區(qū)的對應(yīng)關(guān)系;等待用戶命令,得到用戶命令后,轉(zhuǎn)步驟(2);(5)第二類處理寫操作步驟;重新建立一個連續(xù)數(shù)據(jù)保護項作為當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項,并初始化其所有字段,將該連續(xù)數(shù)據(jù)保護項加入連續(xù)數(shù)據(jù)保護項鏈表中;獲取當(dāng)前系統(tǒng)的時間;采用流水線策略將從源數(shù)據(jù)區(qū)向連續(xù)數(shù)據(jù)保護區(qū)拷貝原子數(shù)據(jù)塊的操作和把新數(shù)據(jù)寫到源數(shù)據(jù)區(qū)的操作并行進行;將元數(shù)據(jù)記錄插到當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項的哈希映射表中,元數(shù)據(jù)記錄包含寫操作到來時的系統(tǒng)時間以及原子數(shù)據(jù)塊在源數(shù)據(jù)區(qū)和連續(xù)數(shù)據(jù)保護區(qū)的對應(yīng)關(guān)系;等待用戶命令,得到用戶命令后,轉(zhuǎn)步驟(2);(6)處理恢復(fù)操作步驟;當(dāng)用戶對源數(shù)據(jù)區(qū)進行恢復(fù)操作時,査找連續(xù)數(shù)據(jù)保護項鏈表,找到需要恢復(fù)的連續(xù)數(shù)據(jù)保護項,在該連續(xù)數(shù)據(jù)保護項的哈希映射表中查找需要恢復(fù)的原子數(shù)據(jù)塊記錄,在連續(xù)數(shù)據(jù)保護區(qū)找到需要恢復(fù)的原子數(shù)據(jù)塊并寫回源數(shù)據(jù)區(qū);等待用戶命令,得到用戶命令后,轉(zhuǎn)步驟(2)。所述的多叉日志的塊級連續(xù)數(shù)據(jù)保護和恢復(fù)方法,其特征在于,所述第二類處理寫操作步驟中,重新建立一個連續(xù)數(shù)據(jù)保護項作為當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項,并初始化其數(shù)據(jù)結(jié)構(gòu)及哈希映射表的過程為(2.1)建立一個新的連續(xù)數(shù)據(jù)保護項并插入到連續(xù)數(shù)據(jù)保護項鏈表中,并初始化該連續(xù)數(shù)據(jù)保護項的字段,包括其哈希映射表結(jié)構(gòu)及第一個寫操作到來的時間Ta^和最后一個寫操作到來的時間T^,并將該連續(xù)數(shù)據(jù)保護項設(shè)置為當(dāng)前活動的連續(xù)數(shù)據(jù)保護項;(2.2)確定連續(xù)數(shù)據(jù)保護項的原子數(shù)據(jù)塊大小為2K、4K、8K、16K或32K中的一種。所述的多叉日志的塊級連續(xù)數(shù)據(jù)保護和恢復(fù)方法,其特征在于,所述第一類和第二類處理寫操作步驟中,所述將元數(shù)據(jù)記錄插到當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項的哈希映射表中的過程為(3.1)利用寫操作對應(yīng)的源數(shù)據(jù)區(qū)物理地址和原子數(shù)據(jù)塊大小計算出以原子數(shù)據(jù)塊為單位的原子數(shù)據(jù)塊舊地址AddreSS。Id;(3.2)獲取寫操作到來時的系統(tǒng)時間Tsys;(3.3)記錄將源數(shù)據(jù)區(qū)的原子數(shù)據(jù)塊寫到連續(xù)數(shù)據(jù)保護區(qū)的以原子數(shù)據(jù)塊為單位原子數(shù)據(jù)塊新地址AddresSnew;(3.4)將包含系統(tǒng)時間T,、原子數(shù)據(jù)塊舊地址Address。w和原子數(shù)據(jù)塊新地址AddreSSnew的記錄插到當(dāng)前活動的連續(xù)數(shù)據(jù)保護項的哈希映射表中。所述的多叉日志的塊級連續(xù)數(shù)據(jù)保護和恢復(fù)方法,其特征在于,所述處理恢復(fù)操作步驟的過程為(4.1)將源數(shù)據(jù)需要恢復(fù)到的時間點轉(zhuǎn)化為系統(tǒng)可識別的回滾時間Trollback5(4.2)査找連續(xù)數(shù)據(jù)保護項鏈表,把開啟時第一個寫操作到來的時間Tstart大于回滾時間Tr。ubaek連續(xù)數(shù)據(jù)保護項插入到回滾鏈表中;把開啟時第一個寫操作到來的時間Tstan小于回滾時間Trobaek且回滾時間小于開啟時最后一寫操作到來的時間Tend的連續(xù)數(shù)據(jù)保護項插入到回滾鏈表中;(4.3)喚醒數(shù)據(jù)回退線程,調(diào)用連續(xù)數(shù)據(jù)保護的回滾函數(shù),査找連續(xù)數(shù)據(jù)保護項鏈表中的每個連續(xù)數(shù)據(jù)保護項連續(xù)數(shù)據(jù)保護項,判斷該連續(xù)數(shù)據(jù)保護項中第一個寫操作到來的時間Ts^是否大于回滾時間Trallbaek;是則順序進行;否則轉(zhuǎn)過程(4.6);(4.4)調(diào)用本發(fā)明系統(tǒng)的讀原子數(shù)據(jù)塊函數(shù),將連續(xù)數(shù)據(jù)項的哈希映射表中所有記錄的數(shù)據(jù)從連續(xù)數(shù)據(jù)保護區(qū)讀出,由本發(fā)明系統(tǒng)的寫原子數(shù)據(jù)塊線程將原子數(shù)據(jù)塊寫入源數(shù)據(jù)區(qū);(4.5)判斷連續(xù)數(shù)據(jù)保護項鏈表的連續(xù)數(shù)據(jù)保護項是否已經(jīng)全部查找;是則轉(zhuǎn)過程(4.11);否則轉(zhuǎn)過程(4.3);(4.6)查找該連續(xù)數(shù)據(jù)保護項的哈希映射表中査找位為0的記錄設(shè)為Recordl,并將此紀(jì)錄查找位置位l;(4.7)以記錄Recordl的原子數(shù)據(jù)塊舊地址Address。ld為關(guān)鍵字在哈希映射表中査找下一個原子數(shù)據(jù)塊的記錄設(shè)為Record2,并把這條記錄置已查找位,如果記錄Recordl的元數(shù)據(jù)記錄時間大于回滾時間Trollbaek且記錄Record2的元數(shù)據(jù)記錄時間大于回滾時間T』baek,把Recordl和Record2中元記錄時間較小的記錄用Record標(biāo)識。(4.8)判斷原子數(shù)據(jù)塊舊地址AddreSS。ld為關(guān)鍵字在哈希映射表中的記錄的査找位是否全置位l,是則順序進行;否則轉(zhuǎn)過程(4.6);(4.9)利用流水線策略將哈希映射表中記錄Record的數(shù)據(jù)塊從連續(xù)數(shù)據(jù)保護區(qū)拷貝到源數(shù)據(jù)區(qū)的原子數(shù)據(jù)塊舊地址AddresS。ld中;(4.10)判斷哈希映射表中的所有記錄是否都置了已查找位,是則轉(zhuǎn)過程(4.5),否則轉(zhuǎn)過程(4.6);(4.11)完成。以下為需要說明的3個數(shù)據(jù)結(jié)構(gòu)連續(xù)數(shù)據(jù)保護項、連續(xù)數(shù)據(jù)表、元數(shù)據(jù)記錄。A.連續(xù)數(shù)據(jù)保護項包括建立時間、第一個寫操作到來時間、最后一個寫操作到來時間、哈希映射表和原子數(shù)據(jù)塊大小字段。structCDP—item/*連續(xù)數(shù)據(jù)保護項結(jié)構(gòu)*/{unsignedlongT;嚴(yán)該CDP—item建立時間*/unsignedlongT麵,該CDP—item第一個寫操作到來時間*/unsignedlongTend;/*該CDP—item最后一個寫操作到來時間*/structcow—table*ctab;/*CDP—item哈希映射表*/size—tchunk—size/*原子數(shù)據(jù)塊大小*/.................};當(dāng)本發(fā)明的系統(tǒng)開啟后,建立一個連續(xù)數(shù)據(jù)保護項,對連續(xù)數(shù)據(jù)保護項所有字段初始化,并把連續(xù)數(shù)據(jù)保護項插入到連續(xù)數(shù)據(jù)表結(jié)構(gòu)中連續(xù)數(shù)據(jù)保護鏈表中。每當(dāng)一個連續(xù)數(shù)據(jù)保護項進行數(shù)據(jù)回滾操作后再處理來自用戶的寫操作,本發(fā)明的系統(tǒng)就會重新建立一個連續(xù)數(shù)據(jù)保護項,并重新初始化它的所有字段,再插入到連續(xù)數(shù)據(jù)表的連續(xù)數(shù)據(jù)保護鏈表中。在任意時刻,只有最新建立的連續(xù)數(shù)據(jù)保護項為活躍的連續(xù)數(shù)據(jù)保護項。B.連續(xù)數(shù)據(jù)表包括連續(xù)數(shù)據(jù)保護項鏈表和回滾鏈表。structCDP嚴(yán)連續(xù)數(shù)據(jù)表結(jié)構(gòu)"structlist—headCDP一list,連續(xù)數(shù)據(jù)保護項鏈表"structlist—headrollback—list;/*回滾鏈表*/當(dāng)本發(fā)明的系統(tǒng)開啟后,連續(xù)數(shù)據(jù)表就會被初始化。所有連續(xù)數(shù)據(jù)保護項都插入到連續(xù)數(shù)據(jù)表中的連續(xù)數(shù)據(jù)保護項鏈表中,需要恢復(fù)的連續(xù)數(shù)據(jù)保護項插入到回滾鏈表中。C.元數(shù)據(jù)記錄包括原子數(shù)據(jù)塊舊地址、原子數(shù)據(jù)塊新地址和元數(shù)據(jù)記錄時間。structcow/*元數(shù)據(jù)記錄結(jié)構(gòu)*/chunk—tAddresS。ld;/*原子數(shù)據(jù)塊舊地址,為原子數(shù)據(jù)塊在源數(shù)據(jù)區(qū)的扇區(qū)地址*/sector—tAddress,;/*原子數(shù)據(jù)塊新地址,為原子數(shù)據(jù)塊在連續(xù)數(shù)據(jù)保護區(qū)的扇區(qū)地址*/unsignedlongtime;/*元數(shù)據(jù)記錄時間,為寫操作到來時的系統(tǒng)時間*/};本發(fā)明的系統(tǒng)處理用戶的寫操作命令時,對每一個從源數(shù)據(jù)區(qū)拷貝到連續(xù)數(shù)據(jù)保護區(qū)的原子數(shù)據(jù)塊都會有一個對應(yīng)的元數(shù)據(jù)記錄插入到當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項的哈希映射表中。本發(fā)明在不影響主要數(shù)據(jù)運行的前提下,可以實現(xiàn)持續(xù)捕捉或跟蹤目標(biāo)數(shù)據(jù)所發(fā)生的任何改變,并且能夠恢復(fù)到此前任意時間點,并將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較舊的時間狀態(tài)或者從較舊的數(shù)據(jù)狀態(tài)恢復(fù)到較新的時間狀態(tài)后,能夠處理來自上層主機的寫操作,繼續(xù)對恢復(fù)后的源數(shù)據(jù)區(qū)進行數(shù)據(jù)更新操作并施加保護,提供更靈活的任意目標(biāo)時間的恢復(fù)點。圖1為本發(fā)明的流程框圖;圖2為本發(fā)明處理恢復(fù)操作步驟的流程框圖。具體實施方式本發(fā)明的流程如圖1所示,包括初始化、判斷用戶命令、判斷是否進行過回滾操作、第一類處理寫操作、第二類處理寫操作以及處理恢復(fù)操作步驟。圖2為本發(fā)明處理恢復(fù)操作步驟的流程框圖。下面結(jié)合實施例對本發(fā)明做進一步說明。假設(shè)在本發(fā)明系統(tǒng)開啟之前,源數(shù)據(jù)區(qū)分成如表1所示的原子數(shù)據(jù)塊(原子數(shù)據(jù)塊大小可以由用戶指定為2K、4K、8K、32K等)表1ABCDE本發(fā)明系統(tǒng)開啟對源數(shù)據(jù)區(qū)進行保護后,來自用戶的寫操作對源數(shù)據(jù)區(qū)的原子數(shù)據(jù)塊進行了多次寫操作。按序號和寫操作到來的時間的先后次序,寫操作造成各原子數(shù)據(jù)塊的變化的記錄如下(1)09:00A—----國Al(2)09:15B——Bl(3)09:30Al——畫A2(4)09:45C—-----Cl(5)10:00D—-—畫Dl(6)10:15Bl—■國一B2(7)10:30E-—--—El(8)10:45B2—--國一B3(9)11:00Cl—■畫一-r上述9個寫操作完成后,源數(shù)據(jù)區(qū)的最新數(shù)據(jù)狀態(tài)為:表2<table>tableseeoriginaldocumentpage14</column></row><table>連續(xù)數(shù)據(jù)保護區(qū)的數(shù)據(jù)狀態(tài)為:表3<table>tableseeoriginaldocumentpage14</column></row><table>在本實施方案中有兩個問題1.將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較舊的時間狀態(tài)的同時,如何將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較舊的數(shù)據(jù)狀態(tài)恢復(fù)到較新的數(shù)據(jù)狀態(tài)?2.怎樣能夠在回滾操作后繼續(xù)對恢復(fù)后的源數(shù)據(jù)區(qū)進行數(shù)據(jù)更新操作?現(xiàn)在詳細敘述如下l.將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較舊的時間狀態(tài)的同時,也能夠?qū)⒃磾?shù)據(jù)區(qū)的數(shù)據(jù)從較舊的數(shù)據(jù)狀態(tài)恢復(fù)到較新的數(shù)據(jù)狀態(tài)。例如將源數(shù)據(jù)區(qū)從最新的數(shù)據(jù)狀態(tài)即11:00以后的某個時間狀態(tài)恢復(fù)到10:10的數(shù)據(jù)狀態(tài)時,此時也能夠把源數(shù)據(jù)區(qū)在10:10的數(shù)據(jù)狀態(tài)恢復(fù)到在10:40的數(shù)據(jù)狀態(tài)。解決方法(1)將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較舊的時間狀態(tài)時,只需根據(jù)回滾時間Tf。ubaek査找當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項的哈希映射表,在連續(xù)數(shù)據(jù)保護區(qū)找到需要拷貝回源數(shù)據(jù)區(qū)的原子數(shù)據(jù)塊并寫回源數(shù)據(jù)區(qū)。通過恢復(fù)操作步驟,在哈希映射表中找到原子數(shù)據(jù)塊B1,E,Cl,并把這些原子數(shù)據(jù)塊寫回到源數(shù)據(jù)區(qū),在將連續(xù)數(shù)據(jù)保護區(qū)的數(shù)據(jù)塊寫回到源數(shù)區(qū)之前,需判斷對應(yīng)的源數(shù)據(jù)區(qū)的數(shù)據(jù)是否是當(dāng)前最新的原子數(shù)據(jù)塊,是則將源數(shù)據(jù)區(qū)的原子數(shù)據(jù)塊拷貝到連續(xù)數(shù)據(jù)保護區(qū),并獲取當(dāng)前系統(tǒng)時間,然后把包含當(dāng)前系統(tǒng)時間的記錄插入到哈希映射表中;否則將此原子數(shù)據(jù)塊寫回源數(shù)據(jù)區(qū)?;貪L操作完成后源數(shù)據(jù)區(qū)在10:IO的數(shù)據(jù)狀態(tài)為表4A2BlClDlE此時連續(xù)數(shù)據(jù)保護區(qū)的數(shù)據(jù)數(shù)據(jù)狀態(tài)為:表5ABAlCDBlEB2ClB3ElC209:0009:1509:3009:4510:0010:1510:3010:4511:00(2)將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較舊的數(shù)據(jù)狀態(tài)恢復(fù)到較新的數(shù)據(jù)狀態(tài)。如源數(shù)據(jù)區(qū)在10:10的數(shù)據(jù)狀態(tài)恢復(fù)到在10:40的數(shù)據(jù)狀態(tài),査找哈希映射表中記錄時間在10:40以后的數(shù)據(jù)塊記錄(對于在原子數(shù)據(jù)塊舊地址相同的多個數(shù)據(jù)塊,獲取記錄中系統(tǒng)時間較小的數(shù)據(jù)塊),并把這些記錄對應(yīng)的數(shù)據(jù)塊寫回到源數(shù)據(jù)區(qū)。回滾操作完成后源數(shù)據(jù)區(qū)在10:40的數(shù)據(jù)狀態(tài)為表6A2B2ClDlEl2.在回滾操作后繼續(xù)對恢復(fù)后的源數(shù)據(jù)區(qū)進行數(shù)據(jù)更新操作不考慮多叉日志存儲的傳統(tǒng)連續(xù)數(shù)據(jù)保護系統(tǒng)在將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較舊的時間狀態(tài)的后,不能處理來自用戶的寫操作,只有停止后并重新開啟才能對進行恢復(fù)操作后的源數(shù)據(jù)提供保護。本發(fā)明在將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較舊的時間狀態(tài)后,或者將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較舊的數(shù)據(jù)狀態(tài)恢復(fù)到較新的時間狀態(tài)后,也能夠處理來自上層主機的寫操作,繼續(xù)對恢復(fù)后的源數(shù)據(jù)區(qū)進行數(shù)據(jù)更新操作。如將源數(shù)據(jù)區(qū)從最新的數(shù)據(jù)狀態(tài)即11:00以后的某個時間狀態(tài)恢復(fù)到10:10的數(shù)據(jù)狀態(tài)后,此時來自主機的寫操作到來,如何處理?解決方法當(dāng)用戶第一次開啟本發(fā)明對源數(shù)區(qū)進行保護時,初始化連續(xù)數(shù)據(jù)表structCDP結(jié)構(gòu),建立一個連續(xù)數(shù)據(jù)保護項,并把這個連續(xù)數(shù)據(jù)保護項插入到連續(xù)數(shù)據(jù)保護項鏈表中,這個連續(xù)數(shù)據(jù)保護項被設(shè)置為當(dāng)前活動的連續(xù)數(shù)據(jù)保護項。在本發(fā)明開啟之前,源數(shù)據(jù)區(qū)按原子數(shù)據(jù)塊大小分塊如表l,進行前述連續(xù)的寫操作(1)-(9)后,源數(shù)據(jù)的數(shù)據(jù)狀態(tài)為表2所示,連續(xù)數(shù)據(jù)保護區(qū)的數(shù)據(jù)狀態(tài)為表3所示,將源數(shù)據(jù)從將源數(shù)據(jù)區(qū)從最新的數(shù)據(jù)狀態(tài)即11:00以后的某個時間狀態(tài)恢復(fù)到10:10的數(shù)據(jù)狀態(tài)后,回滾操作完成后源數(shù)據(jù)區(qū)在10:10的數(shù)據(jù)狀態(tài)為表4所示,此時連續(xù)數(shù)據(jù)保護區(qū)的數(shù)據(jù)數(shù)據(jù)狀態(tài)為表5所示。當(dāng)數(shù)據(jù)回滾到10:00,來自用戶的寫操作到來時,本發(fā)明系統(tǒng)建立一個連續(xù)數(shù)據(jù)保護項,并初始化其中的各字段,此連續(xù)數(shù)據(jù)保護項會被插入到連續(xù)數(shù)據(jù)項鏈表中,并被設(shè)為當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項。此時對源數(shù)據(jù)區(qū)的每一個寫操作運用流水線策略進行處理,并把數(shù)據(jù)塊記錄插入到此連續(xù)數(shù)據(jù)保護項的哈希映射表中如進行數(shù)據(jù)的回滾操作,則遍歷連續(xù)數(shù)據(jù)保護項鏈表,找到用戶指定的回滾時間Trollbaek小于于當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項開啟時第一個寫操作到來的時間Ts^的連續(xù)數(shù)據(jù)保護項結(jié)構(gòu),插入到連續(xù)數(shù)據(jù)保護項鏈表中。找到用戶指定的回滾時間T』b^大于當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項開啟時第一個寫操作到來的時間Tstart并小于最后寫操作到來的時間Tend之間的連續(xù)數(shù)據(jù)保護項插入到連續(xù)數(shù)據(jù)保護項鏈表中。依次回滾連續(xù)數(shù)據(jù)保護鏈表中的連續(xù)數(shù)據(jù)表結(jié)構(gòu),以達到將數(shù)據(jù)恢復(fù)到TTOllbac;k數(shù)據(jù)狀態(tài)的目的。權(quán)利要求1.一種多叉日志的塊級連續(xù)數(shù)據(jù)保護和恢復(fù)方法,包括(1)初始化步驟;把存儲空間劃分為源數(shù)據(jù)區(qū)和連續(xù)數(shù)據(jù)保護區(qū),需要保護的備份數(shù)據(jù)位于源數(shù)據(jù)區(qū),連續(xù)數(shù)據(jù)保護區(qū)用于在寫操作到來時,存放源數(shù)據(jù)區(qū)的變化之前的原始數(shù)據(jù),連續(xù)數(shù)據(jù)保護區(qū)的大小為存儲空間的50%~75%;初始化由連續(xù)數(shù)據(jù)保護項鏈表和回滾鏈表組成的連續(xù)數(shù)據(jù)表,同時建立一個連續(xù)數(shù)據(jù)保護項作為當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項,并初始化其所有字段,將該連續(xù)數(shù)據(jù)保護項加入連續(xù)數(shù)據(jù)保護項鏈表中;把源數(shù)據(jù)區(qū)劃分為原子數(shù)據(jù)塊,原子數(shù)據(jù)塊大小為2K、4K、8K、16K或32K中的一種;(2)判斷用戶命令步驟;判斷用戶命令是進行寫操作還是恢復(fù)操作,寫操作順序進行;恢復(fù)操作轉(zhuǎn)步驟(6);(3)判斷是否進行過回滾操作步驟;判斷當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項是否進行過回滾操作,是則轉(zhuǎn)步驟(5),否則順序進行;(4)第一類處理寫操作步驟;獲取當(dāng)前系統(tǒng)時間,采用流水線策略將從源數(shù)據(jù)區(qū)向連續(xù)數(shù)據(jù)保護區(qū)拷貝原子數(shù)據(jù)塊的操作和把新數(shù)據(jù)寫到源數(shù)據(jù)區(qū)的操作并行進行,將元數(shù)據(jù)記錄插到當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項的哈希映射表中,元數(shù)據(jù)記錄包含寫操作到來的系統(tǒng)時間以及原子數(shù)據(jù)塊在源數(shù)據(jù)區(qū)和連續(xù)數(shù)據(jù)保護區(qū)的對應(yīng)關(guān)系;等待用戶命令,得到用戶命令后,轉(zhuǎn)步驟(2);(5)第二類處理寫操作步驟;重新建立一個連續(xù)數(shù)據(jù)保護項作為當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項,并初始化其數(shù)據(jù)結(jié)構(gòu)及哈希表,將該連續(xù)數(shù)據(jù)保護項加入連續(xù)數(shù)據(jù)保護項鏈表中;獲取當(dāng)前系統(tǒng)的時間;采用流水線策略將從源數(shù)據(jù)區(qū)向連續(xù)數(shù)據(jù)保護區(qū)拷貝原子數(shù)據(jù)塊的操作和把新數(shù)據(jù)寫到源數(shù)據(jù)區(qū)的操作并行進行;將元數(shù)據(jù)記錄插到當(dāng)前活躍的連續(xù)數(shù)據(jù)保護項的哈希映射表中,元數(shù)據(jù)記錄包含寫操作到來時的系統(tǒng)時間以及原子數(shù)據(jù)塊在源數(shù)據(jù)區(qū)和連續(xù)數(shù)據(jù)保護區(qū)的對應(yīng)關(guān)系;等待用戶命令,得到用戶命令后,轉(zhuǎn)步驟(2);(6)處理恢復(fù)操作步驟;當(dāng)用戶對源數(shù)據(jù)區(qū)進行恢復(fù)操作時,查找連續(xù)數(shù)據(jù)保護項鏈表,找到需要恢復(fù)的連續(xù)數(shù)據(jù)保護項,在該連續(xù)數(shù)據(jù)保護項的哈希映射表中查找需要恢復(fù)的原子數(shù)據(jù)塊記錄,在連續(xù)數(shù)據(jù)保護區(qū)找到需要恢復(fù)的原子數(shù)據(jù)塊并寫回源數(shù)據(jù)區(qū);等待用戶命令,得到用戶命令后,轉(zhuǎn)步驟(2)。全文摘要一種多叉日志存儲的連續(xù)數(shù)據(jù)保護和恢復(fù)方法,屬于計算機數(shù)據(jù)存儲和備份方法,解決現(xiàn)有連續(xù)數(shù)據(jù)保護和恢復(fù)方法將數(shù)據(jù)恢復(fù)到某一時間狀態(tài)時,不能再接受來自主機的數(shù)據(jù)更新操作的問題。本發(fā)明包括初始化、判斷用戶命令、判斷是否進行過回滾操作、第一類處理寫操作、第二類處理寫操作以及處理恢復(fù)操作步驟。本發(fā)明在不影響數(shù)據(jù)運行的前提下,可以持續(xù)捕捉或跟蹤目標(biāo)數(shù)據(jù)所發(fā)生的任何改變,并能夠恢復(fù)到此前任意時間點,并將源數(shù)據(jù)區(qū)的數(shù)據(jù)從較新的數(shù)據(jù)狀態(tài)恢復(fù)到較舊的時間狀態(tài)或者從較舊的數(shù)據(jù)狀態(tài)恢復(fù)到較新的時間狀態(tài)后,能夠處理來自用戶的寫操作,繼續(xù)對恢復(fù)后的源數(shù)據(jù)區(qū)進行數(shù)據(jù)更新操作并施加保護,提供更靈活的任意目標(biāo)時間的恢復(fù)點。文檔編號G06F11/14GK101286127SQ20081004763公開日2008年10月15日申請日期2008年5月8日優(yōu)先權(quán)日2008年5月8日發(fā)明者丹馮,劉景寧,可周,李祚衡,楊天明,毛文娟申請人:華中科技大學(xué)