qemu - 没有图像的 QEMU 快照?
问题描述
我正在使用 VxWorks,一种用于嵌入式系统的实时操作系统。他们最近添加了 QEMU 支持,我一直在努力解决。(我对所有这些技术都很陌生。)我想检查点并重新启动虚拟机,即保存 RAM 和处理器状态并稍后从该点重新加载。
QEMU 对此有一些支持,称为“快照”。但是,我所看到和尝试的所有内容都需要 qcow2 格式的磁盘映像。但是我的模拟没有磁盘,程序直接加载到RAM中运行。
这是我的 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,addr=0x000ffffc,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,addr=0x000ffffc,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,format=qcow2,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/
推荐阅读
- python - 如何在 Python 中并排打印两个 for 循环的结果?
- python - def() 中的错误返回输出
- python - 用于 sftp AND 命令执行的服务器实现(使用 Paramiko)
- javascript - 正则表达式查找 5 个连续的字母(例如 abcde、noprst)
- android - 有没有办法只为某些 Android 版本设置意图过滤器?
- c# - 在 LINQ 方法中使用 StringBuilder 变量
- typescript - 如何键入带枚举的函数
- r - 合并 R 中的两列,其中一列是列表
- mysql - 无法从 AWS EC2 上的 Docker 容器连接到 MySQL
- android - 在设备上安装时执行缩小版本发布后应用程序崩溃