コピーまたはrsyncコマンド


83

次のコマンドは期待どおりに機能しています...

cp -ur /home/abc/* /mnt/windowsabc/

rsyncにはそれ以上の利点がありますか?24時間ごとにバックアップフォルダの同期を維持するためのより良い方法はありますか?


どのくらい正確に期待どおりに機能していませんか?
lunixbochs 2011年

12
-uは「更新」を示します。欠落しているファイルまたは古いファイルのみをコピーします。-rは「再帰的」を示します。ディレクトリ構造をドリルダウンします。私はそれを調べて、他の初心者を助けなければなりませんでした。:-)
強大な2015

コマンドのヘルプセクションの特定のフラグに関する情報については、通常、次のようになります。<cp --help | grep -e -u>または、フラグ 'r'に関する情報を掘り下げたい場合は、<cp --help |を使用します。grep -e-r>。「-e」の後に書いたコンテンツがあるヘルプの部分のみが表示されます。
paramvir 2016

回答:


58

Rsyncは、ファイル全体ではなく、更新されたファイルの更新された部分のみをコピーするため、より優れています。また、必要に応じて圧縮と暗号化を使用します。このチュートリアルをチェックしてください


59

rsyncは、実行するファイルとブロックのインベントリがより詳細であるため、必ずしも効率的であるとは限りません。アルゴリズムはそれが何をするかという点で素晴らしいですが、それが本当に最良の選択になるかどうかを知るためにあなたはあなたの問題を理解する必要があります。

ファイルが追加される傾向があるが更新されない非常に大きなファイルシステム(たとえば、数千または数百万のファイル)では、「cp-u」の方が効率的である可能性があります。cpは、メタデータのみをコピーすることを決定し、単にコピーのビジネスに取り掛かることができます。

ファイルのサイズ、ネットワークパフォーマンス、その他のディスクアクティビティなどによっては、ストレートcpではなくtarを使用するなど、バッファリングが必要になる場合があることに注意してください。次のアイデアが非常に役立ちます。

tar cf - . | tar xCf directory -

メタデータ自体は、実際には非常に大きな(クラスター)ファイルシステムで大きなオーバーヘッドになる可能性がありますが、rsyncとcpはこの問題を共有します。

rsyncが頻繁に好まれるツールのようです(そして一般的な目的のアプリケーションが私の通常のデフォルトの選択です)が、おそらくそれを考えずに盲目的にrsyncを使用する多くの人々がいます。


18

記述されたコマンドは、現在の日付とタイムスタンプ、および所有者としての自分で新しいディレクトリとファイルを作成します。あなたがあなたのシステムの唯一のユーザーであり、あなたがこれを毎日行っているなら、それはそれほど重要ではないかもしれません。ただし、これらの属性を保持することが重要な場合は、次のコマンドを使用してコマンドを変更できます。

cp -pur /home/abc/* /mnt/windowsabc/

-pは、ファイルの所有権、タイムスタンプ、およびモードを保持します。これは、バックアップする対象によっては非常に重要になる場合があります。

rsyncを使用した代替コマンドは次のようになります

rsync -avh /home/abc/* /mnt/windowsabc

rsyncでは、-aは上記のすべての属性を保持する「アーカイブ」を示します。-vは「詳細」を示し、実行時に各ファイルで実行されていることを一覧表示します。-zはローカルコピー用にここでは省略されていますが、圧縮用であり、ネットワーク経由でバックアップする場合に役立ちます。最後に、-hは、MB、GBなどの人間が読める形式でサイズを報告するようにrsyncに指示します。

好奇心から、1つのコピーを実行してシステムを準備し、最初の実行に対するバイアスを回避しました。次に、内蔵SSDドライブからUSB接続のHDDへの1GBのファイルのテスト実行で次の時間を計りました。これらは単に空のターゲットディレクトリにコピーされます。

cp -pur    : 19.5 seconds
rsync -ah  : 19.6 seconds
rsync -azh : 61.5 seconds

帯域幅がボトルネックではない場合、圧縮と解凍は明らかにシステムに負担をかけますが、両方のコマンドはほぼ同じように見えます。


6

特に、BTRFSやZFSのようなコピーオンライトファイルシステムを使用する場合rsyncは、はるかに優れています。

私はBTRFSを使用していますが、これは次の~/.bashrcとおりです。

alias cp="rsync -ah --inplace --no-whole-file --info=progress2"

BTRFSのようなCoWFSのここでの重要なフラグ--inplaceは、ファイルの変更された部分のみをコピーし、ファイルのiノード間の小さな変更などに対して新しいフラグを作成しないためです。これを参照してください。


1
--inplaceオプションマニュアルによると:The option implies --partial。したがって--partial、少なくとも現在のバージョンでは、必須ではないと思います。
Dcortez

4

ネットワーク転送ではなく、マシンの内部でファイルを転送する場合、-zフラグを使用すると、転送にかかる時間が大幅に異なる可能性があることに注意してください。

同じマシン内で転送

Case 1: With -z flag:
    TAR took: 9.48345208168
    Encryption took: 2.79352903366
    CP took = 5.07273387909
    Rsync took = 30.5113282204

Case 2: Without the -z flag:
    TAR took: 10.7535531521
    Encryption took: 3.0386879921
    CP took = 4.85565590858
    Rsync took = 4.94515299797

3

ローカルコピーの場合、rsyncの唯一の利点は、ファイルが宛先ディレクトリにすでに存在する場合にコピーを回避できることです。「すでに存在する」の定義は、(a)同じファイル名(b)同じサイズ(c)同じタイムスタンプです。(たぶん同じ所有者/グループ;私にはわかりません...)

「rsyncアルゴリズム」は、低速のネットワークリンクを介したファイルの増分更新には最適ですが、「差分」計算を実行するために既存の(部分的な)ファイルを読み取る必要があるため、ローカルコピーを購入する必要はありません。

したがって、この種のコマンドを頻繁に実行していて、変更されたファイルのセットがファイルの総数に比べて少ない場合は、rsyncがcpよりも高速であることがわかります。(また、rsyncには--delete便利なオプションがあります。)


3

何がより効率的かという問題ではありません。

コマンド「rsync」と「cp」は同等ではなく、異なる目標を達成します。

1- rsyncは、既存のファイルの作成時間を保持できます。(-aオプションを使用)
2- rsyncはマルチプロセスを実行し、ローカルソケットまたはネットワークソケットのいずれかを使用して転送します。(つまり、それ自体を複数のプロセスにフォークします)
3-マルチプロセッシングとスレッド化により、多数の小さなファイルをコピーする場合、さらには複数の大きなファイルをコピーする場合でも、スループットが向上します。

つまり、rsyncは大きなデータ用であり、cpは小さなローカルコピー用です。(MBから小さいGBの範囲)。複数のGBまたはTBの範囲に入り始めたら、rsyncを使用します。そしてもちろん、ネットワークコピー、rsyncはずっと。


「rsyncは既存のファイルの作成時間を保持できます。(-aオプションを使用)」-「cp-a」は同じことを実行でき、「rsync-a」よりもさらに優れています。「より良い」とは、元のデータとメタデータをできるだけ多く保存することを意味します。unix.stackexchange.com/questions/443911/…を読んでください。Rsyncとcpは、-aに関してほぼ同等です。
rublacava

ありがとう@Rublacava私は特に-a比較のためにウェブをクロールしていました。
フランソワ

1

cpを使用している場合、同じ名前のフォルダーをコピーするときに既存のファイルは保存されません。あなたがこのフォルダを持っているとしましょう:

/myFolder
  someTextFile.txt

/someOtherFolder
  /myFolder
    wellHelloThere.txt

次に、一方を他方の上にコピーします。

cp /someOtherFolder/myFolder /myFolder

結果:

/myFolder
  wellHelloThere.txt

これは少なくともmacOSで起こることであり、diffファイルを保持したかったので、rsyncを使用しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.