我有一个稀疏的原始 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 -h
和du -h
中报告相同的尺寸du -h --apparent-size
。但是当您安装图像时,它会报告正确的大小(并按预期增长)。
然后 rsync 该图像。