我想重新创build一个dynamic分配的qcow2图像,以缩小它。 是不是所有不必要的文件都被删除了?或者我还需要用原来那些被这些文件占满的空间来填充? 换句话说,是qemu-img文件系统感知?
是的,如果你想恢复被删除的文件使用的空间,你需要零填充文件系统。 不,qemu-img不是fs-aware的。
我忘了为我今天创build的一个虚拟机镜像(一个用于我的OpenStack云的最小Debian Sid镜像)做这个工作,并且最后几乎达到了900MB,即使是使用“c”作为qcow2压缩。
在运行“dd if = / dev / zero of = / root / zero; rm -f / root / zero; shutdown -h now”之后,我重新创build了它,并且图像大小缩小到大约335MB。 当我启动一个新的实例时,这是less得多的(不值钱的)数据。
有很多被删除的文件,因为虚拟机开始debian squeeze并被apt-get升级到sid。
就我个人而言,我认为使用Clonezilla或Symantec Ghost克隆磁盘效果更好。 这比用零填充驱动器要快得多。 也避免了图像的增长。
我已经无数次地和鬼客赢了。 如果“已用空间”小于要被置零,那实际上会更快。 你也可以使用qemu-nbd来挂载镜像并从主机上运行Clonezilla,避免Clonezilla在guest虚拟机中的麻烦。 无论哪种方式,总是比我的经验sdelete / dd快得多。 (另外,我常常没有在主机上提供空间来完成零客户机磁盘操作,因此填写客户机中的可用空间对我来说很难实现。)
另请参阅: virt-sparsify ,一种可以将磁盘映像中的文件系统填满(支持各种格式)的实用程序:
我正在使用zerofree( apt-get install zerofree )来执行此任务:
Zerofree在ext2,ext3或ext4文件系统中find具有非零值内容的未分配块并填充零
之后,你可以缩小你的形象:
kvm-img convert -O qcow2 original_image.qcow2 deduplicated_image.qcow2