次のコマンドは期待どおりに機能しています...
cp -ur /home/abc/* /mnt/windowsabc/
rsyncにはそれ以上の利点がありますか?24時間ごとにバックアップフォルダの同期を維持するためのより良い方法はありますか?
次のコマンドは期待どおりに機能しています...
cp -ur /home/abc/* /mnt/windowsabc/
rsyncにはそれ以上の利点がありますか?24時間ごとにバックアップフォルダの同期を維持するためのより良い方法はありますか?
回答:
rsyncは、実行するファイルとブロックのインベントリがより詳細であるため、必ずしも効率的であるとは限りません。アルゴリズムはそれが何をするかという点で素晴らしいですが、それが本当に最良の選択になるかどうかを知るためにあなたはあなたの問題を理解する必要があります。
ファイルが追加される傾向があるが更新されない非常に大きなファイルシステム(たとえば、数千または数百万のファイル)では、「cp-u」の方が効率的である可能性があります。cpは、メタデータのみをコピーすることを決定し、単にコピーのビジネスに取り掛かることができます。
ファイルのサイズ、ネットワークパフォーマンス、その他のディスクアクティビティなどによっては、ストレートcpではなくtarを使用するなど、バッファリングが必要になる場合があることに注意してください。次のアイデアが非常に役立ちます。
tar cf - . | tar xCf directory -
メタデータ自体は、実際には非常に大きな(クラスター)ファイルシステムで大きなオーバーヘッドになる可能性がありますが、rsyncとcpはこの問題を共有します。
rsyncが頻繁に好まれるツールのようです(そして一般的な目的のアプリケーションが私の通常のデフォルトの選択です)が、おそらくそれを考えずに盲目的にrsyncを使用する多くの人々がいます。
記述されたコマンドは、現在の日付とタイムスタンプ、および所有者としての自分で新しいディレクトリとファイルを作成します。あなたがあなたのシステムの唯一のユーザーであり、あなたがこれを毎日行っているなら、それはそれほど重要ではないかもしれません。ただし、これらの属性を保持することが重要な場合は、次のコマンドを使用してコマンドを変更できます。
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
帯域幅がボトルネックではない場合、圧縮と解凍は明らかにシステムに負担をかけますが、両方のコマンドはほぼ同じように見えます。
特に、BTRFSやZFSのようなコピーオンライトファイルシステムを使用する場合rsync
は、はるかに優れています。
私はBTRFSを使用していますが、これは次の~/.bashrc
とおりです。
alias cp="rsync -ah --inplace --no-whole-file --info=progress2"
BTRFSのようなCoWFSのここでの重要なフラグ--inplace
は、ファイルの変更された部分のみをコピーし、ファイルのiノード間の小さな変更などに対して新しいフラグを作成しないためです。これを参照してください。
ネットワーク転送ではなく、マシンの内部でファイルを転送する場合、-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
ローカルコピーの場合、rsyncの唯一の利点は、ファイルが宛先ディレクトリにすでに存在する場合にコピーを回避できることです。「すでに存在する」の定義は、(a)同じファイル名(b)同じサイズ(c)同じタイムスタンプです。(たぶん同じ所有者/グループ;私にはわかりません...)
「rsyncアルゴリズム」は、低速のネットワークリンクを介したファイルの増分更新には最適ですが、「差分」計算を実行するために既存の(部分的な)ファイルを読み取る必要があるため、ローカルコピーを購入する必要はありません。
したがって、この種のコマンドを頻繁に実行していて、変更されたファイルのセットがファイルの総数に比べて少ない場合は、rsyncがcpよりも高速であることがわかります。(また、rsyncには--delete
便利なオプションがあります。)
何がより効率的かという問題ではありません。
コマンド「rsync」と「cp」は同等ではなく、異なる目標を達成します。
1- rsyncは、既存のファイルの作成時間を保持できます。(-aオプションを使用)
2- rsyncはマルチプロセスを実行し、ローカルソケットまたはネットワークソケットのいずれかを使用して転送します。(つまり、それ自体を複数のプロセスにフォークします)
3-マルチプロセッシングとスレッド化により、多数の小さなファイルをコピーする場合、さらには複数の大きなファイルをコピーする場合でも、スループットが向上します。
つまり、rsyncは大きなデータ用であり、cpは小さなローカルコピー用です。(MBから小さいGBの範囲)。複数のGBまたはTBの範囲に入り始めたら、rsyncを使用します。そしてもちろん、ネットワークコピー、rsyncはずっと。
-a
比較のためにウェブをクロールしていました。
cpを使用している場合、同じ名前のフォルダーをコピーするときに既存のファイルは保存されません。あなたがこのフォルダを持っているとしましょう:
/myFolder
someTextFile.txt
/someOtherFolder
/myFolder
wellHelloThere.txt
次に、一方を他方の上にコピーします。
cp /someOtherFolder/myFolder /myFolder
結果:
/myFolder
wellHelloThere.txt
これは少なくともmacOSで起こることであり、diffファイルを保持したかったので、rsyncを使用しました。