快照功能还是蛮有趣的,就是资料比较少,这边万能菜道人特意整理了一下。
参考内容:
QEMU checkpoint(snapshot) 使用-pudn.com
KVM&QEMU学习笔记(二)-蒲公英云 (dandelioncloud.cn)
在线迁移存储 - 爱码网 (likecs.com)
场景:
window下使用qemu启动debian10
镜像格式:qcow2
介绍
qemu的快照功能到底是什么?
QEMU的快照功能就是将虚拟机的磁盘信息与内存信息进行有选择的备份下来,然后提供了恢复的功能,这就允许用户在为虚拟机创建一份虚拟机的备份,以便在以后需要的时候可以快速恢复到该状态。
snapshot的分类?
应该大致分为两类:
磁盘快照
qemu-img.exe 命令行来创建
磁盘快照包含磁盘中的存储信息,包括文件夹、文件的内容等等。
只能离线,即虚拟机在关闭的状态下进行创建快照。(运行下磁盘内容可能不太稳定)
检查点(checkpoint)快照
qemu 的monitor监视器(运行起来使用ctrl+alt+2才能看到)来使用命令创建。
检查点快照除了包含磁盘快照的内容,还将正在运行的内存信息也包括在内。
必须在线,即虚拟机在运行的状态下进行场景快照,因为不运行哪来的正在运行的信息。
可以用于快速启动(即VM的挂起和恢复功能!)
使用细节
磁盘快照的使用细节
磁盘快照按道理应该可以保存为内部文件(qcow2镜像内)和外部文件(独立存在)。
保存在内部的磁盘快照
创建快照,运行以下命令:
qemu-img.exe snapshot -c snapshot_name vm_name.qcow2
其中,snapshot_name是您想要给快照命名的名称,vm_name.qcow2是要创建快照的虚拟机磁盘镜像的名称。该命令将创建一个名为snapshot_name的新快照。
使用快照就按之前能够正常运行的处理,你可以尝试添加和删除几个文件。
恢复快照:如果您想恢复到之前创建的快照,运行以下命令:
qemu-img.exe snapshot -a snapshot_name vm_name.qcow2
其中,snapshot_name是您之前创建的快照的名称,vm_name.qcow2是虚拟机磁盘镜像的名称。该命令将使虚拟机恢复到创建快照时的状态。
删除快照:
qemu-img.exe snapshot -d snapshot-name vm_name.qcow2
查看镜像中保存的快照列表:
qemu-img snapshot -l vm_name.qcow2
注意:尽量不要在虚拟机在运行的状态下来操作磁盘快照啊,可能会损坏的。
保存在外部的磁盘快照
该内容和下面的检查点快照的使用细节中的独立存储的方式是一致的!
思路就是:
先创建一个child_image。
然后在这个child_image上进行磁盘快照!
检查点快照的使用细节
检查点快照按道理应该也可以保存为内部文件(qcow2镜像内)和外部文件(独立存在)。
无论创建内部文件还是外部文件,都需要先启动虚拟机!
接着ctrl+alt+2进入monitor命令行:
保存在内部的检查点快照
创建内部文件:
创建保存在qcow2镜像内部的检查点快照:
savevm vm1
注意:该操作实际相当于挂起了一个虚拟机备份,后面可以使用loadvm进行恢复!
查看已存在的快照(包含磁盘快照和检查点快照,大小是不一样的)
info snapshots
直接加载内部快照
方式一:
qemu已经启动该镜像了,可以使用命令直接恢复
loadvm vm1
方式二:
启动虚拟机的脚本修改为如下格式:
qemu-system-x86_64.exe -m 2G -smp 2 -device e1000e,ne ...... -accel tcg -hda myimg.qcow2 -loadvm vm1
注意将qcow2放到后面哦,体验一下三秒钟启动的惊艳感觉吧!
删除内部快照
delvm vm1
独立存储的检查点快照
创建外部文件
同样要使用minotor的命令,ctrl+alt+2:
这里先了解一下使用的ide0-hd0,可以使用一下命令查看来源:
info block
然后创建外部文件:
snapshot_blkdev ide0-hd0 vm1.qcow2 qcow2
然后就可以在文件夹中找到新的vm1.qcow2文件了!
你可能会发现这个vm1.qcow2的大小很小,就几M的样子。
那是因为外部快照存储的是新变化的内容,你刚刚启动的虚拟机镜像已经成为了base_image,不允许修改的啦!
即:
base_image.qcow2 -> vm1.qcow2 两个累加出来的虚拟机!
这个很小的vm1.qcow2可以作为我们支持独立的磁盘快照和检查点快照的基础!
所以,所谓的独立存储就是在创建child_image基础之后,然后以这个child_image来做保存内部的磁盘快照,或者是检查点快照。
这里你应该发现在使用snapshot_blkdev之后,monitor的命令行已经在新的vm1.qcow2上了。
这时我们新建一个内部检查点快照:
savevm new_vm1
你会发现该vm1.qcow2会膨胀到一两百M左右,这表示检查点快照应该存储成功了。
来使用独立存储文件来启动检查点快照吧:
qemu-system-x86_64.exe -m 2G -smp 2 -device e1000e,ne ...... -accel tcg -hda vm1.qcow2 -loadvm new_vm1
这样就启动成功了!