背景
虚拟磁盘瘦分配(Thin Provisioning)可以大大节省存储空间,实现存储空间按需分配。但是因为客户机(Guest OS)删除文件的时候,仅仅只是把相应文件的inode做一个删除标识,而不会将其物理空间清零(Zero Filling)释放。所以从主机测看来,经常会看到,客户机中报告磁盘使用空间是1G,但是对应的虚拟镜像文件(vmdk, qcow2, vhd...)实际大小甚至会达到7,8G.
解决方法
首先需要在客户机中将磁盘清零(Zero Filling), 如果是Linux,可以使用dd命令,把整个磁盘用零清满,直到报告out of space.
$ dd if=/dev/zero of=/some/file
bs=10M
在客户机中,将/some/file删除掉,然后关闭虚拟机
$ rm -rf /some/file
使用qemu-img将对应虚拟磁盘的空间
回收
:
$
qemu-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2