释放kvm / qemu上的qcow2-image-file上未使用的空间

我们正在为我们的虚拟机使用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图像缩小,但实用程序所做的实际上是从磁盘中删除零,使所有其他信息保持不变。 所以这个想法是:

  1. 对驱动器进行零填充( dd if=/dev/zero of=/some/file直到空间不足)
  2. 删除/某些/文件
  3. closures虚拟机
  4. 光盘到VM的图像保存和运行qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. 更改VM设置以使用新的Deduplicated_image.qcow2,testingVM正在工作,并删除旧映像

这,afaik,只能使用qcow2图像,我还没有testing其他格式。

virt-sparsify可以完成所有这些工作,而且不需要麻烦: http ://libguestfs.org/virt-sparsify.1.html

virt-sparsify fileA fileB将完成所有这些,但实际上并不会减小图像的大小。 为此,您需要添加--compress