“scp”和“rsync”有什么不同?

关于建立幽灵博客的一篇文章说使用scp从我的本地机器复制到远程服务器:

scp -r ghost-0.3 root@*your-server-ip*:~/

然而,铁路广播339:索罗厨师基础知识使用scp反向复制(从远程服务器复制到本地机器):

scp -r root@178.xxx.xxx.xxx:/var/chef .

在同一个Railscast中,当作者想要将文件复制到远程服务器(与第一个示例的方向相同)时,他使用rsync:

rsync -r . root@178.xxx.xxx.xxx:/var/chef

如果scp可以双向复制,为什么还要使用rsync命令呢?scprsync有什么不同?

240031 次浏览

这些工具之间的主要区别是它们复制文件的方式。

scp基本上是读取源文件并将其写入目标文件。它在本地或网络上执行普通线性复制。

rsync也可以在本地或通过网络复制文件。但是它使用了一个特殊的Delta传递算法和一些优化来使操作更快。考虑一下电话。

rsync A host:B
  • rsync将检查一个B的文件大小和修改时间戳,如果匹配则跳过任何进一步处理。

  • 如果目标文件B已经存在,delta传输算法将确保只有一个B之间的差异被通过网络发送。

  • rsync将数据写入临时文件T,然后用T替换目标文件B,使更新看起来“原子”;可能正在使用B的进程。

它们之间的另一个区别是调用。rsync有大量的命令行选项,允许用户微调其行为。它支持复杂的过滤规则,运行在批处理模式,守护进程模式等。scp只有几个开关。

总之,使用scp来完成你的日常任务。您在交互式shell上偶尔键入的命令。它使用起来更简单,在这种情况下,rsync优化不会有太大帮助。

对于循环任务,如cron作业,使用rsync。如前所述,在多次调用中,它将利用已经传输的数据,执行速度非常快,并节省资源。它是一种通过网络保持两个目录同步的优秀工具。

同样,当处理大文件时,使用rsync-P选项。如果传输中断,您可以通过重新发出命令在停止传输的地方恢复传输。参见Sid Kshatriya的回答

最后,请注意rsync://协议类似于普通的HTTP:未加密且没有完整性检查。一定要始终通过SSH使用rsync(就像上面问题中的例子一样),而不是通过rsync协议,除非你真的知道你在做什么。scp将始终使用SSH作为底层传输机制,它具有完整性和机密性保证,因此这是两个实用程序之间的另一个区别。

rync对于运行在缓慢且不可靠的连接上非常有用。因此,如果您的下载在一个大文件中途中止,当再次调用时,rysnc将能够从它停止的地方继续。

使用rsync -vP username@host:/path/to/file .

-P选项保留部分下载的文件并显示进度。

像往常一样检查man rsync

最好在实际环境中思考。在我们的团队中,我们使用rsync -aP来替换集群中的坏cassandra主机。我们不能使用scp(缓慢且没有进度的保存)做到这一点。

对我来说有一个区别,scp总是用ssh(安全shell)加密,而rsync不一定是加密的。更具体地说,rsync本身不执行任何加密;它仍然能够使用其他机制(例如ssh)执行加密。

除了安全性之外,加密对传输速度以及CPU开销也有重要影响。(我的经验是rsync可以比scp快得多。)

检查这个帖子,当rsync启用加密时。

rsync相对于scp的一个主要特性(如果使用w/ ssh,除了delta算法和加密)是,如果传输的文件已正确传输,它会自动验证。Scp不会这样做,这在传输较大文件时偶尔可能导致损坏。所以一般来说Rsync是有保证的副本

Centos手册在--checksum选项描述的末尾提到了这一点:

注意rsync总是验证每个传输的文件是否正确 通过检查整个文件,在接收端正确重建 在文件传输时生成的校验和,但是 转账后自动验证与此无关 选项的before-the-transfer“这个文件需要更新吗?” 检查。< / p >

scp最适合一个文件 tar和amp的组合;用于较小数据集的压缩 例如资源较小的源代码树(: images, sqlite ) 人力资源> < p > < 然而,当你开始处理更大的卷时,说:

  • 媒体文件夹(40gb)
  • 数据库备份(28 GB)
  • mp3库(100gb)

此时构建一个zip / tar.gz文件来使用scp传输到托管服务器的物理限制是不切实际的。

作为练习,你可以做一些体操,比如将tar管道到ssh,并将结果重定向到远程文件中。(节省了建造的需要 一个交换或临时克隆又名 zip或tar.gz)

然而,

rsync简化了这个过程,允许你在不消耗任何额外磁盘空间的情况下传输数据

,

连续(cron?)更新使用最小的更改,而不是完全克隆副本的速度 随着时间的推移,增加大型数据迁移。< / p > < p > tl;博士< br > scp == 小范围内(有空间在同一驱动器上构建压缩文件)
rsync == 大规模的(需要备份大量数据且没有剩余空间)

不同参数下的b/w scp和rsync不同

1. 时延性能

  • scp: scp的优化和速度相对较低

  • rsync: rsync相对来说更优化和更快

https://www.disk91.com/2014/technology/networks/compare-performance-of-different-file-transfer-protocol-over-latency/

2. 中断处理

  • scp: scp命令行工具不能从丢失的网络连接恢复中止的下载

  • rsync:如果上面的rsync会话本身被中断,你可以通过输入相同的命令来恢复它。Rsync将自动重新启动传输。

http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html

3.命令示例

scp

$ scp source_file_path destination_file_path

rsync

$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh userid@remotehost.com:bigdata.tgz ./bigdata.tgz

-P选项与--partial --progress相同,允许rsync处理部分下载的文件。--rsh=ssh选项告诉rsync使用ssh作为远程shell。

4. 安全:

SCP更安全。你必须使用rsync --rsh=ssh来使它像scp一样安全。

Man文档了解更多:

性能图表 .