Ghostブログの設定 に関する記事では、scp
を使って自分のローカルマシンからリモートサーバーにコピーしています。
scp -r ghost-0.3 root@*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
コマンドを使用するのですか? scp
はrsync
とどう違うのですか?
これらのツールの主な違いは、ファイルをコピーする方法です。
scp
は基本的にソースファイルを読み込み、それを宛先に書き込みます。ローカルまたはネットワーク経由でプレーンな線形コピーを実行します。
rsync
は、ローカルまたはネットワーク経由でファイルをコピーします。しかし、それは特別な デルタ転送アルゴリズム と、操作をずっと速くするためのいくつかの最適化を採用しています。電話を考えてください。
rsync A Host:B
rsync
は、ファイルサイズと修正タイムスタンプAとBの両方をチェックし、それらが一致すればそれ以上の処理をスキップします。
転送先ファイルBが既に存在する場合、デルタ転送アルゴリズムはAとBの違いのみを送信するようにします。ワイヤー上。
rsync
は一時ファイルにデータを書き込みますT、そして更新を行うために宛先ファイルBをTに置き換えますBを使っているかもしれないプロセスを "原子的"に見てください。
それらの間のもう一つの違いは呼び出しに関係します。 rsync
にはたくさんのコマンドラインオプションがあり、ユーザーはその動作を微調整することができます。複雑なフィルタルールをサポートし、バッチモード、デーモンモードなどで実行されます。scp
には、いくつかのスイッチしかありません。
まとめると、日常のタスクにscp
を使用します。インタラクティブシェル上で時々入力するコマンド。使い方は簡単で、そのような場合はrsync
の最適化はあまり役に立ちません。
cron
ジョブなどの定期的なタスクには、rsync
を使用します。前述のように、複数回の呼び出しでは、すでに転送されたデータを利用して、非常に迅速に実行し、リソースを節約します。ネットワーク上で2つのディレクトリを同期させるのに優れたツールです。
また、大規模ファイルを扱う場合は、rsync
を-P
オプションと共に使用してください。転送が中断された場合は、コマンドを再発行することによって、中断したところから再開できます。 Sid Kshatriyaの answer を参照してください。
rysncは、低速で信頼性の低い接続で実行するのに便利です。そのため、大きなファイルの途中でダウンロードが中断された場合、rysncは再度呼び出されたときに中断したところから続行できます。
rsync -vP username@Host:/path/to/file .
を使う
-Pオプションは、部分的にダウンロードされたファイルを保存し、進行状況も表示します。
いつものようにman rsync
をチェックしてください
異なるパラメーターでの差b/w scpとrsync
scp
:scpは比較的最適化と速度が劣る
rsync
:rsyncは比較的最適化され速度が向上しています
scp
:scpコマンドラインツールは、失われたネットワーク接続から中止されたダウンロードを再開できません
rsync
:上記のrsyncセッション自体が中断された場合でも、同じコマンドを入力することで、必要なだけ何度でも再開できます。 rsyncは中断したところから自動的に転送を再開します。
http://ask.xmodulo.com/resume-large-scp-file-transfer-linux.html
$ scp source_file_path destination_file_path
$ 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をリモートシェルとして使用するように指示します。
scpはより安全です。 scpと同じくらい安全にするためにはrsync --rsh=ssh
を使う必要があります。
もっと知るためのman文書:
scp
は常にssh(secure Shell)で暗号化されていますが、rsync
は必ずしも暗号化されているとは限りません。より具体的には、rsync
はそれ自身では暗号化を行いません。それはまだ暗号化を実行するために他のメカニズム(例えばssh)を使うことができます。
セキュリティに加えて、暗号化は転送速度やCPUのオーバーヘッドにも大きな影響を与えます。 (私の経験では、rsync
はscp
よりもかなり速くなります。)
rsync
が暗号化をオンにしている場合は、こちらの post をチェックしてください。
rsync
に対するscp
の大きな特長(デルタアルゴリズムとsshを使用した場合の暗号化)は、自動的に転送されたファイルが正しく転送されていれば検証ということです。 Scpはそれを行いません。大きなファイルを転送すると、ときどき破損する可能性があります。だから一般的にrsyncは保証付きのコピーです。
Centosのマンページでは、これが--checksum
オプションの説明の終わりであると述べています。
Rsyncは、ファイルの転送時に生成されるファイル全体のチェックサムをチェックすることによって、転送された各ファイルが受信側で正しく再構築されていることを常に検証します。転送このファイルは更新する必要がありますか?チェックします。
実用的な文脈で考えるのが良いでしょう。私たちのチームでは、クラスタ内の悪いcassandraホストを置き換えるためにrsync -aP
を使用します。私たちはscpではこれを行うことができません(遅くて進行状況を保存しない)。