一、簡介:
snapshot(快照)可以把虛擬機器某個時間點的記憶體、磁碟檔案等的狀態儲存為一個鏡像檔案。通過這個鏡像檔案,可以在以後的任何時間來恢複虛擬機器在當時建立snapshot的狀態,這個在使用虛擬機器來做測試的時候很有用。
二、建立快照-KVM:
需注意在虛擬機器運行時建立快照不會報錯,但會出現一些莫名其妙的問題,像恢複快照失敗、快照名為空白等,所以在建立快照前要先關閉虛擬機器。
2.1建立
//raw格式
kvm虛擬機器的raw格式磁碟檔案不支援快照功能,在建立快照前需要先轉換為qcow或qcow2格式。
[root@kvmserver xp_4_test]# qemu-img info disk.raw
image: disk.raw
file format: raw
virtual size: 100M (104857600 bytes)
disk size: 6.1M
[root@kvmserver xp_4_test]# qemu-img snapshot -c s1 disk.raw //raw格式的轉換報錯
qemu-img: Could not create snapshot'snapshot01': -95 (Operationnot supported)
//qcow2格式
[root@kvmserver xp_4_test]# qemu-img info disk.qcow2
image:disk.qcow2
file format: qcow2
virtual size: 100M (104857600 bytes)
disk size: 4M
[root@kvmserver xp_4_test]# qemu-img snapshot -c s1 disk.qcow2
[root@kvmserver xp_4_test]# qemu-img info disk01.qcow2//可以看到剛建立的快照s1
image: disk.qcow2
file format: qcow2
virtual size: 100M (104857600 bytes)
disk size: 80M
cluster_size: 65536
Snapshot list:
ID TAG VMSIZE DATE VM
CLOCK
1 s1 02012-05-10 15:20:40 00:00:00.000
[root@kvmserver xp_4_test]# ls -lh
總用量 7G
-rw-r--r--. 1 qemu qemu 108M 5月 10 15:03disk.qcow2
-rw-r--r--. 1 qemu qemu 6.5G 5月 1015:03xp_4_test.img
建立快照後不會有新的鏡像檔案產生;disk.qcow2鏡像檔案建立時的大小為100M,這裡顯示的大小為108M,這是因為快照位於disk.qcow2鏡像檔案內而沒有單獨產生一個檔案。
2.2列出鏡像的所有快照
[root@kvmserver xp_4_test]# qemu-img snapshot -l disk.qcow2
Snapshot list:
ID TAG VMSIZE DATE VM
CLOCK
1 s1 02012-05-10 15:20:40 00:00:00.000
2 s2 02012-05-10 15:32:37 00:00:00.004
2.3快照恢複
恢複快照同樣也需要在關閉虛擬機器的情況下進行,下面的恢複會使虛擬機器恢複到2012-05-1015:20:40的狀態,在此時間點後對磁碟disk.qcow2的操作將全部失效
[root@kvmserver xp_4_test]# qemu-imgsnapshot -a s1 disk.qcow2
2.4 刪除快照
[root@kvmserver xp_4_test]# qemu-img snapshot -d s1 disk.qcow2
三、利用libvirt使用快照
1 同樣先確認鏡像的格式為qcow2
[root@nc1 boss]#qemu-img info test.qcow2
image: test.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.1G
cluster_size: 65536
2 建立並啟動以test.qcow2作為鏡像的虛擬機器,假設虛擬機器名稱為testsnp,如果虛擬機器沒有啟動,也可建立快照,但是意義不大,快照size為0
開始使用設定檔來建立指定虛擬機器的快照
<domainsnapshot>
<name>snapshot02</name> //快照名
<description>Snapshot of OS install and updates</description>//描述
<disks>
<disk name='/home/guodd/boss/test.qcow2'> //虛擬機器鏡像的絕對路徑
</disk>
<disk name='vdb' snapshot='no'/>
</disks>
</domainsnapshot>
儲存為snp.xml,開始建立
[root@nc1 boss]#virsh snapshot-create testsnp snp.xml //即以snp.xml作為快照的設定檔為虛擬機器testsnp建立快照
Domain snapshot snapshot02 created from 'snp.xml'
3 查看虛擬機器testsnp已有的快照
[root@nc1 boss]# virsh snapshot-list testsnp
Name Creation Time State
---------------------------------------------------
1315385065 2011-09-07 16:44:25 +0800 running //1315385065建立時間比snapshot02早
snapshot02 2011-09-07 17:32:38 +0800 running
同樣地,也可以通過qemu-img命令來查看快照
[root@nc1 boss]# qemu-img info test.qcow2
image: test.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.2G
cluster_size: 65536
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK
1 1315385065 149M 2011-09-07 16:44:25 00:00:48.575
2 snapshot02 149M 2011-09-07 17:32:38 00:48:01.341
4 可以通過snapshot-dumpxml命令查詢該虛擬機器某個快照的詳細配置
[root@nc1 boss]# virsh snapshot-dumpxml testsnp 1315385065
<domainsnapshot>
<name>1315385065</name>
<description>Snapshot of OS install and updates</description>
<state>running</state> //虛擬機器狀態 虛擬機器關機狀態時建立的快照狀態為shutoff(虛擬機器運行時建立的快照,即使虛擬機器狀態為shutoff,快照狀態依然為running)
<creationTime>1315385065</creationTime> //虛擬機器的建立時間 Readonly 由此可以看出沒有給快照指定名稱的話,預設以時間值來命名快照
<domain>
<uuid>afbe5fb7-5533-d154-09b6-33c869a05adf</uuid> //此快照所屬的虛擬機器(uuid)
</domain>
</domainsnapshot>
查看第二個snapshot
[root@nc1 boss]# virsh snapshot-dumpxml testsnp snapshot02
<domainsnapshot>
<name>snapshot02</name>
<description>Snapshot of OS install and updates</description>
<state>running</state>
<parent>
<name>1315385065</name> //當前快照把前一個快照作為parent
</parent>
<creationTime>1315387958</creationTime>
<domain>
<uuid>afbe5fb7-5533-d154-09b6-33c869a05adf</uuid>
</domain>
</domainsnapshot>
5 查看最新的快照資訊
[root@nc1 boss]# virsh snapshot-current testsnp
<domainsnapshot>
<name>1315385065</name>
<description>Snapshot of OS install and updates</description>
<state>running</state>
<creationTime>1315385065</creationTime>
<domain>
<uuid>afbe5fb7-5533-d154-09b6-33c869a05adf</uuid>
</domain>
</domainsnapshot>
6 使用快照,指定使用哪一個快照恢複虛擬機器
[root@nc1 boss]# virsh snapshot-revert testsnp snapshot02
7 刪除指定快照
[root@nc1 boss]# virsh snapshot-delete testsnp snapshot02
Domain snapshot snapshot02 deleted
附:
Snapshot (help keyword 'snapshot')
snapshot-create Create a snapshot from XML
snapshot-create-as Create a snapshot from a set of args
snapshot-current Get the current snapshot
snapshot-delete Delete a domain snapshot
snapshot-dumpxml Dump XML for a domain snapshot
snapshot-list List snapshots for a domain
snapshot-revert Revert a domain to a snapshot
http://www.ibm.com/developerworks/tivoli/library/t-snaptsm1/index.html#row