rsync在更改的文件上真的更快吗?

时间:2010-11-08 22:07:14

标签: performance rsync

为什么我不能相信rsync的速度和cp一样快? (我忽略了可忽略不计的开销差异。)

在我看来,对于没有内容差异的文件,rsync相当慢,但时间戳已更改。

如果我创建一个文件:cp -a testfile-100M destfile

然后我对它们进行了同步,我得到了你所期望的结果:

$ rsync -av testfile-100M destfile 发送增量文件列表

发送56个字节,接收12个字节,8.00个字节/秒 总的大小是104857600,加速是1542023.53

但这只是因为rsync正在检查大小和时间戳并跳过文件。如果我只是更改时间戳怎么办?

$ touch testfile-100M

$ rsync -av testfile-100M destfile发送增量文件列表 testfile的-100M

发送104870495个字节,接收31个字节113804.15个字节/秒 总大小是104857600,加速是1.00

另请注意,即使加速比为1,即使内容完全相同,初始副本也要花费大约1/4的时间来完成最终的rsync。那么这里发生了什么?这只是进行比较的所有开销吗?

如果是这种情况,那么rsync何时提供性能优势?只有文件在两边都完全相同?

4 个答案:

答案 0 :(得分:3)

对于本地文件,如果大小或mtime已更改,则rsync默认情况下只复制整个内容而不使用其delta算法。您可以使用--no-whole-file选项将其关闭,但对于本地副本,这通常会更慢。

对于触摸文件而不更改文件的具体情况:

  • 如果您提供--size-only选项,则会假定大小相同的文件未更改。

  • 如果您提供--checksum选项,它会先复制文件以查看是否有任何更改,然后再将其复制。

答案 1 :(得分:2)

当源和目标都是本地安装的文件系统时,rsync只是在时间戳或大小不匹配时复制文件。如果您拥有差异较小的大型文件,并且它们位于由低带宽链接分隔的计算机上,则Rsync会胜出。

编辑:因为有人觉得需要对这个古老的答案进行投票...至于为什么本地文件上的rsync可能比cp慢,所以似乎没有任何充分的理由。

答案 2 :(得分:1)

似乎答案是rsync执行了一些额外的步骤,以使文件保持一致状态,而不是在操作时处于“部分传输”状态。使用--inplace选项可以消除此开销。

答案 3 :(得分:0)

有趣的是,对我而言,rsync比复制到外部USB驱动器的速度快4倍。