web-dev-qa-db-ja.com

rsyncをスピードアップするには?

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

現在実行中ですが、最初の同期ですが、ファイルをコピーする速度はわずか1〜5 MB /秒です。 USB 2.0エンクロージャの場合、これは信じられないほど遅いようです。ドライブでも他の転送は行われていません。

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

rsync -avz --progress /mysourcefolder /mytargetfolder

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

51
Jake Wilson

最初の同期には、

cp -a  /mysourcefolder /mytargetfolder

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

また、-zオプションはパフォーマンスを低下させる可能性があります。低速リンクを介してデータを転送しない場合は、このオプションを使用しないでください。

38
user23307

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

not圧縮を使用-z

--inplaceを使用する

ハードドライブまたはネットワークのパフォーマンスまでスピードアップ

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

not inplaceを使用すると、ハードドライブのスラッシュが大量に発生します(ファイナルを作成する前に一時ファイルを使用します)

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

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

44
Scott Kramer

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

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

これでrsynccpと同じくらい高速になるはずです。

29
vdboor

まず、この場合のファイル数が主な要因になります。それぞれの平均サイズは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 to ファイル全体をコピー -違いを比較したくない場合は、常にこれを使用してください。 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のmanページです 、そしてハードドライブの速度をテストしたい場合は bonnie ++ は適切なオプションであり、ネットワーク速度については iperf を試してください。


※投稿から10年近く経ちますが、検索エンジンは気に入っているので、ずっと見続けています。これは良い質問です。「rsyncを高速化する方法」に対する最高の答えは、「代わりにcpを使用する」ではないと思います。

20
Fin Hirschoff

避ける

  • -z/--compress:転送はネットワーク経由ではなくRAM経由であるため、CPUに負荷がかかるだけです。
  • --append-verify:中断された転送を再開します。これは良い考えのように聞こえますが、危険な失敗事例があります。ソースと同じサイズ(またはそれ以上)の宛先ファイルは無視されます。また、最後にファイル全体のチェックサムを計算するため、--no-whole-fileに比べて速度が大幅に向上することはありませんが、危険な失敗のケースが追加されます。

使用する

  • -S/--sparse:nullシーケンスをスパースブロックに変換
  • --partialまたは-P _--partial --progress:部分的に転送されたファイルを保存して、後で再開できるようにします。注:ファイルには一時的な名前が付けられないため、コピー全体が完了するまで、他のファイルが宛先を使用しないことを確認してください。
  • --no-whole-file再送信が必要なものはすべてデルタ転送を使用します。部分的に転送されたファイルの半分を読み取ることは、多くの場合、再度書き込むよりもはるかに高速です。
  • --inplaceはファイルのコピーを回避します(ただし、転送全体が完了するまで、何も宛先を読み取っていない場合のみ)
2
Tom Hale

あなたはあなたのファイルがどのようなサイズ分布を持っているかは言いません。小さなファイルが多数ある場合、ツールが新しいファイルを開き、OSがディレクトリエントリと他のメタデータ(使用している場合はファイルシステムのジャーナルなど)を保持するため、ソースと宛先の両方のドライブでヘッド移動の待ち時間が増えるため、全体的な転送速度が低下します。 ext3/ext4やNTFSのようなメタデータジャーナリングは、デフォルトで転送中に最新になります。単純なバルク転送が行われている場合、ファイルコピープロセスは、より大きなオブジェクトの「ストライドに入る」だけです。

2
David Spillett

あなたは間違いなく rclone を試してみたいと思います。これはすごく速いです:

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

$ Sudo rclone sync/usr/home/fred/temp -P -L-転送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を追加して、さらに高速にすることができます。

1
Frédéric N.