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


23

我们在虚拟机中使用带有qcow2-images的kvm / qemu。

qcow2具有此不错的功能,其中映像文件仅分配虚拟机实际需要的空间。但是,如果虚拟机的分配空间变小,如何缩小映像文件?

例:

1.)我用qcow2格式创建了一个新图像,大小为100GB

2.)我使用此映像安装ubuntu。安装大约需要10 GB,映像文件会增长到大约10GB。到目前为止没有什么意外的。

3.)我用大约40 GB的附加数据填充了映像。图像文件将增长到50GB。我同意:-)

4.)这是很奇怪的地方:我删除了图像上的所有40GB数据,但是图像大小仍然占用了50GB。

问题:如何释放40GB的数据并将图像缩小到仅需要的10 GB?

在此先感谢,伯尼

Answers:


26

图像不会自动缩小,因为删除文件时实际上并没有删除数据(这就是取消删除的原因)。Qemu拥有一种缩小qcow2映像的功能,但是该实用程序的作用实际上是从磁盘中删除零数据,而所有其他信息均保持不变。因此,想法是:

  1. 将驱动器归零(dd if=/dev/zero of=/some/file直到空间用完)
  2. 删除/ some /文件
  3. 关闭虚拟机
  4. cd到VM映像的保存和运行位置 qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2
  5. 更改VM设置以使用新的deduplicated_image.qcow2,测试VM是否正常运行,并删除旧映像

afaik,此功能仅适用于qcow2图像,我尚未测试其他格式。


3
如果您有Windows来宾,请运行SDelete -z将所有可用空间清零(上面的步骤1,2)
ndemou '16

17

virt-sparsify可以减轻您的麻烦:http ://libguestfs.org/virt-sparsify.1.html


不太确定2011
dyasny 2014年

2
@dyasny如果旧问题的现有答案随着时间的推移已过时,则值得编写一个新答案。但是,这个特定的新答案可能不符合该网站的标准。
kasperd 2014年

4
@dyasny如果有人想花精力编写新的高质量答案,则每当旧的答案过时时,都应鼓励他们这样做。关于如何处理过时答案的更彻底的讨论更适合于meta。
kasperd 2014年

1

virt-sparsify fileA fileB将执行所有操作,但实际上不会减小图像的大小。为此,您需要添加--compress

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.