基于单个镜像创建多个虚拟机
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 也有命令将覆盖文件更改提交到基础镜像,在另一个基础上变基等。
我想使用 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 也有命令将覆盖文件更改提交到基础镜像,在另一个基础上变基等。