web-dev-qa-db-ja.com

50Gbのファイルがある外部ストレージドライブ(USB接続、タイプfuseblk)でrmが遅いのはなぜですか?

バックアップを作成するために rsnapshot を使用しようとしていますが、使用できません。ディレクトリ(50GB)を比較して数分で複製(すべてのファイルをハードリンク)でき、ディレクトリ全体を約30分でcpできますが、削除するには1時間以上かかります。直接使用する場合でもrm -rfv、単一のファイルをrmするのに最大0.5秒かかる場合があるのに対し、cpおよびlinkコマンドは即座に完了します。

なぜrmはとても遅いのですか?ハードリンクを再帰的に削除するより速い方法はありますか?ファイルをコピーする方が、削除するよりも短時間で済むことは意味がありません。

私が取り組んでいるファイルシステムは、usbを介して接続された外部ストレージドライブで、fuseblkと入力します(これはntfsだと思います)。私のコンピューターはubuntu linuxを実行しています。

上からの出力:

Cpu(s):  3.0%us,  1.5%sy,  0.0%ni, 54.8%id, 40.6%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8063700k total,  3602416k used,  4461284k free,   557604k buffers
21
Benubird

最終的に、何をするかに関係なく、rmは、削除するすべての単一ファイルでunlinkを実行する必要があります(親ディレクトリでrm -rを呼び出した場合でも)。削除するファイルが多い場合、これには長い時間がかかる可能性があります。

rm -rを実行すると、特に時間がかかるプロセスが2つあります。

  1. readdir、続いて、
  2. unlinkへの多数の呼び出し。

すべてのファイルを検索し、すべてのファイルを削除して削除するのには、本当に長い時間がかかる場合があります。

しばらくの間ディレクトリを使用できなくなるためにこの「使用不可」を見つけた場合は、削除する前に親ディレクトリを移動することを検討してください。これにより、その名前を解放して、プログラムが再び使用できるようになります。

ファイルシステムが本当にis NTFSであると仮定すると(質問からは不明です)、NTFSは通常、ファイルの大きな帯を削除するのが非常に遅くなります。目的に応じて、より適切なファイルシステムを使用することを検討してください(他の特定のニーズがない場合は、最新のextファイルシステムの削除パフォーマンスは非常に優れています)。一般的に、ヒューズ自体もそれほど高速ではありません。 Fuseを使用しない方法でこれを実行できるかどうかを検討することを検討してください。

28
Chris Down

なぜrmはとても遅いのですか?何も思いつきません。しかし、私はより速い方法を知っています:

mkdir blank
rsync -a --delete blank/ test/

更新: この回答 でServerfaultにいくつかの説明があります。 rsyncが特定の順序でファイルを削除しているように見えます。これにより、ファイルシステムツリーのバランスが維持され、リバランスの必要がなくなります。 rmはファイルを削除するだけで、削除されると多くのリバランスを引き起こします。リバランスについてのいくつかの情報があります here

15
rjmunro

まあ、私はかつてあなたと同じような問題を抱えていました。あなたの「は」が高いことがわかりました。

iostat -x 1

ディスクの使用率が高いかどうかを確認します。高い場合は、ディスクが非常にビジーであることを意味します。一部のotherプロセスが継続的にディスクに書き込んでいるかどうかを確認します。

シンプルにするために、

vmstat 1

bが高いか、またはr <bかどうかを確認します。それは何かが間違っていることを示しています。あなたの状況では、ディスクioが本来の理由だと思います。

1
fibonacci