ハードリンクの削除が inode テーブル内の値の解放にどのように関係するかを理解しようとしていますか?

ハードリンクの削除が inode テーブル内の値の解放にどのように関係するかを理解しようとしていますか?

ハード リンクが削除されると、リンクは削除されますが、ファイル自体の内容は、ファイルへのすべてのリンクが削除されるまで存在し続けます (つまり、そのスペースは割り当て解除されません)。

私の理解ではのみファイル自体が削除されると、この特定のファイルのInodeテーブルはリセットされますか?元のファイルでさえ、1ls コマンドのメタデータ内。

たとえば、ファイルへのハード リンクが 2 つあり、両方のハード リンクを削除した場合、最後のリンクが削除されるまで、Inode データはテーブル内でインデックス付けされたままになりますか? これは正しいですか?

コマンドを使用すると、df -hiスペースがクリアされたかどうかについてはあまり情報が得られません。そこで、2 番目の質問は、Inode データがクリアされ、スペースを占有していないことを確実に知るにはどうすればよいかということです。

答え1

次の場合、inode のスペースと、inode テーブル内のブロックおよびスペースが解放されます。

  • inodeを指す最後のディレクトリエントリが削除されます。つまり、inodeへのハードリンクはなくなり、
  • inode を参照する最後のファイル記述子が閉じられています。つまり、inode は使用されなくなり、inode を参照する開いているファイル記述子はありません。

たとえば、プロセスはファイルを作成し、そのファイルを開いた後、そのファイルを一時保存場所として使用するためにすぐにリンクを解除する場合があります。プロセスが終了するか、強制終了されると、そのファイル記述子は自動的に閉じられ、一時ファイルは自動的に解放されます。

inode が実際に解放されるまで、inode とそのブロックは使用中となり、使用済み領域は df によって表示される使用済みブロックおよび inode として表示されます。最後のファイル記述子とハード リンクがなくなると、領域は解放され、df によるレポートが更新されます。

関連情報