web-dev-qa-db-ja.com

btrfsでのRsyncバックアップが非常に遅い

私の環境は、カーネル3.19.0-28-genericとBtrfsv3.17を備えたUbuntu15.04です。

バックアップスクリプトで使用する2つの同一の外部USBハードディスクがあります。 1つはbtrfsでフォーマットされ、もう1つはext4でフォーマットされます。ソースファイルシステムは常にext4です。 rsyncコマンドは次のようになります。

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

btrfsで実行されるバックアップには非常に長い時間がかかることに気づきました。ext4への同じコピーの実行にかかる4分と比較して、1時間強です。

ディスクの誤動作を排除するために、ddとUbuntuに付属の「ディスクユーティリティ」を使用していくつかのベンチマークを実行しましたが、両方のディスクで同じパフォーマンスが得られました。遅い部分は、前のバックアップに対してハードリンクしているようです。デフラグとスクラブを行った後でも、次のコマンドはbtrfsでは約53分かかりますが、ext4では1分しかかかりません。

cp -arl "$previousBackup" "$destDir"

インターネットで調べてみると、btrfsのパフォーマンスがハードリンクで低下しているというヒントが見つかりましたが、この巨大な違いは期待できません。このコマンドの方が高速ですが、完了するまでに30分以上かかることがわかりました。

cp -ar --reflink "$previousBackup" "$destDir"

誰かがこの行動の経験があり、それを確認できますか?それを修正する簡単な方法はありますか(たとえば、さまざまなマウントオプション)、またはできるだけ多くのハードリンクを削除して、reflinkを使用する必要がありますか?

編集

btrfsからディレクトリを削除しても、1時間以上かかることがわかりました。同じ操作が「ツイン」ext4ディスク上で瞬時に行われます。ここでは明らかにメタデータに問題があります。

5
matpen

rsync コマンドでハードリンクをコピーしていると言いますが、-Hフラグはどこにありますか?私はあなたの命令にそれを見ません:

rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"

ハードリンクに関してrsyncがどのように機能するかを理解する方法は、 rsyncで説明されているように、ハードリンクの代わりに-Hフラグがないと実際のデータがコピーされるということです。 manページ

-H、-ハードリンク

これは、rsyncに転送でハードリンクされたファイルを探し、受信側で対応するファイルをリンクするように指示します。このオプションがないと、転送内のハードリンクされたファイルは、個別のファイルであるかのように扱われます。

多くの同様のファイルがハードリンクされる代わりに何度もコピーされるような手順は、転送時間が遅くなることになると想像できます。

また、-z--compress)フラグの使用も検討してください。

-z、-compress

このオプションを使用すると、rsyncはファイルデータを宛先マシンに送信するときに圧縮します。これにより、送信されるデータの量が削減されます。これは、低速の接続で役立ちます。

はい、これは同じシステムでのUSBからUSBへの転送であるため、速度はすでに最適化されている可能性がありますが、-zを確認することで自然なUSBデータ転送のボトルネックを克服できる可能性があります。

これらのフラグ(およびその他のフラグ)を説明する、素晴らしくシンプルなチュートリアル ここにあります

1
JakeGould