3

我正在为 aarch64 使用 qemu 模拟器,并希望创建一个外部检查点(或快速转发)以保存从创建检查点时重新启动系统所需的所有内容。(其实我是想跳过开机步骤)我只在qemu VM快照和快进上发现了一些东西,但对模拟器不起作用。qemu 模拟器有检查点功能吗?

4

2 回答 2

2

最小的例子

彼得的回答对我有用,但让我提供一个完全可重现的例子。

我已经完全自动化了一切: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

计数继续。然后,如果我们加载虚拟机:

loadvm my_snap_id

计数回到我们保存的地方。这表明 CPU 和内存状态已恢复。

我们还可以验证磁盘状态是否也反转了。来宾:

echo 0 >f

监视器:

savevm my_snap_id

来宾:

echo 1 >f

监视器:

loadvm my_snap_id

来宾:

cat f

输出是0.

于 2018-02-10T18:50:16.037 回答
2

savevm 快照应该做你想做的事。简短的回答是,您需要为要保存的快照设置一个 QCOW2 磁盘,然后在监视器中您可以使用“savevm”命令拍摄快照。然后命令行“-loadvm”选项将让您从那里恢复。这一切在模拟 AArch64 时都可以正常工作。

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

于 2016-10-31T17:58:53.653 回答