基于单个镜像创建多个虚拟机

Create multiple VMs based on single image

我想使用 libvirt 一次基于同一映像 运行 多个域 (VM)。不应修改图像本身。该图像应被视为起点或模板。

一个明显的可能性是为每个域创建一个(临时)副本。由于图像可能占用多个 GB,我不想每次都创建它的完整副本。它只想存储差异。据我了解文档,外部快照正在使用这种技术。但是好像快照绑定了一个域,我不能用它们作为模板。

根据documentation of qemu,我可以在传递选项-snapshot 的同时直接使用qemu。只要我没有手动提交更改,它应该可以工作。

qemu-system-x86_64 -snapshot -hda <image>

有没有办法在 libvirt 中实现类似的东西?

您只需要使用 qcow2 支持文件即可。在接下来的步骤中,我假设您已经拥有作为 qcow2 的基本映像。

创建由您的基本映像支持的磁盘映像:

qemu-img create -f qcow2 \
                -o backing_file=/path/to/base/image.qcow2 \
                /path/to/guest/image.qcow2

然后在您的访客中,使用 /path/to/guest/image.qcow2 作为磁盘。此文件只会得到与基本图像的差异。

查看 qemu-img 的手册页以获取更多详细信息。 qemu-img 也有命令将覆盖文件更改提交到基础镜像,在另一个基础上变基等。