今日、コマンドを使用して、ext3 ファイルシステムに保存されている 50 GB のファイルを削除しましたrm
。rm
すべてのブロックを解放するのに、約 40 分の集中的な I/O が必要でした。他のソースから見ると、ファイルで使用されているすべてのブロックを解放するのにかかる時間です。誰かがプロセスをrm
途中で強制終了したらどうなるでしょうか。これによりファイルシステムが破損し、一部のブロックが空き領域として再利用できなくなった可能性がありますか?
答え1
(つまり、 が必要ですfsck
)。ファイルシステムの不整合は必要ありません。
はい、リンク解除後にブロックの解放が行われます。ただし、このプロセスは中断できません。
__ext2_truncate_blocks ->
ext2_free_branches -> (for loop)
sb_bread ->
wait_on_buffer ->
wait_on_bit_io(&bh->b_state, BH_Lock, TASK_UNINTERRUPTIBLE);
上記の例は のものですがext2
、もっと簡単に見れると思いました。 ext3
も変わりません...
ext4
ただし、より高速になるはずです。エクステントを使用すると、三重間接ブロック(記事では ext3 にエクステントを追加することについて説明していますが、Linus は躊躇し、まずバージョン番号を ext4 に上げるように言いました)。ビットマップの更新時間は同じだと思いますが、それらはブロック ポインタよりもはるかにコンパクトです。