Stackoveflow の投稿で、Linux ではファイルを削除しても実際には削除されず、inode テーブルからそのファイルへのリンクのみが削除されると読みました。そうだとしたら、なぜ削除は一定時間の操作ではないのでしょうか?
私も実験してみました。1500枚の画像が入ったフォルダを作成し、これらの画像のtarオブジェクトを作成しました。ディレクトリとtarファイルは両方とも同じサイズです。tarオブジェクトと1500枚の画像のディレクトリを削除するタイミングは次のとおりです。
tar ファイルを削除していますtime rm test.tar
:
real 0m0.024s
user 0m0.001s
sys 0m0.024s
ディレクトリを削除しています:time rm -r test
real 0m0.219s
user 0m0.024s
sys 0m0.191s
私の理解では、この時間の違いは、
1 つのファイルのリンクを解除する場合と 1500 個のファイルのリンクを解除する場合の違いによるものです。しかし、tar オブジェクトの削除は 1500 倍高速であるべきではないでしょうか?
答え1
それはだからない単純な「単一の inode を削除済みとしてマークする」操作:https://www.slashroot.in/how-does-file-deletion-work-linux
少なくとも ext4 では、エクステントの使用により、ファイルの削除は ext2/ext3 パーティションよりもはるかに高速になります。
SSDの場合、SSDの寿命を延ばすために、ファイルに属するすべてのブロックを物理的に破棄するようにSSDに指示する「破棄」オプションの使用により、ファイルの削除は必要以上に遅くなる可能性があります。ない無効にすることをお勧めします。