rsync 对已更改的文件真的更快吗?

Posted

技术标签:

【中文标题】rsync 对已更改的文件真的更快吗?【英文标题】:Is rsync really any faster on files that have changed? 【发布时间】:2011-05-06 22:13:38 【问题描述】:

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

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

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

然后我 rsync 他们,我得到了你所期望的:

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

发送 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,初始复制也比最终的 rsync 花费大约 1/4 的时间来完成,即使内容完全相同。那么这里发生了什么?这只是进行比较的所有开销吗?

如果是这样,那么 rsync 什么时候会提供性能优势?只有当文件两边完全一样的时候?

【问题讨论】:

【参考方案1】:

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

编辑:由于有人觉得有必要否决这个古老的答案......至于为什么本地文件上的 rsync 可能比 cp 慢,似乎没有任何充分的理由。

【讨论】:

谢谢。这并不能解释为什么 cp 在本地磁盘上比 rsync 快 4 倍。抱歉,我可能没有说清楚这一点......我想知道为什么我不能相信 rsync 和 cp 一样快(首先检查文件有一些小的开销)。当我复制另一个文件时,我可能需要测试看看 cp 是否也会变慢。也许性能问题是由于在复制新文件之前取消了旧文件的链接。【参考方案2】:

有趣的是,对于我来说,rsync 在复制到外部 USB 驱动器时比 cp 快大约 4 倍。

【讨论】:

【参考方案3】:

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

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

如果您提供--size-only 选项,它将假定具有相同大小的文件不变。

如果您提供--checksum 选项,它会在复制文件之前首先对文件进行哈希处理以查看是否有任何更改。

【讨论】:

即使使用“--size-only” rsync 似乎也需要 forever 来构建其增量文件列表。为什么?我可以手动检查文件大小以及哪些文件的更改速度大大!浪费时间做什么?如何关闭这些花哨的功能?编辑:啊,没关系,我无意中设置了“c”标志。如果没有校验和,它会非常快。【参考方案4】:

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

【讨论】:

以上是关于rsync 对已更改的文件真的更快吗?的主要内容,如果未能解决你的问题,请参考以下文章

sh 还原对已修改文件的更改/删除未跟踪文件/从存储库中删除文件,但保留文件的本地版本混帐

rsync解决同步文件权限问题

我真的需要 MainWindow.xib 文件吗?

rsync备份服务器搭建部署

在 GPU 上计算积分图像真的比在 CPU 上更快吗?

如何通过rsync+sersync 实现同步备份