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

oro*_*hen 6 rsync sparse-files qemu xfs

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

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G
Run Code Online (Sandbox Code Playgroud)

我把它转移到:

rsync -azhP --sparse origin:/path/to/img/sparse.img .
Run Code Online (Sandbox Code Playgroud)

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

image: sparse.img
file format: raw
virtual size: 50G
disk size: 40G
Run Code Online (Sandbox Code Playgroud)

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

image: sparse.img
file format: raw
virtual size: 50G
disk size: 16G
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

你可以跟进tar与传输rsync --inplace,以确保文件wtihout错误转移,如解释在这里

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

我没有写这个作为解决方案,因为它并没有真正解释为什么rsync --sparse会这样。

xhi*_*nne 3

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

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

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

另请参阅ServerFault 上的这个问题