web-dev-qa-db-ja.com

`scp`は` rsync`とどう違うのですか?

Ghostブログの設定 に関する記事では、scpを使って自分のローカルマシンからリモートサーバーにコピーしています。

scp -r ghost-0.3 [email protected]*your-server-ip*:~/

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

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

同じRailscastの中で、作者がリモートサーバにファイルをコピーしたいとき(最初の例と同じ方向)、彼はrsyncを使います:

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

rsyncが双方向にコピーされる場合は、なぜscpコマンドを使用するのですか? scprsyncとどう違うのですか?

194
Leahcim

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

scpは基本的にソースファイルを読み込み、それを宛先に書き込みます。ローカルまたはネットワーク経由でプレーンな線形コピーを実行します。

rsyncは、ローカルまたはネットワーク経由でファイルをコピーします。しかし、それは特別な デルタ転送アルゴリズム と、操作をずっと速くするためのいくつかの最適化を採用しています。電話を考えてください。

rsync A Host:B
  • rsyncは、ファイルサイズと修正タイムスタンプABの両方をチェックし、それらが一致すればそれ以上の処理をスキップします。

  • 転送先ファイルBが既に存在する場合、デルタ転送アルゴリズムはABの違いのみを送信するようにします。ワイヤー上。

  • rsyncは一時ファイルにデータを書き込みますT、そして更新を行うために宛先ファイルBTに置き換えますBを使っているかもしれないプロセスを "原子的"に見てください。

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

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

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

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

286
Rafa

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

rsync -vP [email protected]:/path/to/file .を使う

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

いつものようにman rsyncをチェックしてください

57
Sid Kshatriya

異なるパラメーターでの差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/

割り込み処理

  • 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 [email protected]:bigdata.tgz ./bigdata.tgz 

-Pオプションは--partial --progressと同じであり、rsyncが部分的にダウンロードされたファイルを扱うことを可能にします。 --rsh=sshオプションはrsyncにsshをリモートシェルとして使用するように指示します。

4.セキュリティ

scpはより安全です。 scpと同じくらい安全にするためにはrsync --rsh=sshを使う必要があります。

もっと知るためのman文書:

performance chart

15
Amitesh

scpは常にssh(secure Shell)で暗号化されていますが、rsyncは必ずしも暗号化されているとは限りません。より具体的には、rsyncはそれ自身では暗号化を行いません。それはまだ暗号化を実行するために他のメカニズム(例えばssh)を使うことができます。

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

rsyncが暗号化をオンにしている場合は、こちらの post をチェックしてください。

3
Samuel Li

rsyncに対するscpの大きな特長(デルタアルゴリズムとsshを使用した場合の暗号化)は、自動的に転送されたファイルが正しく転送されていれば検証ということです。 Scpはそれを行いません。大きなファイルを転送すると、ときどき破損する可能性があります。だから一般的にrsyncは保証付きのコピーです

Centosのマンページでは、これが--checksumオプションの説明の終わりであると述べています。

Rsyncは、ファイルの転送時に生成されるファイル全体のチェックサムをチェックすることによって、転送された各ファイルが受信側で正しく再構築されていることを常に検証します。転送このファイルは更新する必要がありますか?チェックします。

3
count0

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

0
del bao