我有一个 qemu 映像,B.qcow2
它是A.qcow2
.我B.qcow2
使用 by创建了一个副本cp B.qcow2 C.qcow2
,然后独立地处理这两个B.qcow2
副本C.qcow2
。因此,B.qcow2
和C.qcow2
最终是不同的,但它们有一个共同的部分(因为 C.qcow2 是从 B.qcow2 复制的)。
为了节省磁盘空间,我想知道是否可以(通过使用 qemu-img 或以编程方式)创建另一个common.qcow2
包含 和 的所有公共部分的B.qcow2
图像,然后从和C.qcow2
中删除这个公共部分,并在这样的图像中重新设置图像的基础一种方式和是基于和是基于?B.qcow2
C.qcow2
B.qcow2
C.qcow2
common.qcow2
common.qcow2
A.qcow2
答案1
诀窍是拥有一个基本图像和两个包含与其差异的图像。这可以通过以下方式实现:
- 为避免混淆:
mv B.qcow2 common.qcow2
- A 上常见的变基:
qemu-img rebase -b common.qcow2 A.qcow2
- 重新创建B,基于common:
git create -b common B.qcow2
- 重新调整 C 的共同点:
qemu-img rebase -b common.qcow2 C.qcow2
当然,现在 B.qcow2 是一个“空壳”,相对于 common 没有任何变化,而 C 包含 A 和 B 之间的所有变化,但没有办法节省更多空间,假设无论哪一个都没关系这两个文件包含更改,这与任何其他解决方案一样好。