rsync --sparse确实传输整个数据

时间:2013-11-06 19:35:58

标签: rsync sparse-matrix

我有一些需要每天同步的VM映像。虚拟机文件稀疏。

为了节省网络流量,我只想传输图像的实际数据。 我在rsync上使用--sparse选项尝试它,但是在网络流量上我看到整个大小通过网络传输而不仅仅是实际数据使用。

如果我使用rsync -zv --sparse,那么只有实际大小才能通过网络传输,一切正常。但是由于cpu的使用,我不想压缩文件。

不应该--sparse选项只传输实际数据,并且本地创建“空数据”以节省网络流量吗?

是否有没有压缩的解决方法?

谢谢!

3 个答案:

答案 0 :(得分:8)

看看this discussion,具体来说,this answer

似乎解决方案是rsync --sparse后跟rsync --inplace

在第一个--sparse,调用时,还使用--ignore-existing来阻止已经传输的稀疏文件被覆盖,并使用-z来保存网络资源。

第二个调用--inplace仅更新已修改的块。压缩是可选的。

另见this post

<强>更新

我相信上述建议无法解决您的问题。我也相信rsync不适合完成任务。您应该搜索其他工具,以便在网络和磁盘I / O效率之间取得良好的平衡。

Rsync旨在有效使用单一资源,即网络。它假设读取和写入网络比读取和写入源文件和目标文件要昂贵得多。

  

我们假设两台机器通过低带宽高延迟双向通信链路连接。 The rsync algorithm, abstract

该算法分为四个步骤。

  1. 接收方β会发送目标文件 B S 块的校验和。
  2. 发送方α在任何偏移处识别源文件 A 中匹配的块。
  3. α发送β由逐字,非匹配,数据或匹配的块引用组成的指令列表。
  4. β根据这些说明重建整个文件。
  5. 请注意,rsync通常会将文件 B 重建为临时文件 T ,然后将 B 替换为 T 即可。在这种情况下,它必须写入整个文件。

    正如人们可以想象的那样,--inplace并不能解除rsync编写与α匹配的块。它们可以匹配不同的偏移量。第二次扫描 B 以获取新的数据校验和在性能方面是令人望而却步的。可以跳过在第一步中读取的相同偏移量匹配的块,但rsync不会这样做。对于稀疏文件, B 的空块将匹配 A 的每个空块,并且必须重写。

    --inplace只会导致rsync直接写入 B ,而不是 T 。它会重写整个文件。

答案 1 :(得分:1)

您可以尝试将压缩级别更改为最低值(使用选项--compress-level=1)。最低压缩级别似乎足以减少稀疏文件的流量。但我不知道,CPU的使用情况如何受到影响。

答案 2 :(得分:1)

最新版本的rsync可以一起处理--sparse和--inplace!我在2016年找到了以下github条目:https://github.com/tuna/rsync/commit/f3873b3d88b61167b106e7b9227a20147f8f6197