稀疏 qemu 映像的 rsync 会增加磁盘大小

稀疏 qemu 映像的 rsync 会增加磁盘大小

我有一个稀疏的原始 qemu 图像,我想将其传输到另一台服务器。qemu-img info给我:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

我用以下方式转移它:

rsync -azhP --sparse origin:/path/to/img/sparse.img .

现在,在目标服务器上我有:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 40G

但是,virt-sparsify在复制的图像上再次运行后,我得到:

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G

两台服务器都在 XFS 文件系统上运行 CentOS 7.2。所以发生了什么事?

更新:

经过更多研究后,我发现几篇文章表明 rsync 不能很好地处理稀疏文件,最好使用不同的工具,例如焦油,传输稀疏文件。

您可以使用 来跟进tar传输rsync --inplace,以确保文件传输时没有错误,如所解释的这里

其他解决方案建议在目标上创建一个相同大小的空稀疏文件,然后用于rsync --inplace传输实际数据。

我没有将其作为解决方案来编写,因为它并没有真正解释为什么rsync --sparse会出现这种情况。

答案1

我敢打赌这是由于源和目的地之间的 FS 差异造成的。

让我用一个例子来详细说明。稀疏文件是指磁盘上未分配空块(即全为 0)的文件。 FS 上的块大小越小,就越有可能找到这样的块。因此,您的问题可能是由于目标上的块大小大于源上的块大小。

可能还有其他我不知道的XFS参数。

也可以看看ServerFault 上的这个问题

答案2

我发现最适合我的解决方案是首先运行

virt-sparsify imagename

需要一些时间。这会生成一个较小尺寸的图像,在ls -hdu -h中报告相同的尺寸du -h --apparent-size。但是当您安装图像时,它会报告正确的大小(并按预期增长)。

然后 rsync 该图像。

相关内容