web-dev-qa-db-ja.com

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

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

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

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

コマンドを使ってdf -hiスペースがクリアされているかどうかにかかわらず、多くの情報は関連しません。だから、私の2番目の質問は、iノードデータが明確でスペースを服用していないときに確かに私は確かに知ることができますか?

1
Usernamehere

Iノードのスペースは解放され、そのブロックとiノードテーブルのスペースが次のようになります。

  • Iノードを指す最後のディレクトリエントリは削除されます。つまり、iノードへのハードリンクはもうありません。
  • Iノードを参照する最後のファイル記述子は閉じています。つまり、iノードは使用されなくなり、iノードにはそれを参照しているオープンファイル記述子がありません。

たとえば、プロセスはファイルを作成し、ファイルを開き、そのファイルを一時的なストアとして使用するためにすぐにリンクされます。プロセスが終了した場合、またはその他の点では強制されている場合、そのファイル記述子は自動的に閉じられ、一時ファイルは自動的に解放されます。

Iノードが実際に解放されるまで、iノードとそのブロックは使用され、使用されているスペースはDFによって表示されるように使用されたブロックとノードと見なされます。最後のファイル記述子とハードリンクがなくなると、スペースが解放され、DFによる報告がそのように更新されます。

2
Theodore Ts'o