我对此有点困惑?为什么 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 一直是默认传输层。
如果压缩设置相同,我预计rsync
和scp
的速度基本相同。如果您发现其他情况,请分享基准测试。
答案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
可以加快加密速度。