接收快照建立命令,根據(jù)所述快照建立命令拷貝所述當(dāng)前一級表和所述當(dāng)前二級表作為快照一級表和快照二級表,所述快照二級表管理的每個數(shù)據(jù)塊的局部編號用于表征所述快照二級表的版本。
[0048]具體地,本實施例中的快照回滾方法建立于以下快照建立技術(shù)的基礎(chǔ)之上,具體快照建立技術(shù)包括:
[0049]設(shè)立全局快照號作為全局變量,初始值為I。當(dāng)磁盤建立第一次快照時,全局快照號取值為I ;當(dāng)磁盤建立第二次快照時,全局快照號取值為2,以此類推。對每個當(dāng)前二級表所管理的數(shù)據(jù)塊設(shè)立局部編號,初始值為O。當(dāng)磁盤建立第一次快照時,全局快照號取值為1,當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號為I ;當(dāng)磁盤建立第二次快照時,全局快照號取值為2,當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號為2。同時,建立快照時,拷貝當(dāng)前一級表和所有當(dāng)前二級表作為快照一級表和快照二級表,其中快照二級表所管理的數(shù)據(jù)塊的局部編號與建立快照時的當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號相同。即當(dāng)磁盤建立第一次快照時,第一個快照二級表所管理的數(shù)據(jù)塊的局部編號為I ;當(dāng)磁盤建立第二次快照時,第一個快照二級表所管理的數(shù)據(jù)塊的局部編號仍為1,第二個快照二級表所管理的數(shù)據(jù)塊的局部編號為2。
[0050]接收寫操作命令,獲取寫操作命令中攜帶待操作數(shù)據(jù)塊的地址。從當(dāng)前一級表和當(dāng)前二級表中查找該待操作數(shù)據(jù)塊的局部編號。
[0051]由于預(yù)先設(shè)定針對磁盤中元數(shù)據(jù)進行寫操作時,保存該元數(shù)據(jù)在原數(shù)據(jù)塊中,然后拷貝該元數(shù)據(jù)至另一目標(biāo)數(shù)據(jù)塊,并將該元數(shù)據(jù)的存儲地址改為指向該目標(biāo)數(shù)據(jù)塊。建立快照后,如果發(fā)生寫操作,由于預(yù)先設(shè)定的磁盤讀寫機制中,會直接對元數(shù)據(jù)在原來的數(shù)據(jù)塊中進行保存,因此可以直接對該元數(shù)據(jù)進行改寫,無需進行寫時拷貝。即假設(shè)某一數(shù)據(jù)塊中如果原本存有數(shù)據(jù),對該數(shù)據(jù)塊建立快照后,該數(shù)據(jù)塊在當(dāng)前二級表中的局部編號應(yīng)該等于全局快照號。現(xiàn)要對該數(shù)據(jù)塊進行寫操作,根據(jù)預(yù)先設(shè)定的磁盤讀寫機制,對該數(shù)據(jù)塊進行寫操作后,會自動保存該數(shù)據(jù)塊中的數(shù)據(jù)內(nèi)容,而將修改后的數(shù)據(jù)內(nèi)容拷貝到新的數(shù)據(jù)塊中,因此可以直接執(zhí)行寫操作而無需進行寫時拷貝。
[0052]在磁盤使用過程中,磁盤中的數(shù)據(jù)會不斷發(fā)生變化,即對磁盤數(shù)據(jù)塊會不斷執(zhí)行寫操作命令。如果此時接收到快照建立命令,則全局快照號會加1,而當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號仍然是快照建立之前的取值。此時當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號和全局快照號會不相等。因此此時需要進行寫時拷貝。
[0053]步驟S104,接收快照回滾命令,所述快照回滾命令中攜帶回滾快照版本號,根據(jù)所述回滾快照版本號查找對應(yīng)的所述快照一級表和所述快照二級表,使所述當(dāng)前一級表指向所述回滾快照版本號對應(yīng)的所述快照二級表。
[0054]通過采用本發(fā)明公開的上述技術(shù)方案,得到了如下有益的效果:通過設(shè)立全局快照號和對存儲對象數(shù)據(jù)塊設(shè)立局部編號,來記錄快照的版本。在快照回滾時,通過回滾快照版本號查找到對應(yīng)的快照一級表和快照二級表,使得當(dāng)前一級表重新指向回滾快照版本號對應(yīng)的快照二級表。無需通過快照一級表進行回滾,且回滾時無需對快照二級表所管理的數(shù)據(jù)塊的引用計數(shù)做減I操作,耗時大大減少。
[0055]圖2是本發(fā)明磁盤快照回滾方法第一實施例流程圖,如圖2所示,本發(fā)明實施例所提供的磁盤快照回滾方法由磁盤快照回滾裝置執(zhí)行,磁盤快照回滾裝置可以由軟件/硬件實現(xiàn)。其中當(dāng)磁盤快照回滾裝置采用軟件實現(xiàn)時,可以集成于虛擬機中。該方法包括:
[0056]步驟S200,設(shè)立全局快照號作為全局變量,所述全局快照號根據(jù)快照建立的次數(shù)進行取值,對當(dāng)前二級表管理的每個數(shù)據(jù)塊設(shè)立局部編號,所述局部編號根據(jù)所述全局快照號的取值進行取值。
[0057]步驟S202,接收快照建立命令,根據(jù)所述快照建立命令拷貝所述當(dāng)前一級表和所述當(dāng)前二級表作為快照一級表和快照二級表,所述快照二級表管理的每個數(shù)據(jù)塊的局部編號用于表征所述快照二級表的版本。
[0058]步驟S204,接收快照回滾命令,所述快照回滾命令中攜帶回滾快照版本號,根據(jù)所述回滾快照版本號查找對應(yīng)的所述快照一級表和所述快照二級表,使所述當(dāng)前一級表指向所述回滾快照版本號對應(yīng)的所述快照二級表。
[0059]步驟S206,獲取在后快照一級表和在后快照二級表,所述在后快照一級表和在后快照二級表是指建立時間晚于所述回滾快照版本號對應(yīng)的所述快照二級表之后的所述快照一級表和所述快照二級表;
[0060]具體地,在后快照二級表的局部編號大于所述回滾快照版本號對應(yīng)的所述快照二級表的局部編號。
[0061]步驟S208,刪除所述在后快照一級表和所述在后快照二級表。
[0062]具體地,對比在后快照二級表和回滾快照版本號對應(yīng)的快照二級表中每一個對應(yīng)的條目;若存在不同的條目,則刪除在后快照二級表中該條目所對應(yīng)的數(shù)據(jù)塊;待在后快照二級表中所有條目對比完成之后,釋放在后快照二級表;待所有在后快照二級表釋放完畢之后,釋放在后一級表。
[0063]通過采用本發(fā)明公開的上述技術(shù)方案,得到了如下有益的效果:通過設(shè)立全局快照號和對存儲對象數(shù)據(jù)塊設(shè)立局部編號,來記錄快照的版本。在快照回滾時,通過回滾快照版本號查找到對應(yīng)的快照一級表和快照二級表,使得當(dāng)前一級表重新指向回滾快照版本號對應(yīng)的快照二級表。無需通過快照一級表進行回滾,且回滾時無需對快照二級表所管理的數(shù)據(jù)塊的引用計數(shù)做減I操作,耗時大大減少。
[0064]圖3是本發(fā)明磁盤快照回滾裝置第一實施例結(jié)構(gòu)圖,如圖3所示,本發(fā)明實施例所提供的磁盤快照回滾裝置可以由軟件/硬件實現(xiàn)。其中當(dāng)磁盤快照回滾裝置采用軟件實現(xiàn)時,可以集成于虛擬機中。該裝置包括:
[0065]變量設(shè)立模塊10,用于設(shè)立全局快照號作為全局變量,所述全局快照號根據(jù)快照建立的次數(shù)進行取值,對當(dāng)前二級表管理的每個數(shù)據(jù)塊設(shè)立局部編號,所述局部編號根據(jù)所述全局快照號的取值進行取值;
[0066]快照建立模塊12,用于接收快照建立命令,根據(jù)所述快照建立命令拷貝所述當(dāng)前一級表和所述當(dāng)前二級表作為快照一級表和快照二級表,所述快照二級表管理的每個數(shù)據(jù)塊的局部編號用于表征所述快照二級表的版本;
[0067]快照回滾模塊14,用于接收快照回滾命令,所述快照回滾命令中攜帶回滾快照版本號,根據(jù)所述回滾快照版本號查找對應(yīng)的所述快照一級表和所述快照二級表,使所述當(dāng)前一級表指向所述回滾快照版本號對應(yīng)的所述快照二級表。
[0068]具體地,本實施例中的快照回滾方法建立于以下快照建立技術(shù)的基礎(chǔ)之上,具體快照建立技術(shù)包括:
[0069]設(shè)立全局快照號作為全局變量,初始值為I。當(dāng)磁盤建立第一次快照時,全局快照號取值為I ;當(dāng)磁盤建立第二次快照時,全局快照號取值為2,以此類推。對每個當(dāng)前二級表所管理的數(shù)據(jù)塊設(shè)立局部編號,初始值為O。當(dāng)磁盤建立第一次快照時,全局快照號取值為1,當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號為I ;當(dāng)磁盤建立第二次快照時,全局快照號取值為2,當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號為2。同時,建立快照時,拷貝當(dāng)前一級表和所有當(dāng)前二級表作為快照一級表和快照二級表,其中快照二級表所管理的數(shù)據(jù)塊的局部編號與建立快照時的當(dāng)前二級表所管理的數(shù)據(jù)塊的局部編號相同。即當(dāng)磁盤建立第一次快照時,第一個快照二級表所管理的數(shù)據(jù)塊的局部編號為I ;當(dāng)磁盤建立第二次快照時,第一個快照二級表所管理的數(shù)據(jù)塊的局部編號仍為1,第二個快照二級表所管理的數(shù)據(jù)塊的局部編號為2。
[0070]接收寫操作命令,獲取寫操作命令中攜帶待操作數(shù)據(jù)塊的地址。從當(dāng)前一級表和當(dāng)前二級表中查找該待操作數(shù)據(jù)塊的局部編號。
[0071]由于預(yù)先設(shè)定針對磁盤中元數(shù)據(jù)進行寫操作時,保存該元數(shù)據(jù)在原數(shù)據(jù)塊中,然后拷貝該元數(shù)據(jù)至另一目標(biāo)數(shù)據(jù)塊,并將該元數(shù)據(jù)的存儲地址改為指向該目標(biāo)數(shù)據(jù)塊。建立快照后,如果發(fā)生寫操作,由于預(yù)先設(shè)定的磁盤讀寫機制中,會直接對元數(shù)據(jù)在原來的數(shù)據(jù)塊中進行保存,因此可以直接對該元數(shù)據(jù)進行改寫,無需進行寫時拷貝。即假設(shè)某一數(shù)據(jù)塊中如果原本存有數(shù)據(jù),對該數(shù)據(jù)塊建立快照后,該數(shù)據(jù)塊在當(dāng)前二級表中的局部編號應(yīng)該等于全局快照號?,F(xiàn)要對該數(shù)據(jù)塊進行寫操作,根據(jù)預(yù)先設(shè)定的磁盤讀寫機制,對該數(shù)據(jù)塊進行寫操作后,會自動保存該數(shù)據(jù)塊中的數(shù)據(jù)內(nèi)容,而將修改后的數(shù)據(jù)內(nèi)容拷貝到新的數(shù)據(jù)塊中,因此可以直接執(zhí)行寫操作而無需進行寫時拷貝。
[0072]在磁盤使用過程中,磁盤中的數(shù)據(jù)會不斷發(fā)生變化,即對磁盤數(shù)據(jù)