Ubuntu12.10 下搭建基於KVM-QEMU的虛擬機環境(十四)

今天我們繼續試驗snapshot的功能。

1.       啓動虛擬機,在空的D盤上新建一個文本文檔test.txt;

2.       定義創建snapshotXML:

<domainsnapshot>

     <name>snap1</name>

    <disk name='hda'  snapshot='external'>

      <driver  type='qcow2'/>

    </disk>

    <disk name='hdb'  snapshot='external'>

      <driver  type='qcow2'/>

    </disk>

</domainsnapshot>

也即定義了創建這個虛擬機的外部快照。

3.       執行創建外部快照的命令:

命令執行顯示“snap1”的快照創建成功。

4.       查看快照創建情況:

virshsnapshot-list 查看“snap1”快照已經創建,是個磁盤快照。

 

同時到虛擬機定義目錄下可以看到 xp_c.snap1 xp_d.snap1已經新生成出來。

 

目前虛擬機D盤裏有個叫test.txt的文本文件,也即做這個快照時的D盤狀態。到目前爲止xp_d.img已經變成只讀,之後所有的改變都會寫入到xp_d.snap1裏面。

 

5.       D盤再創建一個文本文件:test2.txt

目前虛擬機裏D盤的狀態是有2個文本文檔:test.txt test2.txt

 

6.       修改創建snapshotXML:

<domainsnapshot>

    <name>snap2</name>

    <disk name='hda'  snapshot='external'>

      <driver  type='qcow2'/>

    </disk>

    <disk name='hdb'  snapshot='external'>

      <driver  type='qcow2'/>

    </disk>

</domainsnapshot>

重新執行上述步驟3-4,我們發現snap2快照也被創建出來了。到目前爲止xp_d.snap1已經變成只讀,之後所有的改變都會寫入到xp_d.snap2裏面。

 

7.       現在我們來看一下snap2snap1和原始鏡像的關係:qemu-imginfo xp_d.snap2

可以看到 xp_d.snap2 backingfile xp_d.snap1,而 xp_d.snap1 backing file xp_d.img。也就是說,當打快照的時候,原來的鏡像文件就成爲快照鏡像的parent,總的快照路徑上是單向的繼承的關係:

xp_d.img ——> xp_d.snap1 ——> xp_d.snap2 …….

 

這種快照關係如果能夠很好的組織維護,那麼就能起到一個很好的類似備份的效果,因爲打快照的時候一般都是在系統完好的時候,如果在打完快照又做了一些系統改變(如裝了一個新的軟件)導致系統損壞,那麼可以通過還原到之前的快照點來恢復系統。假設我們往D盤放了一個帶病毒的test3.exe:

 

用了一會發現系統越來越慢,我們決定恢復到snap1的快照去,該怎麼做呢?

 

8.       系統還原到快照1virshsnapshot-revert XP_VM3 snap1

可惜目前版本的libvirt還不支持對外部快照的還原,對內部快照還原已經實現。

這種情況下,我們只好採用一種變通的方式:

snap1合併到parent:

經過這個合併後,快照1的變動合併到了母鏡像中(不包括快照2以後的任何改變)。

然後重新定義一個以xp_c.imgxp_d.img的虛擬機,重新啓動後,我們看到系統D盤裏只有打快照2之前的test.txttest2.txt,而不包括打快照2之後的test3.exe及其他改變,也就恢復到了一個“中病毒”之前的狀態:

 

相信過一段時間支持外部快照恢復的libvirt版本也會完成,到時候就沒那麼麻煩了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章