1. 快照分类

1.1 磁盘快照:主要用于虚拟机备份等场合


按保存信息分为:


内置快照:快照数据和base磁盘(概念不清楚,待查)数据放在一个qcow2中


外置快照:快照数据在单独qcow2文件中存放


按虚拟机状态分为:


关机态快照:可以保证数据一致性


运行态快照:无法保证


按磁盘数量:


单盘


多盘


1.2 内存快照

1.3 检查点快照

2. 快照生成

2.1 内置快照




内置快照又可以细分一下:-


内置磁盘快照(Internal disk snapshot):


快照点的磁盘状态,数据和快照保存在单个qcow2文件中,虚拟机运行状态和关闭状态都


可以创建.


Libvirt 使用 'qemu-img' 命令创建关机状态的磁盘快照.


Libvirt 使用 'savevm' 命令创建运行状态的磁盘快照.


内置系统还原点(Internal system checkpoint):


内存状态,设备状态和磁盘状态,可以为运行中的虚拟机创建,所有信息都存储在


同一个qcow2文件中,只有在运行状态才能创建内置系统还原点.


Libvirt 使用'savevm' 命令来创建这种快照




2.1.1 利用qemu-img命令:

网上教程很多,但我试验后发现,快照可以生成,但是虚拟机恢复到快照并不生效,还发生过恢复之后虚拟机崩溃的状况。而且我在网上也遇到了和我情况类似的人,所以目前不建议用这种方法。








2.1.2 利用libvirt

根据实例名称查看其快照链


virsh snapshot-list domain-name --tree


domain-name:实例名称


--tree:(可选)以树形形式列出




创建快照,并为快照命名


virsh snapshot-create-as domain-name snapshot-name


domain-name:实例名称


snapshot-name:快照名称(标签)




快照回滚


根据提供的快照,还原对应实例


virsh snapshot-revert domain-name snapshot-name


domain-name:实例名称


snapshot-name:快照名称(标签)




根据提供的实例名称,查询其块设备


virsh domblklist domain-name


domain-name:实例名称


注:由于openstack创建的块设备名称均为uuid,所以此命令可以很方便的找到对应是虚拟机文件位置。


2.2

外置快照


试验,但未成功,正在研究中。


外置快照想要回滚需要涉及到一个概念就是快照链的缩短,也即合并快照文件,我试验了外置快照创建是没有问题的。




创建外置快照

virsh snapshot-create-as --domain testSnap snap1 snap1-desc \ 

 --disk-only --diskspec vda,snapshot=external,file=/tmp/images/sn1-of-testSnap.qcow2 \ 

 --atomic





通过virsh domblklist检查此时实例依赖块文件已经切换到sn1-of-testSnap.qcow2




但当我合并快照文件的时候出现问题,


 


不支持热合并,但是实例关机情况下没法进行此操作。待解决。






外置快照(External Snapshots) -- 当一个快照被创建时,创建时当前的状态保存在当前使用


的磁盘文件中,即成为一个backing file.


此时一个新的overlay被创建出来保存往后的数据.


这个也可以细分一下:


外置磁盘快照(External disk snapshot):


磁盘的快照被保存在一个文件中,创建时间点以后的数据被记录到一个新的qcow2文件中.


同样可以在运行和关闭状态创建.


Libvirt 使用 'transaction' 命令来为运行状态创建这种快照.


Libvirt 使用'qemu-img' 命令为关闭状态创建这种快照(截止目前功能还在开发中).


外置系统还原点(External system checkpoint):


虚拟机的磁盘状态将被保存到一个文件中,内存和设备的状态将被保存到另外一个新的文件中,


(这个功能社区也还在开发完善中).






3. VM状态(VM state):

保存运行状态虚拟机的内存设备状态信息至文件,可以通过此文件恢复到保存时的状态,有点类似系统


的休眠.(注意创建VM状态保存的时候VM磁盘必须是未发生写入改动的)


Libvirt使用 'migrate' (to file)命令来完成VM状态转储.




拓展:


快照链,这也是我个人觉得非常有用的一个功能,如果用好了,用处真的非常大