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状态转储.
拓展:
快照链,这也是我个人觉得非常有用的一个功能,如果用好了,用处真的非常大