ext4 パーティションでの rm パフォーマンスが遅い

ext4 パーティションでの rm パフォーマンスが遅い

適度な数のファイルを削除するのに非常に長い時間がかかります。例:

$ pv linux-3.0.16.tar.bz2 | tar xj
73.2MB 0:00:16 [4.55MB/s]
$ pv linux-3.0.16.tar.bz2 | tar xj
73.2MB 0:03:16 [ 382kB/s]

パーティションは ext4 でフォーマットされ、relatime、error=remount-ro でマウントされています。ファイルの削除中にプロセッサ使用率が急上昇することはありません。何が起こっているのか、誰か分かりますか?

アップデート: 上記のコマンドを実行するか、またはrm -rfroot として実行すると、期待どおりに実行されます... アップデート: 解決しました。ボックスのシステム管理者が、ボックスに膨大な量の監査ルールをグローバルにインストールしていました。それらを削除すると、問題は解決します。

答え1

ファイルを置き換えたり削除したりすると、次のように単純に処理されます。

  1. ファイルの inode を見つけます。
  2. 個々のファイルの権限、ユーザー、グループを確認します。
  3. ファイルがディレクトリである場合は、ディレクトリ内のファイルも削除します (ファイルごとに 1 ~ 4 を繰り返します)。
  4. ファイルとその inode のリンクを解除します。

これは明らかにパフォーマンスを大幅に低下させます。なぜなら、新しい inode を追加してファイルをディスクに書き込むよりもはるかに難しいからです。これは inode テーブル リストであることの副作用です。代わりに inode ツリーであれば、ブランチ全体を削除できます。ただし、untar では inode の保存方法に関係なくファイルごとに実行されるため、untar を実行するときに何も変わりません...

root として実行するとステップ 2 が省略されますが、大きな違いが出る場合と出ない場合があります。


ext3 にマウントし直して実行時間を比較してみましたか?

ext4 はエクステントを使用しているため削除が高速です。もっと遅いとしたら注目に値するでしょう...

関連情報