如何合并qemu qcow2磁盘的公共部分

如何合并qemu qcow2磁盘的公共部分

我有一个 qemu 映像,B.qcow2它是A.qcow2.我B.qcow2使用 by创建了一个副本cp B.qcow2 C.qcow2,然后独立地处理这两个B.qcow2副本C.qcow2。因此,B.qcow2C.qcow2最终是不同的,但它们有一个共同的部分(因为 C.qcow2 是从 B.qcow2 复制的)。

为了节省磁盘空间,我想知道是否可以(通过使用 qemu-img 或以编程方式)创建另一个common.qcow2包含 和 的所有公共部分的B.qcow2图像,然后从和C.qcow2中删除这个公共部分,并在这样的图像中重新设置图像的基础一种方式和是基于和是基于?B.qcow2C.qcow2B.qcow2C.qcow2common.qcow2common.qcow2A.qcow2

答案1

诀窍是拥有一个基本图像和两个包含与其差异的图像。这可以通过以下方式实现:

  1. 为避免混淆:mv B.qcow2 common.qcow2
  2. A 上常见的变基:qemu-img rebase -b common.qcow2 A.qcow2
  3. 重新创建B,基于common:git create -b common B.qcow2
  4. 重新调整 C 的共同点:qemu-img rebase -b common.qcow2 C.qcow2

当然,现在 B.qcow2 是一个“空壳”,相对于 common 没有任何变化,而 C 包含 A 和 B 之间的所有变化,但没有办法节省更多空间,假设无论哪一个都没关系这两个文件包含更改,这与任何其他解决方案一样好。

相关内容