关于qcow2的格式qcow2支持copy-on-write.detail是here。 libvirt是否支持使用copy-on-write克隆qcow2 VM映像。 我找不到任何选项:
的virt克隆
答案 0 :(得分:16)
至少在RHEL 7附带的libvirt, NO 时,virt-manager GUI和virsh命令行工具都不进行复制。用qcow2写你寻求的魔法。他们会将支持文件复制到一个完全独立的新文件,其大小和内容相同。
你能做的是:
qemu-img create -f qcow2 -o backing_file=master.qcow2 clone.qcow2
然后在virt-manager中创建一个新VM,导入 clone.qcow2 作为其后备文件。一旦您拥有了您想要的主映像,这非常适合保留有限的存储空间,以及非常快速地配置新VM。
CAVEAT:一旦您拥有将其用于写时复制后备存储的克隆,主映像 必须 将被视为只读。如果启动VM并更改主映像,则会损坏引用它的所有克隆。如果你想进行更改,你要做的是将主图像克隆到一个新的独立图像(为了讨论,将其称为 new-master.qcow2 ),然后重新点新图片中的克隆:
qemu-img rebase -f qcow2 -b new-master.qcow2 clone.qcow2
qemu-img 会将 master.qcow2 和 new-master.qcow2 之间的差异复制到 clone.qcow2 ,之后,一旦所有写时复制克隆都更新,您就可以安全地删除 master.qcow2 。
答案 1 :(得分:4)
virt-clone
现在有--reflink
,在cp --reflink
的帮助下实现了类似的功能。这需要复制文件系统中的写入支持,但也可以通过libvirt实现其支持链概念。但是volume cloning with --reflink for disk images in libvirt is not yet implemented in either way when the format is qcow2即使它适用于存储在btrfs中的原始图像。
# virt-clone --reflink --auto-clone --original test
ERROR Couldn't create storage volume 'test-clone.qcow2': 'unsupported flags (0x2) in function virStorageBackendCreateQemuImg'`
# virsh
virsh # vol-clone --pool testpool test.qcow2 test-clone.qcow2 --reflink
error: Failed to clone vol from test.qcow2
error: unsupported flags (0x2) in function virStorageBackendCreateQemuImg
然而,libvirt的支持链概念(或后备存储)与qcow2一起使用:
virsh # vol-create-as testpool test-clone.qcow2 20G --backing-vol-format qcow2 --format qcow2 --backing-vol test.qcow2
virsh # vol-dumpxml --pool testpool test-clone.qcow2
...
<backingStore>
<path>/testpool/test.qcow2</path>
<format type='qcow2'/>
...
virsh # domstats --backing testvm
block.0.name=vda
block.0.path=/testpool/test-clone.qcow2
...
block.1.name=vda
block.1.path=/testpool/test.qcow2
block.1.backingIndex=1
通过指定后备存储图像,使用virt-manager创建新卷时也可以使用。
使用qemu-imq独立于libvirt创建的这样一个克隆:
qemu-img create -f qcow2 -o backing_file=test.qcow2 test-clone.qcow2
然后在libvirt中使用的内容与上面用virsh vol-create-as创建的相同。
答案 2 :(得分:-1)
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
您可以将克隆的磁盘映像转换为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
如果您的VM具有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
恢复:
virt-clone将保留与原始克隆磁盘相同的文件格式。
一个好的解决方案是使用virt-sparsify
http://libguestfs.org/virt-sparsify.1.html
减少导出的磁盘映像大小