两种情况:
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也不会造成伤害。