如果传递rsync两个本地路径,它将默认使用“ --whole-file”,而不是增量传输。因此,您要寻找的是“ --no-whole-file”。如果您请求“ -c”,您还将获得增量传输。
您可以通过以下方式进行验证:
$ mkdir a b
$ dd if=/dev/zero of=a/1 bs=1k count=64
$ dd if=/dev/zero of=a/2 bs=1k count=64
$ dd if=/dev/zero of=a/3 bs=1k count=64
$ rsync -av a/ b/
sending incremental file list
./
1
2
3
sent 196831 bytes received 72 bytes 393806.00 bytes/sec
total size is 196608 speedup is 1.00
然后触摸文件并重新同步
$ touch a/1
$ rsync -av --inplace a/ b/
sending incremental file list
1
sent 65662 bytes received 31 bytes 131386.00 bytes/sec
total size is 196608 speedup is 2.99
您可以通过“ ls -li”验证它是否已重新使用了索引节点,但是请注意它已发送了整个64K字节。使用--no-whole-file再试一次
$ touch a/1
$ rsync -av --inplace --no-whole-file a/ b/
sending incremental file list
1
sent 494 bytes received 595 bytes 2178.00 bytes/sec
total size is 196608 speedup is 180.54
现在,您只发送了494个字节。您可以使用strace进一步验证是否写入了任何文件,但这至少显示了使用增量传输。
请注意(请参阅注释),--whole-file
假设是针对本地文件系统的(请参见rsync的手册页)。另一方面,--no-whole-file
假设是跨网络的,则--inplace
其自身的行为将与相同--inplace --no-whole-file
。