为什么 rsync -avz 比 scp -r 更快?

为什么 rsync -avz 比 scp -r 更快?

我对此有点困惑?为什么 rsync 比 scp 更快?rsync 不是底层使用 scp 吗,还是它做了一些更有效的事情?有没有什么方法可以加快 scp 的速度?注意!问题是关于新副本的。

答案1

如果目标已经包含一些源文件,那么 Rsync 显然会比 scp 更快,因为 rsync 只复制差异部分。但我怀疑你的问题是关于直接复制到空目标。

您已将-z选项传递给rsync;这将启用压缩。如果网络带宽是限制因素(通常如此),则压缩可以显著提高传输速度。

您还可以scp通过传递-C选项来启用压缩。这应该与 rsync 差不多。默认情况下,ssh 不启用压缩,因为它可以节省带宽,但会增加延迟和 CPU 开销;延迟对交互式会话不利(这不适用于scp),如果您要复制的文件已经压缩,则 CPU 开销毫无用处。

较早版本的rsync使用了 rsh 而非 ssh 作为默认传输层,因此比较rsync和更为合理rcp。但自 2004-01-01 发布 2.6.0 版以来,ssh 一直是默认传输层。

如果压缩设置相同,我预计rsyncscp的速度基本相同。如果您发现其他情况,请分享基准测试。

答案2

快速尝试 scp

scp -p -C -o 'CompressionLevel 9' -o 'IPQoS throughput'  -c aes128-cbc machine:file .

与普通的 scp machine:file 相比,这些选项在我的设置中使 scp 速度提高了 5 倍。

更新,2017年

实际上,scp 之所以慢,是因为对 TCP 细节(如 MTU 和缓冲区大小)的管理不善。幸运的是,这个问题已经被高性能网络项目。据我了解,您可以使用 HPN SSH 作为 rsync 的传输方式。

答案3

以前情况正好相反,但我相信 rsync 的速度在过去的几个版本中已经大大提高了。这也取决于您要复制多少文件。如果文件很多,rsync 通常会更快,因为 scp 会为您复制的每个文件生成一个新进程。您可以尝试削弱 scp 使用的密码,看看它是否会加快速度。我记得,arcfour 密码是最快的。

答案4

为了进行测试,同步SCP, 您可以使用iotop在传输同一个文件时测试它们:

sudo iotop -o

也许你会得到不同的结果,但你可以自己测试一下。顺便说一句,在使用SCP,不要忘记选择它的密码:

scp -c arcfour <source> <dest>

同时arcfour可以加快加密速度。

相关内容