libvirt是否支持使用copy on copy克隆qcow2

hel*_*lwq 7 kvm qemu libvirt

关于qcow2的格式qcow2支持copy-on-write.detail 在这里.libvirt是否支持使用copy-on-write克隆qcow2 VM映像.我找不到任何选项:

VIRT克隆

cbe*_*nna 18

至少在RHEL 7附带的libvirt中,NO,virt-manager GUI和virsh命令行工具都不会使用qcow2进行写入时复制魔术.他们会将支持文件复制到一个完全独立的新文件,其大小和内容相同.

你可以做的是:

qemu-img create -f qcow2 -o backing_file=master.qcow2 clone.qcow2
Run Code Online (Sandbox Code Playgroud)

然后在virt-manager中创建一个新VM,导入clone.qcow2作为其后备文件.一旦您拥有了您想要的主映像,这非常适合保留有限的存储空间,以及非常快速地配置新VM.

CAVEAT:一旦你有一个克隆用于写入时复制的后备存储,主映像必须被视为只读.如果启动VM并更改主映像,则会损坏引用它的所有克隆.如果你想进行更改,你要做的是将主图像克隆到一个新的独立图像(为了讨论而称之为new-master.qcow2),然后将克隆重新指向新图像:

qemu-img rebase -f qcow2 -b new-master.qcow2 clone.qcow2
Run Code Online (Sandbox Code Playgroud)

qemu-img会将master.qcow2new-master.qcow2之间的差异复制到clone.qcow2中,之后一旦更新了所有写时复制克隆,就可以安全地删除master.qcow2.


小智 -3

virt-clone 会将您的磁盘映像克隆为与原始文件格式相同的文件格式。

如果您的原始磁盘是 LVM 分区,那么您必须克隆到磁盘原始格式映像,因为 lvm 分区是原始设备

例如:

# virt-clone -d -o winxp -n winxpclone -f winxpclone.img

# qemu-img info winxpclone.img 
image: winxpclone.img
file format: raw
virtual size: 5.0G (5368709120 bytes)
disk size: 3.1G
Run Code Online (Sandbox Code Playgroud)

您可以将克隆的磁盘映像转换为 qcow2:

# qemu-img convert -f raw winxpclone.img -O qcow2 winxpclone.qcow2

# qemu-img info !$ 
qemu-img info winxpclone.qcow2 
image: winxpclone.qcow2
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 3.1G
cluster_size: 65536
Run Code Online (Sandbox Code Playgroud)

如果您的虚拟机具有 qcow2 文件格式磁盘映像,则 virt-clone 会将您的磁盘映像克隆为 qcow2 文件格式

# virt-clone -d -o winxpclone -n winxpcloneclone -f winxpcloneclone.img

# qemu-img info winxpcloneclone.img 
image: winxpcloneclone.img
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: 3.1G
cluster_size: 65536
Run Code Online (Sandbox Code Playgroud)

恢复:

virt-clone 将在克隆磁盘上保留与原始磁盘相同的文件格式。

一个好的解决方案是使用 virt-sparsify

http://libguestfs.org/virt-sparsify.1.html

减少导出的磁盘映像大小

  • OP要求写入时复制,您的示例都没有解决这个问题 (4认同)