事実上すべての状況でcp(1)
よりもrsync(1)
を使用する適切な理由を見つけることができないため、これが実際の回答なしの質問として数えられないことを願っています。通常、rsync
よりもcp
を優先する必要がありますか?それらを使用するための良いガイドラインはありますか?
rsync
:差分を転送します。圧縮を使用でき、リモートで(安全に)使用できます。単一の大きなファイルの転送中でも、中断されても再起動できます。 」
cp
:たぶん使用する方が簡単なのでしょうか? rsyncより高速ですか?
cp
はcoreutilsの一部であるため、どこにでも存在します。さらに、主に1台のコンピューター内でファイルをコピーするように設計されました。
rsync
はcoreutilsの一部ではありません。デフォルトの環境でも存在しません。さらに、主にネットワーク経由でファイルを転送するように設計されました。また、rsync
はcoreutilsに比べて依存関係が多くなっていますが、この違いはあまり意味がありません。
PS:ちなみに、組み込みシステムではまだCPU使用率が問題です。
すべてのコピー操作でrsync
を使用したくない主な理由は、rsync
に計算オーバーヘッドがあるためです。データ転送が実際に始まる前に、rsync
はすべてのファイルをスキャンします。次に、各ファイルの前に、比較が行われます。このオーバーヘッドは取るに足らないものではありません。2012年に利用できる高速のCPUがあっても、このタイプの転送は常に行われます。かなりまともなサイズのサーバーでは、ギグのデータの処理を開始すると、オーバーヘッドに時間がかかる可能性があります。
転送時間を節約できる場合は、rsync
を使用しないでください。まったく使用しないでください。rsync
を使用してください。 rsync
が同じことを達成できる場合は、cp
を使用しないでください。
私が通常行うことは、最初に通常のコピー方法を使用してデータを引き継ぐことです。次に、後続の変更のためにrsync
を実行します。これは、これらのdiffを利用できる場合です。
cp
はwritesを削減できるのに対し、diffsを使用しないため、ローカルでコピーする場合、rsync
はローカルでコピーするときに[〜#〜] cpu [〜#〜]を使用することを期待します。いずれにしてもファイル/差分全体を読み書きする必要があり、追加の計算が必要になるため、ローカルでの圧縮は避けてください。
大きなまたは存在しないdiffの場合のオーバーヘッドとは別に、rsync
にはcp --reflink=always
と同等のものがないように見えます。これにより、それをサポートするファイルシステム内でコピーすると、大量のデータを節約できます(コピーオンライトコピーを作成するため、オリジナルとコピー(もちろん、最初はすべてすべて)の間で共通のデータは一度だけ保存されます)。ただし、rsync
はpdating CoWコピーで、--inplace
を使用した方が優れています。