rsyncを高速化する方法は?


44

rsyncを実行して、ディレクトリを外部USB HDDに同期しています。約150ギガのデータです。私が推測する50000以上のファイル。

現時点では最初の同期ですが、ファイルのコピー速度は1〜5 MB /秒のみです。これは、USB 2.0エンクロージャーでは非常に遅いようです。ドライブ上で発生する他の転送もありません。

私が使用したオプションは次のとおりです。

rsync -avz --progress /mysourcefolder /mytargetfolder

Ubuntu Server 9.10を実行しています。


2
USB2接続が確立されていますか?(非rsync)コピーまたはその他の書き込み操作は通常の速度で実行されますか?そうでない場合、別のUSBポート/ケーブルでコピー/他の書き込み操作を試みましたか?
いんちきキホーテ

serverfault.com/questions/43014/…も参照してください。2つのパイプtarコマンドまたはを使用することも提案されていますcpio
ブレイザーブレード

回答:


38

最初の同期には

cp -a  /mysourcefolder /mytargetfolder

rsyncは、宛先が空の場合にのみオーバーヘッドを追加します。

また、.. -zオプションはおそらくパフォーマンスを低下させます。低速リンクを介してデータを転送していない場合は使用しないでください。


3
rsyncは、リモート同期用であり、まさにこの理由でローカルに接続されたボリュームには実際には適切ではないため、そう呼ばれます。
msanford

6
ローカル転送にも使用できるはずで、はるかに柔軟です。最初の同期では、おそらくやり過ぎです。
ブレイザーブレード

1
rsyncは一方向の同期でもあります。サーバーまたはサーバーからのバックアップに非常に適しています。ただし、リムーバブルドライブへのローカルTWO-Way同期が必要な場合は、csync csync.org/get-itをチェックアウトして、まったく異なるプロジェクトであるcsync2と混同しないようにしてください。
風の放浪者ジェシー14

3
rsync -avz --progress /mysourcefolder/ /mytargetfolderまたは、コンテンツをミラーリングするのmysourcefoldermytargetfolderはなく、内部のコピーを取得します
編集者

2
この答えは質問に答えません。問題は、rsyncを最適化する方法についてでした-cpコマンドで置き換えないでください。
oemb1905

38

同じマシンで高速ネットワークまたはディスクツーディスクでrsyncを使用している場合、

圧縮を使用しない -z

--inplaceを使用

ハードドライブまたはネットワークのパフォーマンスまで高速化

圧縮は多くのCPUを使用します

インプレースを使用しないと、ハードドライブのスラッシュが多くなります(最終ファイルを作成する前に一時ファイルを使用します)

圧縮およびインプレースを使用しないことは、インターネット(低速ネットワーク)経由で行うのに適しています

NEW:宛先に注意してください... NTFS「圧縮」が有効になっている場合...これにより、大きなファイル(200MB以上)が大幅に遅くなりますrsyncがほとんど停止しているようです。


NTFS圧縮は、大きなファイルでは遅いwww
Scott Kramer

私は、manページの「--inline」については何も表示されない
アンソニー・

1
それは--inplace "だ
スコット・クレーマー

26

-Wオプションを使用します。これにより、デルタ/差分比較が無効になります。ファイルの時間/サイズが異なる場合、rsyncはファイル全体をコピーします。

-zオプションも削除します。これは、ネットワークトラフィックの圧縮にのみ役立ちます。

これrsyncでのように高速になりcpます。


6
ちょっとした注意:低速のネットワークトラフィックに-zのみ有用です。ネットワークの速度が十分であれば、CPUによって制限されるため、速度が低下します。
-WhyNotHugo

3
これらのヒントにより、2台のNASデバイス間でのファイルの転送が大幅に高速化されました。
djhworld

2
しかし、マニュアルページによると、-W「これは、ソースと宛先の両方がローカルパスとして指定されている場合のデフォルトですが、バッチ書き込みオプションが有効になっていない場合に限ります。」
GuoLiangキューン

14

まず、この場合のファイルの数が大きな要因になります。平均サイズはそれぞれ3MBです。おそらく、OPの場合、速度に影響を与えるioボトルネックがあります。もっとここで -それはかなりドライな読書ですが、カバー写真は価値があります。

