从快照以编程方式运行 QEMU VM 实例

Ofi*_*ael 5 system kvm qemu libvirt

我有一个 QEMU 映像,其中存储了快照。现在我正在使用 libvirt 来启动它。

但是,我希望能够从同一图像/快照运行多个实例。

我想我可以通过克隆 virtual-hd 并安装/创建一个新域(virsh)然后运行从快照恢复来做到这一点。但我希望能够在从我决定需要运行图像 X 的另一个实例到该实例从存储的快照运行的时间之间以尽可能短的延迟“即时”完成此操作。

有人做过类似的事吗?我开始思考也许 libvirt 的级别还不够低?

[编辑:抱歉,如果这还不清楚 - 我正在谈论 RAM+HD 快照,而不仅仅是 HD 快照,我已经知道如何创建...]

谢谢

6EQ*_*UJ5 3

我能够使用如下命令从同一个快照运行多个并发 qemu。(显然-arm-kernel-cpu等参数在您的情况下会有所不同)

qemu-system-arm -hda snapshot.qcow2 -snapshot -kernel some_vmlinux \
                -serial stdio -append 'root=/dev/sda2 rootfstype=ext4 rw'\
                -cpu arm1176 -m 256 -M versatilepb
Run Code Online (Sandbox Code Playgroud)

这里重要的参数是-snapshot,以便临时内存用于磁盘写入。

没有尝试过强制写回底层设备,我怀疑如果这是可能的并且它发生了,可能会发生各种破坏......基本上,不要忘记这个-snapshot论点!

如果您想要每个实例都有不同的可写存储,您可能需要添加第二个虚拟硬盘并以某种方式安装通用快照:

qemu-system-arm -hda snapshot.qcow2 -snapshot -kernel some_vmlinux \
                -serial stdio -append 'root=/dev/sda2 rootfstype=ext4 rw'\
                -cpu arm1176 -m 256 -M versatilepb -hdb drive_system1.img &
qemu-system-arm -hda snapshot.qcow2 -snapshot -kernel some_vmlinux \
                -serial stdio -append 'root=/dev/sda2 rootfstype=ext4 rw'\
                -cpu arm1176 -m 256 -M versatilepb -hdb drive_system2.img &
Run Code Online (Sandbox Code Playgroud)

如果您使用网络,请不要忘记使 MAC 地址和任何hostfw端口值不同。