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

时间:2012-09-12 10:42:59

标签: qemu kvm libvirt

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

  

的virt克隆

3 个答案:

答案 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

减少导出的磁盘映像大小