だから、rsyncを使用して空のディレクトリにコピーしますか?速度を上げるいくつかの方法を次に示します。

  1. -zなし-OPのように-zを絶対に使用しないでください。
  2. --no-compressはスピードアップするかもしれません。これが最大の影響を与える可能性があります...私のテストは13,000ファイル、合計サイズ200MB、rsync 3.1.3の使用でした。同じ内部SSDドライブの別のパーティションに同期しました。--no-compressを使用すると、18 MBpsを取得し、それなしでは15 MBpsを取得します。ところで、cpは16 MBpsを取得します。しかし、それははるかに小さい平均ファイルサイズです。また、-no-compressのドキュメントが見つかりません。stackexchange.comのこの投稿からそれについて学びました。
  3. -W ファイル全体コピーします -違いを比較したくない場合は常にこれを使用します。rsyncのポイントは違いを比較し、変更のみを更新することであることを気にしないでください。
  4. -Sでスパースファイルを適切に処理します - スパースファイルがなくても害はありません。
  5. --exclude-fromまたは不要なファイルを除外するのにものは時間を短縮しますが、転送速度は向上しません。
  6. それはだ可能性あなたは、このようなファイルに出力を送信する場合rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err、エラーメッセージを参照>第一>は基本的にあなたが正常に表示されるすべてのものを使用してファイルを印刷し、2 - 。
  7. 最後に、転送のさまざまな部分でrsyncの複数のインスタンスを実行すると、大きな助けになる可能性があります。

私のコマンドは次のようになります:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

すべてがうまく見えたら、「-dry-run」を削除して手放します。A、X、およびEは、-aでカバーされない拡張属性および許可をカバーし、lはソフトリンク用、Hはハードリンク用、hは人間が読めるもの用です。

USBドライブ、同じドライブ、またはネットワーク経由で既に同期されたディレクトリを更新するには、転送速度を最大化するためにすべて異なるrsyncコマンドが必要です。

ボーナス -これはrsyncのマニュアルページです。ハードドライブの速度をテストする場合は、bonnie ++が適切なオプションであり、ネットワーク速度についてはiperfを試してください


*投稿はほぼ10年前ですが、検索エンジンは確かに気に入っており、私はそれを見続けています。これは良い質問です。「rsyncを高速化する方法」に対する一番の答えは「代わりにcpを使用する」べきではないと思います。


1
項目7)に関しては、「blockdev --setra 8192 / dev / sdX」を使用して先読みバッファーを拡張することにより、ソースとして従来のHDDを使用してパフォーマンスをさらに向上させることができました。だから私はヘッドシークを減らすつもりです。
user2480144

2

あなたのファイルがどのようなサイズ分布を持っているかは言わない。小さなファイルが多数ある場合、ツールが新しいファイルを開き、OSがディレクトリエントリおよびその他のメタデータ(使用している場合はファイルシステムのジャーナルなど) ext3 / ext4やNTFSのようなメタデータジャーナリングは、デフォルトでは転送中に更新されます)。ファイルコピープロセスは、単純なバルク転送が行われている場合に、より大きなオブジェクトに対してのみ「ストライド」します。


0

間違いなくrcloneを試してみてください。このことは非常に速いです:

$ tree / usr [...] 26105ディレクトリ、293208ファイル

$ sudo rclone sync / usr / home / fred / temp -P -L --transfers 64

転送済み:17.929G / 17.929 GBytes、100%、165.692 MBytes / s、ETA 0sエラー:75(再試行が役立つ場合があります)チェック:691078 / 691078、100%転送済み:345539 ​​/ 345539、100%経過時間:1m50.8s

これは、LITEONIT LCS-256(256GB)SSDとの間のローカルコピーです。

初回実行時に--ignore-checksumを追加して、さらに高速にすることができます。


0

避ける

  • -z/ --compress:転送はネットワーク上ではなくRAM上で行われるため、圧縮ではCPUのみがロードされます。
  • --append-verify:中断された転送を再開します。これは良い考えのように聞こえますが、危険な障害の場合があります。ソースと同じサイズ(またはそれ以上)の宛先ファイルは無視されます。また、最後にファイル全体をチェックサムします--no-whole-file。これは、危険な障害ケースを追加する際に、速度が大幅に向上することを意味します。

つかいます

  • -S/ --sparse:ヌルのシーケンスをスパースブロックに変換します
  • --partialまたは-Pどちらか--partial --progress:将来の再開のために部分的に転送されたファイルを保存します。注:ファイルには一時的な名前がないため、コピー全体が完了するまで、他のユーザーが宛先を使用しないことを確認してください。
  • --no-whole-file再送信が必要なものはすべてデルタ転送を使用します。部分的に転送されたファイルの半分を読み取ることは、多くの場合、再度書き込むよりもはるかに高速です。
  • --inplace ファイルのコピーを回避します(ただし、転送全体が完了するまで宛先が何も読み取っていない場合のみ)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.