本發(fā)明涉及目錄快照回滾,特別是涉及一種目錄快照回滾方法、一種目錄快照回滾裝置、一種電子設(shè)備以及一種計算機可讀存儲介質(zhì)。
背景技術(shù):
1、目錄快照是指對文件系統(tǒng)中的一個或多個目錄在某一時刻的狀態(tài)進(jìn)行的備份。它記錄了目錄結(jié)構(gòu)、文件屬性(如名稱、大小、創(chuàng)建和修改時間)以及文件內(nèi)容??煺盏闹饕δ苁翘峁?shù)據(jù)的即時恢復(fù)能力,在數(shù)據(jù)丟失、損壞或系統(tǒng)發(fā)生故障時,可以快速將文件系統(tǒng)中的目錄回滾到快照創(chuàng)建時的狀態(tài)。目錄快照回滾是指將目錄的狀態(tài)恢復(fù)到之前某個快照所記錄的狀態(tài)。主要功能是撤銷自快照創(chuàng)建以來對數(shù)據(jù)的所有修改,從而恢復(fù)到一個已知的穩(wěn)定狀態(tài)。
2、在實際應(yīng)用中,相關(guān)技術(shù)的做法是全面復(fù)制快照中的數(shù)據(jù)至目標(biāo)目錄,直接以快照版本的數(shù)據(jù)覆蓋當(dāng)前數(shù)據(jù)。這種方法在每次執(zhí)行回滾操作時均涉及數(shù)據(jù)的完整復(fù)制,對于大型目錄而言,其效率低下。
技術(shù)實現(xiàn)思路
1、本發(fā)明實施例是提供一種目錄快照回滾方法、裝置、電子設(shè)備以及計算機可讀存儲介質(zhì),以克服上述問題或者至少部分地解決上述問題。
2、本發(fā)明實施例公開了一種目錄快照回滾方法,包括:
3、獲取元數(shù)據(jù)日志;
4、構(gòu)建針對所述元數(shù)據(jù)日志的目錄樹,以及所述目錄樹的葉節(jié)點;
5、當(dāng)所述元數(shù)據(jù)日志變更時,獲取數(shù)據(jù)變更日志;
6、基于所述數(shù)據(jù)變更日志確定數(shù)據(jù)變更類型,并基于所述數(shù)據(jù)變更類型修改所述目錄樹的所述葉節(jié)點;
7、將經(jīng)修改的所述葉節(jié)點確定為被更新節(jié)點;
8、基于所述被更新節(jié)點確定所述目錄樹的層次結(jié)構(gòu);
9、基于所述層次結(jié)構(gòu)執(zhí)行目錄快照回滾。
10、可選地,所述構(gòu)建針對所述元數(shù)據(jù)日志的目錄樹,以及所述目錄樹的葉節(jié)點的步驟包括:
11、構(gòu)建目錄樹;所述目錄樹包含葉節(jié)點;
12、確定所述元數(shù)據(jù)日志中的待變換數(shù)據(jù)文件,并將所述待變換數(shù)據(jù)文件映射至所述目錄樹的葉節(jié)點;所述葉節(jié)點為,由鍵和值組成的鍵值對;
13、所述鍵為針對所述待變換數(shù)據(jù)文件的唯一標(biāo)識符;
14、所述值為針對所述待變換數(shù)據(jù)文件的數(shù)據(jù)變更日志。
15、可選地,所述基于所述數(shù)據(jù)變更日志確定數(shù)據(jù)變更類型,并基于所述數(shù)據(jù)變更類型修改所述目錄樹的所述葉節(jié)點的步驟包括:
16、當(dāng)所述數(shù)據(jù)變更類型為增加新增文件時,在所述目錄樹中新增用于表達(dá)所述新增文件的分支;所述分支包括用于表達(dá)所述增加新增文件變換內(nèi)容的新增葉節(jié)點。
17、可選地,所述基于所述數(shù)據(jù)變更日志確定數(shù)據(jù)變更類型,并基于所述數(shù)據(jù)變更類型修改所述目錄樹的所述葉節(jié)點的步驟包括:
18、當(dāng)所述數(shù)據(jù)變更類型為修改文件時,通過所述唯一標(biāo)識符確定與經(jīng)修改的文件對應(yīng)的第一目標(biāo)葉節(jié)點;
19、基于修改內(nèi)容更新所述第一目標(biāo)葉節(jié)點的數(shù)據(jù)變更日志。
20、可選地,所述基于所述數(shù)據(jù)變更日志確定數(shù)據(jù)變更類型,并基于所述數(shù)據(jù)變更類型修改所述目錄樹的所述葉節(jié)點的步驟包括:
21、當(dāng)所述數(shù)據(jù)變更類型為刪除文件時,通過所述唯一標(biāo)識符確定與經(jīng)刪除的文件對應(yīng)的第二目標(biāo)葉節(jié)點;
22、刪除所述第二目標(biāo)葉節(jié)點。
23、可選地,所述基于所述數(shù)據(jù)變更日志確定數(shù)據(jù)變更類型,并基于所述數(shù)據(jù)變更類型修改所述目錄樹的所述葉節(jié)點的步驟包括:
24、當(dāng)所述數(shù)據(jù)變更類型為刪除文件,且待刪除的文件不在所述目錄樹中具有對應(yīng)的葉節(jié)點時,在所述目錄樹中創(chuàng)建用于表達(dá)已刪除所述待刪除的文件的葉節(jié)點。
25、可選地,所述基于修改內(nèi)容更新所述第一目標(biāo)葉節(jié)點的數(shù)據(jù)變更日志的步驟包括:
26、確定所述數(shù)據(jù)變更日志的日志類型;
27、基于所述日志類型和所述修改內(nèi)容更新所述第一目標(biāo)葉節(jié)點的數(shù)據(jù)變更日志。
28、可選地,所述確定所述數(shù)據(jù)變更日志的日志類型的步驟包括:
29、當(dāng)判定所述待變換數(shù)據(jù)文件為首次創(chuàng)建或初次被修改時,將所述日志類型確定為用于表達(dá)所述修改內(nèi)容的具體范圍的類型。
30、可選地,所述確定所述數(shù)據(jù)變更日志的日志類型的步驟包括:
31、當(dāng)判定所述待變換數(shù)據(jù)文件不為首次創(chuàng)建或初次被修改時,將所述日志類型確定為位圖。
32、可選地,所述基于所述日志類型和所述修改內(nèi)容更新所述第一目標(biāo)葉節(jié)點的數(shù)據(jù)變更日志的步驟包括:
33、當(dāng)所述數(shù)據(jù)變更日志的日志類型為用于表達(dá)所述修改內(nèi)容的具體范圍的類型時,獲取所述修改內(nèi)容的起始偏移量與變化長度;
34、基于所述起始偏移量與所述變化長度確定修改位置,并基于所述修改位置更新所述第一目標(biāo)葉節(jié)點的數(shù)據(jù)變更日志。
35、可選地,所述基于所述日志類型和所述修改內(nèi)容更新所述第一目標(biāo)葉節(jié)點的數(shù)據(jù)變更日志的步驟包括:
36、當(dāng)所述數(shù)據(jù)變更日志的日志類型為位圖時,確定所述修改內(nèi)容在所述位圖中對應(yīng)的目標(biāo)位;
37、基于所述修改內(nèi)容修改所述目標(biāo)位的值,以更新所述第一目標(biāo)葉節(jié)點的數(shù)據(jù)變更日志。
38、可選地,所述基于所述層次結(jié)構(gòu)執(zhí)行目錄快照回滾的步驟包括:
39、確定所述目錄樹末端層級和頂端層級;
40、從所述末端層級至所述頂端層級遍歷所述目錄樹的葉節(jié)點,并對所述葉節(jié)點執(zhí)行逆向操作,以恢復(fù)目錄快照的原始狀態(tài)。
41、可選地,所述對所述葉節(jié)點執(zhí)行逆向操作,以恢復(fù)目錄快照的原始狀態(tài)的步驟包括:
42、針對新增葉節(jié)點執(zhí)行刪除操作,以恢復(fù)目錄快照的原始狀態(tài)。
43、可選地,所述對所述葉節(jié)點執(zhí)行逆向操作,以恢復(fù)目錄快照的原始狀態(tài)的步驟包括:
44、針對被刪除的葉節(jié)點執(zhí)行恢復(fù)操作,以恢復(fù)目錄快照的原始狀態(tài)。
45、可選地,所述對所述葉節(jié)點執(zhí)行逆向操作,以恢復(fù)目錄快照的原始狀態(tài)的步驟包括:
46、在判定完成針對新增葉節(jié)點執(zhí)行刪除操作,以及針對被刪除的葉節(jié)點執(zhí)行恢復(fù)操作后,讀取被修改的第一目標(biāo)葉節(jié)點的待變換數(shù)據(jù)文件;
47、通過所述被修改的第一目標(biāo)葉節(jié)點的待變換數(shù)據(jù)文件,確定被修改的數(shù)據(jù)段;
48、對所述數(shù)據(jù)段執(zhí)行逆向操作,以恢復(fù)目錄快照的原始狀態(tài)。
49、可選地,所述對所述數(shù)據(jù)段執(zhí)行逆向操作的步驟包括:
50、當(dāng)所述數(shù)據(jù)段為新增數(shù)據(jù)段時,刪除所述新增數(shù)據(jù)段。
51、可選地,所述對所述數(shù)據(jù)段執(zhí)行逆向操作的步驟包括:
52、當(dāng)所述數(shù)據(jù)段為被刪除數(shù)據(jù)段時,則確定被刪除數(shù)據(jù)段的目標(biāo)位置;
53、通過所述數(shù)據(jù)變更日志查找所述被刪除數(shù)據(jù)段的快照版本數(shù)據(jù),并將所述快照版本數(shù)據(jù)寫入所述目標(biāo)位置。
54、本發(fā)明實施例還公開了一種目錄快照回滾裝置,包括:
55、元數(shù)據(jù)日志獲取模塊,用于獲取元數(shù)據(jù)日志;
56、目錄樹構(gòu)建模塊,用于構(gòu)建針對所述元數(shù)據(jù)日志的目錄樹,以及所述目錄樹的葉節(jié)點;
57、數(shù)據(jù)變更日志獲取模塊,用于當(dāng)所述元數(shù)據(jù)日志變更時,獲取數(shù)據(jù)變更日志;
58、葉節(jié)點修改模塊,用于基于所述數(shù)據(jù)變更日志確定數(shù)據(jù)變更類型,并基于所述數(shù)據(jù)變更類型修改所述目錄樹的所述葉節(jié)點;
59、被更新節(jié)點確定模塊,用于將經(jīng)修改的所述葉節(jié)點確定為被更新節(jié)點;
60、層次結(jié)構(gòu)確定模塊,用于基于所述被更新節(jié)點確定所述目錄樹的層次結(jié)構(gòu);
61、目錄快照回滾執(zhí)行模塊,用于基于所述層次結(jié)構(gòu)執(zhí)行目錄快照回滾。
62、本發(fā)明實施例還公開了一種計算機程序產(chǎn)品,包括計算機程序/指令,其特征在于,該計算機程序/指令被處理器執(zhí)行時實現(xiàn)如上所述方法的步驟。
63、本發(fā)明實施例還公開了一種電子設(shè)備,包括處理器、通信接口、存儲器和通信總線,其中,所述處理器、所述通信接口以及所述存儲器通過所述通信總線完成相互間的通信;
64、所述存儲器,用于存放計算機程序;
65、所述處理器,用于執(zhí)行存儲器上所存放的程序時,實現(xiàn)如本發(fā)明實施例所述的方法。
66、本發(fā)明實施例還公開了一種計算機可讀存儲介質(zhì),其上存儲有指令,當(dāng)由一個或多個處理器執(zhí)行時,使得所述處理器執(zhí)行如本發(fā)明實施例所述的方法。
67、本發(fā)明實施例包括以下優(yōu)點:
68、本發(fā)明實施例,通過獲取元數(shù)據(jù)日志;構(gòu)建針對所述元數(shù)據(jù)日志的目錄樹,以及所述目錄樹的葉節(jié)點;當(dāng)所述元數(shù)據(jù)日志變更時,獲取數(shù)據(jù)變更日志;基于所述數(shù)據(jù)變更日志確定數(shù)據(jù)變更類型,并基于所述數(shù)據(jù)變更類型修改所述目錄樹的所述葉節(jié)點;將經(jīng)修改的所述葉節(jié)點確定為被更新節(jié)點;基于所述被更新節(jié)點確定所述目錄樹的層次結(jié)構(gòu);基于所述層次結(jié)構(gòu)執(zhí)行目錄快照回滾,實現(xiàn)了對文件系統(tǒng)變化的精細(xì)跟蹤,為各種需要歷史數(shù)據(jù)和回滾功能的應(yīng)用提供了有力支持,從而提升了目錄快照的回滾效率。