`scp`と` rsync`の違いは何ですか?


241

Ghostブログの設定に関する記事でscp、ローカルマシンからリモートサーバーへのコピーに使用するように言われています。

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

ただし、Railscast 339:Chef Solo Basicsscp、(リモートサーバーからローカルマシンへの)反対方向へのコピーに使用します。

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

同じRailscastで、作成者がファイルをリモートサーバーにコピーする場合(最初の例と同じ方向)、彼は次のように使用しますrsync

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

両方向にコピーするrsync場合、なぜコマンドを使用するのscpですか?どうscp違うのrsync


単純で常に暗号化されていることを除けば、scpが「rsync -aA」よりも優れていると指摘する人は誰もいません。私は「rsync -aAX --delete source dest」を好みます。双方向同期のbsyncをチェックアウトします。
戸町

回答:


344

これらのツールの主な違いは、ファイルのコピー方法です。

scp基本的には、ソースファイルを読み取り、宛先に書き込みます。ローカルまたはネットワークを介してプレーンリニアコピーを実行します。

rsyncまた、ファイルをローカルまたはネットワーク経由でコピーします。ただし、特別なデルタ転送アルゴリズムといくつかの最適化を使用して、操作を大幅に高速化しています。呼び出しを検討してください。

rsync A host:B
  • rsyncABの両方のファイルサイズと変更タイムスタンプを確認し、一致する場合は以降の処理をスキップします。

  • 宛先ファイルBがすでに存在する場合、デルタ転送アルゴリズムは、ABの違いのみがネットワーク経由で送信されるようにします。

  • rsync一時ファイルにデータを書き込みますT、および、宛先ファイルの置き換えBをT使用している場合がありますプロセスへの更新を見て「アトミック」にするためにBを

それらの間の別の違いは、呼び出しに関するものです。rsyncコマンドラインオプションが豊富にあり、ユーザーはその動作を微調整できます。複雑なフィルタールールをサポートし、バッチモード、デーモンモードなどで実行されscpます。スイッチはわずかです。

要約するscpと、日常のタスクに使用します。インタラクティブシェルでたまに入力するコマンド。使い方は簡単で、その場合、rsync最適化はあまり役に立ちません。

cronジョブなどの定期的なタスクには、を使用しますrsync。前述のように、複数の呼び出しでは、すでに転送されたデータを利用して非常に高速に実行し、リソースを節約します。ネットワークを介して2つのディレクトリの同期を維持するための優れたツールです。

また、大きなファイルを扱う場合rsyncは、-Pオプションを使用してください。転送が中断された場合は、コマンドを再発行することにより、転送が停止したところから再開できます。Sid Kshatriyaの回答を参照してください。


14
あなたは日々の仕事にscpを使うと言います。説明とOPから、オプションなしで使用した場合の2つのツールのインターフェイスは同じであるように見えます。rsyncに優れた実装があり、インターフェースが同じである場合、なぜ常にrsyncを使用しないのですか?
Alex

5
オプションがなくても、インターフェースは同じではありません。Rsyncは、ソース引数の末尾のスラッシュを特別に解釈します(ディレクトリ自体とその内容を同期します)。他の問題があるかもしれませんが、よくわかりません。
Rafa

2
また、scpUnixライクなシステムで利用できる可能性が高いので、時々煩わしい「コマンドが見つからない」のを防ぎます。
Rafa、2014年

2
@ erikb85 rsyncには、進行状況バーを表示し、部分的に完了した転送からの再開を可能にする-Pフラグがあります。digitalocean.com/community/tutorials/...
ベン

1
間の別のインターフェイスの違いscprsyncrsync -ascp -rp修正時刻とアクセス権を維持します。
Rafa

71

rysncは、低速で信頼性の低い接続での実行に役立ちます。したがって、ダウンロードが大きなファイルの途中で中断した場合、rysncは、再度呼び出されたときに中断したところから続行できます。

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

-Pオプションは、部分的にダウンロードされたファイルを保持し、進行状況も表示します。

