`scp`与`rsync`有什么不同?

时间:2013-11-27 14:06:00

标签: rsync scp

有关setting up Ghost blogging的文章说要使用scp从本地计算机复制到远程服务器:

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

但是,Railscast 339: Chef Solo Basics使用scp以相反的方向复制(从远程服务器复制到本地计算机):

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

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

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

如果rsync将双向复制,为什么要使用scp命令? scprsync的区别如何?

7 个答案:

答案 0 :(得分:283)

这些工具之间的主要区别在于它们如何复制文件。

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

rsync还会在本地或通过网络复制文件。但它采用了特殊的delta transfer algorithm和一些优化来使操作更快。考虑一下这个电话。

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

  • 如果目标文件 B 已存在,则增量转移算法将确保仅发送 A B 之间的差异通过电线。

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

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

总之,使用scp进行日常任务。您在交互式shell上偶尔键入一次的命令。它使用起来更简单,在这些情况下rsync优化也无济于事。

对于重复性任务,例如cron个工作,请使用rsync。如上所述,在多次调用时,它将利用已传输的数据,执行速度非常快并节省资源。它是通过网络保持两个目录同步的绝佳工具。

此外,在处理大型文件时,请使用rsync选项-P。如果传输中断,您可以通过重新发出命令将其恢复到停止位置。见Sid Kshatriya的answer

答案 1 :(得分:56)

rysnc可用于在缓慢且不可靠的连接上运行。因此,如果您的下载在大文件中间中止,则rysnc将能够从再次调用时停止的位置继续。

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

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

照常检查man rsync

答案 2 :(得分:14)

不同参数的黑白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一样安全。

个人文档以了解更多信息:

performance chart

答案 3 :(得分:3)

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

除安全性外,加密还会对您的传输速度以及CPU开销产生重大影响。 (我的经验是rsync可能明显快于scp。)

查看rsync <script> //alert(window.screen.width); if (window.screen.width < 250) { // resolution is below 10 x 25 //alert(window.screen.width); window.location = 'http://m.xyz.com/'; } </script> 何时加密。

答案 4 :(得分:3)

footer { background: $footer-blue; border-top: 1px solid #4C68B9; text-align: center; a { color: $white; transition: color 0.3s; &:hover { color: $teal; } } .social-links li { float: left; font-size: $smaller-heading-size; padding: 40px 20px; } } 超过rsync的一个主要功能(除了增量算法和加密,如果使用w / ssh),它会自动验证传输的文件是否已经传输正确。 Scp不会这样做,在传输较大的文件时偶尔可能会导致损坏。所以一般来说, rsync是带保证的副本

Centos联机帮助页提到scp选项说明的结尾:

  

请注意,rsync始终会验证每个传输的文件是否为   通过检查整个文件在接收端正确重建   传输文件时生成的校验和,但是   自动转移后验证与此无关   选项在转移之前“此文件是否需要更新?”   检查。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

scp 最适合一个文件 OR tar&amp;的组合压缩较小的数据集 比如资源较少的源代码树(:images,sqlite )。

<小时/> 然而,当您开始处理更大卷时说:

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

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

作为练习,您可以将一些体操管道tar加入ssh并将结果重定向到远程文件。 (节省了构建的需要 交换或临时克隆 aka zip或tar.gz)

<强>然而

rsync 简化了此过程,并允许您传输数据而不占用任何额外的磁盘空间。

连续(cron?)更新使用最小更改与完整克隆副本速度 随着时间的推移进行大量数据迁移。

tl;博士 scp == 小规模(可在同一驱动器上构建压缩文件的空间)
rsync == 大规模(需要备份大量数据而不留空间)