私の環境は、カーネル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
ディスク上で瞬時に行われます。ここでは明らかにメタデータに問題があります。
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データ転送のボトルネックを克服できる可能性があります。
これらのフラグ(およびその他のフラグ)を説明する、素晴らしくシンプルなチュートリアル ここにあります 。