いつものチェック man rsync


32

異なるパラメータでの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オプションは、sshをリモートシェルとして使用するようにrsyncに指示します。

4.セキュリティ:

scpはより安全です。あなたはrsync --rsh=sshそれをscpと同じくらい安全にするために使わなければなりません。

詳細を知るためのドキュメント:

パフォーマンスチャート


この新しい答え、特にセキュリティの部分に感謝します。
zhihong 2018年

多くのシステムでは、デフォルトでsshが使用されます。serverfault.com/questions/378939/do-you-need-e-ssh-for-rsync
QWR

2
セキュリティについて、openSSH 8.0リリースノートからThe scp protocol is outdated, inflexible and not readily fixed. We recommend the use of more modern protocols like sftp and rsync for file transfer instead.
downtheroad

6

rsyncoverの主な機能の1つscp(差分アルゴリズムとsshを使用した場合の暗号化のほか)は、転送されたファイルが正しく転送されたかどうかを自動的に確認することです。Scpはこれを行いません。これは、大きなファイルを転送するときに破損することがあります。したがって、一般的にrsyncは保証付きのコピーです。

Centosのマンページでは、--checksumオプションの説明の最後にこれが記載されています。

rsyncは常に、ファイルの転送時に生成されるファイル全体のチェックサムをチェックすることにより、転送された各ファイルが受信側で正しく再構築されたことを検証しますが、転送後の自動検証は、このオプションの実行前とは関係ありません。転送「このファイルを更新する必要がありますか?」小切手。


5

私にscpは常にssh(セキュアシェル)で暗号化されるという違いがありますrsyncが、必ずしも暗号化されるわけではありません。具体的にrsyncは、それ自体で暗号化を実行しません。それでも、暗号化を実行するために他のメカニズム(たとえば、ssh)を使用することができます。

セキュリティに加えて、暗号化は転送速度やCPUオーバーヘッドにも大きな影響を与えます。(私の経験では、それrsyncよりもかなり速くなる可能性がありscpます。)

暗号化が有効になっている場合については、この投稿をご覧くださいrsync


1

scp1つのファイルに最適です。
ORの組み合わせtar小さいリソースとソースコードツリーのような小さなデータセットの圧縮&(すなわち:画像、SQLiteのなど)。


しかしより大きなボリュームを処理し始めると、次のようになります。

  • メディアフォルダー(40 GB)
  • データベースのバックアップ(28 GB)
  • mp3ライブラリ(100 GB)

この時点でscpを使用して転送するzip / tar.gzファイルを構築して、ホストされているサーバーの物理的な制限に合わせるのは現実的ではありません。

演習として、パイプを使用して結果をリモートファイルにリダイレクトするなど、いくつかの体操を行うことができます。(スワップまたは一時的なクローン(別名 zipまたはtar.gz)を構築する必要を省く)tarssh

ただし

rsyncはこのプロセスを簡素化し、追加のディスク領域を消費することなくデータを転送できるようにします。

また

継続的な(cron?)更新は最小限の変更を使用するのに対し、完全な複製コピーは時間の経過とともに大規模なデータ移行を高速化します。

tl; dr
scp == 小規模(同じドライブに圧縮ファイルを作成するためのスペースがある)
rsync== 大規模(大きなデータをバックアップする必要があり、スペースが残っていない)


-1

実用的な状況で考えることをお勧めします。私たちのチームではrsync -aP、クラスター内の不良なcassandraホストを置き換えるために使用しています。scpを使用してこれを行うことはできません(遅く、進行状況の保持はありません)。


他の回答でまだ言及されていないものは実際には持っていません。さらに、トピック外の質問にも答えるべきではありません。
Dan Cornilescu

1
@DanCornilescuこれは、実際のシナリオでのユースケースを説明します。これにより、他の人が違いを理解しやすくなります。他の同様の答え
デルバオ2016

2
-Pの説明と、SidとRafaの回答のスロー/スピード関連のメモを参照してください。
Dan Cornilescu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.