【问题标题】:How does `scp` differ from `rsync`?`scp` 与 `rsync` 有何不同?
【发布时间】:2013-12-13 05:16:31
【问题描述】:

一篇关于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

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

【问题讨论】:

  • 除了更简单且始终加密之外,没有人指出 scp 比“rsync -aA”做得更好。我更喜欢“rsync -aAX --delete source dest”。结帐 bsync 进行双向同步。

标签: rsync scp


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    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 一样安全。

    了解更多信息:

    【讨论】:

    【解决方案3】:

    scp 最适合一个文件。
    OR结合tar 和压缩用于较小的数据集 比如资源少的源代码树(ie: images, sqlite etc)。


    然而,当您开始处理更大卷时,请说:
    • 媒体文件夹 (40 GB)
    • 数据库备份 (28 GB)
    • mp3 库 (100 GB)

    此时构建 zip/tar.gz 文件以使用 scp 传输变得不切实际托管服务器。

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

    但是

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

    还有

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

    tl;dr
    scp == 小规模(有空间在同一驱动器上构建压缩文件)
    rsync == 大规模 em>(需要备份大数据,没有剩余空间)

    【讨论】:

      【解决方案4】:

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

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

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

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

      • 如果目标文件 B 已经存在,增量传输算法将确保只发送 AB 之间的差异在电线上。

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

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

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

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

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

      【讨论】:

      • 您说要使用 scp 来完成日常任务。从您的解释和 OP 看来,这两个工具在不使用选项时的界面是相同的。如果 rsync 有更好的实现,接口也一样,为什么不总是使用 rsync?
      • 他们的界面不一样,即使没有选项。 Rsync 对 source 参数的尾部斜杠有特殊的解释(同步目录本身与其内容)。它可能还有其他问题,我不确定。
      • 另外,我猜scp 更有可能在类 Unix 系统上可用,因此您可以时不时地防止出现恼人的“找不到命令”。
      • @erikb85 rsync 具有 -P 标志,它将显示进度条并启用从部分完成的传输中恢复。 digitalocean.com/community/tutorials/…
      • scprsync 之间的另一个接口区别:rsync -ascp -rp 以保留修改时间和权限。
      【解决方案5】:

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

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

      查看此post,了解rsync 何时启用加密。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 并没有真正带来其他答案中尚未提及的任何内容。另外,我们甚至不应该回答离题的问题。
        • @DanCornilescu 这描述了一个真实场景中的用例,这让其他人很容易理解其中的区别。我没有看到任何其他类似的答案
        • 请参阅 Sid 和 Rafa 的答案中的 -P 解释和慢速/速度相关说明。
        【解决方案7】:

        rysnc 对于在慢速和不可靠的连接上运行很有用。因此,如果您的下载在大文件的中间中止,rysnc 将能够在再次调用时从中断处继续。

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

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

        像往常一样检查man rsync

        【讨论】:

          猜你喜欢
          • 2011-09-11
          • 1970-01-01
          • 1970-01-01
          • 2012-12-20
          • 2011-02-25
          • 2018-10-31
          • 2013-04-27
          • 2013-08-07
          • 2012-02-21
          相关资源
          最近更新 更多