减lessxen映像磁盘使用率

两种情况:

1.如果使用dd制作hdd映像并将其通过nfs复制到另一台服务器:

mount -o ro,remount / dd if=/dev/sda bs=64K | gzip -c > /share/test.img.gz 

那么在gunzip之后,我得到20Gb(例如)文件,最后填充零/

 du -h /md/share/test.img 21G /md/share/test.img 

2.如果我使用dd创build空的图像:

 dd if=/dev/zero of=/md/share/test2.img bs=1024k seek=20480 count=0 

我有:

 du -h /md/share/test2.img 0 /md/share/test2.img ls -lah /md/share/test2.img -rw-r--r-- 1 root root 20G Aug 2 14:46 /md/share/test2.img 

安装到客人后,我可以以任何我想要的方式使用所有的20G,IMG大小总是相等的实际内容,没有任何“零”吃我的数组空间。

问题:如何减less情况1的磁盘映像大小?

答案:如果dd支持conv=sparse属性,除了tar --sparse之外,还必须使用它。 如果没有,更新coreutils并再次尝试。 否则,安装软件包libguestfs-tools并运行virt-sparcify /md/share/test.img /md/share/test_sparse.img

正如@sam_pan_mariusz所说的那样,缩小图像是将“空”图像创build为“稀疏”文件。 为了从现有块设备创build一个稀疏文件,将conv=sparse选项添加到用于制作初始映像的dd if=/dev/sda [...]命令中。 您将需要将映像文件放入tar --sparse ,因为只是压缩文件映像将导致稀疏块被写出,使它们不稀疏。

这个function被称为稀疏文件 。 GNU tar --sparse处理它们,除了gzip之外。

在结果图像上使用zerofree也不会造成伤害。