我有一些需要每天同步的 VM 映像。VM 文件是稀疏的。
为了节省网络流量,我只想传输图像的真实数据。我在 rsync 使用 --sparse 选项尝试它,但在网络流量上,我看到整个大小都通过网络传输,而不仅仅是真实的数据使用。
如果我使用 rsync -zv --sparse 则只有真实大小通过网络传输,一切正常。但由于 cpu 使用率,我不想压缩文件。
--sparse 选项不应该只传输真实数据,并且在本地创建“空数据”以节省网络流量吗?
有没有不压缩的解决方法?
谢谢!
我有一些需要每天同步的 VM 映像。VM 文件是稀疏的。
为了节省网络流量,我只想传输图像的真实数据。我在 rsync 使用 --sparse 选项尝试它,但在网络流量上,我看到整个大小都通过网络传输,而不仅仅是真实的数据使用。
如果我使用 rsync -zv --sparse 则只有真实大小通过网络传输,一切正常。但由于 cpu 使用率,我不想压缩文件。
--sparse 选项不应该只传输真实数据,并且在本地创建“空数据”以节省网络流量吗?
有没有不压缩的解决方法?
谢谢!
似乎解决方案是执行 arsync --sparse
后跟 a rsync --inplace
。
首先,--sparse
调用,也用于--ignore-existing
防止已经传输的稀疏文件被覆盖,并-z
节省网络资源。
第二个调用--inplace
应该只更新修改过的块。在这里,压缩是可选的。
另见这篇文章。
更新
我相信上面的建议不会解决你的问题。我也认为这rsync
不是完成任务的正确工具。您应该寻找其他可以在网络和磁盘 I/O 效率之间取得良好平衡的工具。
Rsync
旨在有效利用单一资源,即网络。它假设读写网络比读写源文件和目标文件要昂贵得多。
我们假设两台机器通过低带宽高延迟的双向通信链路连接。rsync 算法,抽象。
该算法总结为四个步骤。
请注意,通常将文件Brsync
重建为临时文件T,然后将B替换为T。在这种情况下,它必须写入整个文件。
正如人们可以想象的那样,--inplace
并不能减轻与αrsync
匹配的书写块的负担。它们可以匹配不同的偏移量。再次扫描B以获取新的数据校验和在性能方面是令人望而却步的。可以跳过与在第一步中读取的相同偏移量中匹配的块,但不会这样做。在稀疏文件的情况下,B的空块将匹配A的每个空块,并且必须重写。rsync
直接写入B而不是T的--inplace
正当原因。它将重写整个文件。rsync
最新版本的 rsync 可以同时处理 --sparse 和 --inplace !我发现了 2016 年的以下 github 条目:https ://github.com/tuna/rsync/commit/f3873b3d88b61167b106e7b9227a20147f8f6197
您可以尝试将压缩级别更改为最低值(使用选项--compress-level=1
)。最低压缩级别似乎足以减少稀疏文件的流量。但我不知道,CPU使用率如何受到影响。