首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libvirt支持在写时复制qcow2吗?

libvirt支持在写时复制qcow2吗?
EN

Stack Overflow用户
提问于 2012-09-12 10:42:59
回答 3查看 17.3K关注 0票数 10

qcow2支持qcow2副本的格式是这里。libvirt支持复制qcow2 VM映像并进行复制.我发现在以下方面没有任何选择:

病毒克隆

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-17 07:36:47

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

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

例:

代码语言:javascript
复制
# 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:

代码语言:javascript
复制
# 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克隆将将您的磁盘映像克隆为qcow2文件格式。

代码语言:javascript
复制
# 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-克隆将保持与原磁盘相同的文件格式。

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

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

减少导出的磁盘映像大小

票数 -3
EN

Stack Overflow用户

发布于 2014-11-14 20:42:56

至少对于RHEL 7、NO提供的libvirt而言,virt管理器GUI和virsh命令行工具都不具备qcow2所寻求的复制-写魔术。他们将复制支持文件到一个新的,完全独立的支持文件,大小和内容相同。

相反,你可以做的是:

代码语言:javascript
复制
qemu-img create -f qcow2 -o backing_file=master.qcow2 clone.qcow2

然后在virt管理器中创建一个新的VM,导入clone.qcow2作为它的备份文件。这样可以很好地保存有限的存储空间,并且在获得您想要的主映像之后,可以非常迅速地提供新的VM。

警告:主映像必须被视为只读的,一旦您有克隆使用它作为拷贝上的备份存储。如果您旋转一个VM并更改主映像,您将破坏引用它的所有克隆。如果您想进行更改,您所做的是将主图像克隆到一个新的、独立的映像中(为了便于讨论,将其命名为new . you 2),然后将克隆人重新指向新的图像:

代码语言:javascript
复制
qemu-img rebase -f qcow2 -b new-master.qcow2 clone.qcow2

qemu-img将将master.qcow2和new.qemu 2之间的差异复制到clone.qcow2中,在此之后,一旦所有复制到写入的克隆都被更新,您就可以安全地删除master.qcow2。

票数 25
EN

Stack Overflow用户

发布于 2017-01-31 21:41:01

virt-clone现在有了--reflink,它在cp --reflink的帮助下实现了类似的功能。这需要对文件系统中的写支持进行复制,但也可以通过libvirt的支持链概念来实现。但是,尽管当格式为qcow2时,还没有以两种方式实现libvirt中磁盘映像的卷克隆。适用于存储在btrfs中的原始图像,但它仍然有效。

代码语言:javascript
复制
# 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:

代码语言:javascript
复制
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管理器通过指定备份存储映像创建新卷时也有效。

这样的克隆是用qemu创建的,独立于libvirt:

代码语言:javascript
复制
qemu-img create -f qcow2 -o backing_file=test.qcow2 test-clone.qcow2

然后在libvirt中使用,它将与上面使用创建的相同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12386398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档