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

use*_*212 8 rsync sparse-matrix

我有一些需要每天同步的VM映像.VM文件稀疏.

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

如果我使用rsync -zv --sparse然后只有真正的大小通过网络传输,一切都很好.但我不想因为cpu的使用而压缩文件.

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

有没有压缩的解决方法?

谢谢!

Raf*_*afa 9

看看这个讨论,具体来说,这个答案.

似乎解决方案是做一个rsync --sparse跟随a rsync --inplace.

在第一个,--sparse调用,也用于--ignore-existing防止已经传输的稀疏文件被覆盖,并-z节省网络资源.

第二个调用--inplace应该只更新修改后的块.这里,压缩是可选的.

另见这篇文章.

更新

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

Rsync设计用于有效使用单个资源,即网络.它假设读取和写入网络比读取和写入源文件和目标文件要昂贵得多.

我们假设这两台机器通过低带宽高延迟双向通信链路连接.rsync算法,抽象.

该算法分为四个步骤.

  1. 接收方β发送目标文件B的大小为S的块的校验和.
  2. 发送方α在任何偏移处识别在源文件A中匹配的块.
  3. α发送β由逐字,非匹配,数据或匹配块引用组成的指令列表.
  4. β从这些指令重建整个文件.

请注意,rsync通常重建文件作为临时文件Ť,然后替换Ť.在这种情况下,它必须写入整个文件.

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

--inplace正义事业rsync,直接写信给,而不是牛逼.它将重写整个文件.

  • 这是工作。但是问题是rsync重写了整个文件。但是在网络上,它仅传输新位(例如,大约写入70GB,传输了90MB的更改)。我认为整个文件被重写应该只替换更改是不正常的。重写整个文件将导致较高的IO,占用大量CPU和时间。我的命令(备份服务器上已经存在该文件):`rsync -rvh --progress --inplace root@1.1.1.1:/ kvm / backup / kvm`可以正确传输:`12G -rw-r--r -1根root 33G Nov 15 13:06 vm-100-disk-1.qcow2` (2认同)

小智 7

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