没有图像的 QEMU 快照?

问题描述

我正在使用 VxWorks,这是一种用于嵌入式系统的实时操作系统。他们最近添加了 QEMU 支持,我一直在努力解决这个问题。 (我对所有这些技术都比较陌生。)我想检查点并重新启动虚拟机,即保存 RAM 和处理器状态,然后从该点重新加载。

QEMU 对这个叫做“快照”的东西有一些支持。但是,我所看到和尝试的所有内容都需要 qcow2 格式的磁盘映像。但是我的仿真没有磁盘,程序直接加载到内存中运行。

这是我的 QEMU 命令:

qemu-system-aarch64 -m 4096M -smp 4 -machnie xlnx-zcu102 -device loader,file=~/vxworks_21.03/workspace3/QEMU_helloWorld/default/vxWorks,addr=0x00100000  -nographic  -monitor telnet:127.0.0.1:35163,server,Nowait  -serial telnet:127.0.0.1:39251,server  -device loader,file=~/vxworks_21.03/workspace3/vip_xlnx_zynqmp_smp_64/default/xlnx-zcu102-rev-1.1.dtb,addr=0x0f000000 -device loader,addr=0x000ffffc,data=0xd2a1e000,data-len=4 -device loader,cpu-num=0   -nic user -nic user -nic user -nic user,id=n0,hostfwd=tcp:127.0.0.1:0-:1534,hostfwd=udp:127.0.0.1:0-:17185

然后我登录监视器并:

$ telnet 127.0.0.1 35163
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
QEMU 5.2.0 monitor - type 'help' for more information
(qemu) savevm
Error: No block device can accept snapshots

我尝试了很多方法,比如创建一个空磁盘映像,或者使用 snapshot_blkdev 命令,但到目前为止都没有成功。

主机是运行在 x86 桌面上的 RedHat Linux 8.4,来宾是 ARM64。

解决方法

事实证明,执行快照需要磁盘映像,但您不必将其连接到来宾。为此,您可以使用 if=none 传递 qemu -drive 参数。像这样:

-drive if=none,format=qcow2,file=dummy.qcow2

这里是整个工作序列:

$ qemu-img create -f qcow2 dummy.qcow2 32M
$ qemu-system-aarch64 -m 4096M -smp 4 -machnie xlnx-zcu102 -device loader,file=vxWorks,addr=0x00100000  -nographic  -monitor telnet:127.0.0.1:35163,server,nowait  -serial telnet:127.0.0.1:39251,server  -device loader,file=xlnx-zcu102-rev-1.1.dtb,addr=0x0f000000 -device loader,addr=0x000ffffc,data=0xd2a1e000,data-len=4 -device loader,cpu-num=0   -nic user -nic user -nic user -nic user,id=n0,hostfwd=tcp:127.0.0.1:0-:1534,hostfwd=udp:127.0.0.1:0-:17185 -snapshot -drive if=none,file=dummy.qcow2

然后在监控终端savevm和loadvm工作:

$ telnet 127.0.0.1 35163
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
QEMU 5.2.0 monitor - type 'help' for more information
(qemu) savevm save1
(qemu) info snapshots
List of snapshots present on all disks:
ID        TAG               VM SIZE                DATE     VM CLOCK     ICOUNT
--        save1             44.3 MiB 2021-06-28 10:08:28 00:00:05.952
(qemu) loadvm save1

此信息要感谢 Peter Maydell 和他的博文:https://translatedcode.wordpress.com/2015/07/06/tricks-for-debugging-qemu-savevm-snapshots/