我们正在为我们的虚拟机使用kvm / qemu和qcow2-images。
qcow2有这个很好的function,其中映像文件只分配虚拟机实际需要的空间。 但是如果虚拟机的分配空间变小,我该如何缩小映像文件呢?
例:
1.)我用qcow2格式创build一个新的图像,大小为100GB
2.)我使用这个图像来安装Ubuntu的。 安装需要10GB左右,映像文件增长到10GB左右。 没有什么意外的。
3.)我用大约40 GB的额外数据填写图像。 图像文件增长到50GB。 我确定:-)
4)这是奇怪的地方:我删除了图像上的所有40GB数据,但图像大小仍然高达50GB。
问题:我如何释放40GB的数据并将图像缩小到只需要10GB?
在此先感谢,贝尔尼
图像不会自动缩小,因为当你删除文件时,你实际上并没有删除数据(这就是撤消删除的原因)。 Qemu有能力将qcow2图像缩小,但实用程序所做的实际上是从磁盘中删除零,使所有其他信息保持不变。 所以这个想法是:
dd if=/dev/zero of=/some/file
直到空间不足) qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
这,afaik,只能使用qcow2图像,我还没有testing其他格式。
virt-sparsify可以完成所有这些工作,而且不需要麻烦: http ://libguestfs.org/virt-sparsify.1.html
virt-sparsify fileA fileB
将完成所有这些,但实际上并不会减小图像的大小。 为此,您需要添加--compress
。