参考:
https://blog.51cto.com/3646344/2096347
https://blog.51cto.com/3646344/2096351(磁盘外部快照)
API接口:
http://www.cnblogs.com/sammyliu/p/4558638.html
qemu-guest-agent冻结文件系统保证数据的一致性:
https://blog.csdn.net/zouyee/article/details/49103077
公司项目虚拟机打快照流程:
关机状态下打快照:
在给虚拟机打快照的时候,如果是给关闭状态下的虚拟机打快照,如果是从磁盘启动的虚拟机快照就调用qemu命令打快照,如果是从云硬盘启动的快照,需要创建云硬盘快照,用ceph打快照。最后如果虚拟机挂载有云硬盘,则尝试对所有的云硬盘创建快照,如果有一块创建失败则整个任务失败。
开机状态下打快照:
在给虚拟机打快照的时候,如果是给开机状态下的虚拟机打快照,如果是从磁盘启动的快照就直接打快照,先判断该虚拟机有没有内存,如果有内存我们需要用qemu-ga对虚拟机文件系统进行短暂的冻结,agent冻结文件系统时会进行flush操作,保证了数据的一致性,然后再用libvirt命令打快照,如果没有内存就用qemu打快照。如果是从云硬盘启动的快照,需要创建云硬盘快照。最后如果虚拟机挂载有云硬盘,则尝试对所有的云硬盘创建快照,如果有一块创建失败则整个任务失败。
对从磁盘启动的虚拟机用qemu(冷快照,内部快照)和libvirt(热快照,外部快照)工具打快照,从云硬盘启动的虚拟机用ceph打快照
qemu-kvm1.5.3版本不支持在虚拟机开机的情况下创建外部快照,只有在虚拟机关闭的情况下创建外部快照,创建快照的时间在1s以内,并且创建出来的快照文件大小递增且在10M以上
qemu2.5版本中支持在虚拟机开机的情况下创建外部快照,在创建第一个外部快照时用时在10~20S,往后创建外部快照时均为1s以内;并且创建的快照大小为第一个快照较大,往后的快照大小均不足1M。
回滚虚拟机流程: