减少 xen 映像磁盘使用量

减少 xen 映像磁盘使用量

两种情况:

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 创建空图像:

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 大小始终等于它的实际内容,而没有任何“零”占用我的数组空间。

问题:对于情况 1,如何减少磁盘映像大小?

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

答案1

正如@sam_pan_mariusz所说,缩小尺寸的图像是将“空”图像创建为“稀疏”文件。为了从现有块设备创建稀疏文件,请将选项添加conv=sparsedd if=/dev/sda [...]用于制作初始图像的命令中。您需要将图像文件放入tar --sparse,因为仅压缩文件图像就会导致稀疏块被写出,从而使它们变得非稀疏。

答案2

此功能称为稀疏文件tar --sparse.除了 gzip 以外,GNU 可以很好地处理它们。

zerofree在生成的图像上使用它也不会造成损害。

相关内容