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

How does `scp` differ from `rsync`?

关于设置ghost blogging的一篇文章说,要使用scp从本地机器复制到远程服务器:

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

然而,RailsCast 339:Chef Solo Basics使用scp以相反的方向(从远程服务器到本地机器)进行复制:

1
scp -r [email protected]:/var/chef .

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

1
rsync -r . [email protected]:/var/chef

如果scp将向两个方向复制,为什么要使用rsync命令?scprsync有何区别?


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

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

rsync还可以本地或通过网络复制文件。但它采用了一种特殊的增量传输算法,并进行了一些优化,使得运算速度更快。考虑一下这个电话。

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

  • 如果目标文件B已经存在,增量传输算法将确保只有A和B之间的差异通过线路发送。

  • rsync将把数据写入一个临时文件t,然后用t替换目标文件b,使可能使用b的进程的更新看起来像"原子的"。

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

总之,在日常任务中使用scp。在交互式shell上偶尔键入一次的命令。使用起来更简单,在这种情况下,rsync优化没有多大帮助。

对于重复性任务,如cron作业,使用rsync。如前所述,在多次调用时,它将利用已经传输的数据,快速执行并节省资源。在网络上保持两个目录同步是一个很好的工具。

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


在慢速和不可靠的连接上运行RysNC很有用。因此,如果您的下载在一个大文件中间中止,那么当再次调用时,Rysnc将能够从停止的位置继续下载。

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

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

照常检查man rsync


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

1。延迟性能

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

  • rsync:rsync比较优化,速度也比较快。

Compared performance of different file transfer protocols over latency

2。中断处理

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

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

How to resume a large SCP file transfer on Linux

三。命令示例单链构象多态性

1
$ scp source_file_path destination_file_path

远程同步

1
2
$ cd /path/to/directory/of/partially_downloaded_file
$ rsync -P --rsh=ssh [email protected]:bigdata.tgz ./bigdata.tgz

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

4。安全性:

SCP更安全。您必须使用rsync --rsh=ssh使其与scp一样安全。

了解更多的手册:

  • SCP:http://www.manpagez.com/man/1/scp/
  • 同步:http://www.manpagez.com/man/1/rsync/

performance chart


EDOCX1上的rsync的一个主要特性(除了delta算法和加密(如果使用w/ssh)之外)是自动验证传输的文件是否正确传输。SCP不会这样做,这在传输较大的文件时偶尔会导致损坏。所以通常rsync是一个有保证的副本。

Centos手册提到了这一点,即--checksum选项描述的结尾:

Note that rsync always verifies that each transferred file was
correctly reconstructed on the receiving side by checking a whole-file
checksum that is generated as the file is transferred, but that
automatic after-the-transfer verification has nothing to do with this
option’s before-the-transfer"Does this file need to be updated?"
check.


在我看来,scp总是用ssh(secure shell)加密,而rsync不一定加密。更具体地说,rsync本身不执行任何加密;它仍然能够使用其他机制(例如ssh)执行加密。

除了安全性之外,加密还对传输速度以及CPU开销有重大影响。(我的经验是,rsyncscp快得多。)

查看这篇文章,了解何时rsync启用了加密。


SCP最适合一个文件。对于较小的数据集,也可以结合使用tar和compression。像源代码树一样,资源很少(例如:图像、sqlite等)。

然而,当你开始处理更大的数量时,说:

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

现在,构建一个zip/tar.gz文件来与SCP传输到托管服务器的物理限制变得不切实际。

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

然而,

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

也,

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

DRscp==小规模(在同一个驱动器上有构建压缩文件的空间)rsync==大规模(需要备份大数据,没有剩余空间)


最好是在实际情况下思考。在我们的团队中,我们使用rsync -aP替换集群中一个坏的cassandra主机。我们不能用SCP(缓慢和没有进展的保留)来做这件事。