qemu模拟器是否具有检查点功能?

时间:2016-10-24 21:13:01

标签: qemu checkpoint

我正在为aarch64使用qemu模拟器,并希望创建一个外部检查点(或快速转发),以便在我创建检查点时保存所有我需要重新启动系统。 (事实上​​,我想跳过启动步骤)我只在qemu VM快照和快进上找到了一些东西,但它对模拟器不起作用。 qemu模拟器有没有检查点功能?

2 个答案:

答案 0 :(得分:1)

savevm快照应该可以执行您想要的操作。简短的回答是您需要为要保存的快照设置QCOW2磁盘,然后在监视器中可以使用'savevm'命令拍摄快照。然后命令行'-loadvm'选项将允许您从那里恢复。这一切都可以很好地模拟AArch64。

https://translatedcode.wordpress.com/2015/07/06/tricks-for-debugging-qemu-savevm-snapshots/有一个更详细的教程。

答案 1 :(得分:0)

最小例子

Pete的答案对我有用,但让我提供一个完全可重复的例子。

我完全自动化了所有内容:https://github.com/cirosantilli/linux-kernel-module-cheat/tree/1e0f0b492855219351b0bfa2eec4d3a6811fcaaa#snapshot

关键步骤是将图像转换为qcow2,如下所述:https://docs.openstack.org/image-guide/convert-images.html

cd buildroot/output.x86_64~/images
qemu-img convert -f raw -O qcow2 rootfs.ext2 rootfs.ext2.qcow2

使用的最终QEMU命令是:

./buildroot/output.x86_64~/host/usr/bin/qemu-system-x86_64 -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1  -M pc -append 'root=/dev/vda nopat nokaslr norandmaps printk.devkmsg=on printk.time=y console=ttyS0' -device edu -device virtio-net-pci,netdev=net0 -drive file=./buildroot/output.x86_64~/images/rootfs.ext2.qcow2,if=virtio,format=qcow2 -kernel ./buildroot/output.x86_64~/images/bzImage  -nographic

要测试它,请登录VM,然后运行:

i=0; while true; do echo $i; i=$(($i + 1)); sleep 1; done

然后在另一个shell上打开监视器:

telnet localhost 45454
savevm my_snap_id

计票继续进行。然后,如果我们加载vm:

loadvm my_snap_id
计数可以追溯到我们保存的地方。这表明CPU和内存状态已被恢复。

我们还可以验证磁盘状态是否也已反转。旅客:

echo 0 >f

显示器:

savevm my_snap_id

旅客:

echo 1 >f

显示器:

loadvm my_snap_id

旅客:

cat f

输出为0