ファイルシステムが不整合を起こすの理由の理解

ファイルシステムの不整合の理由の一つとして、
書籍におきまして、堅苦しい文章で説明されていたため、理解が難しく、現在の自分の解釈としては以下のようなものになります。

お手数ですがもし誤り等がありましたら、ご意見等頂けましたらと思います。↓


・リンクカウントとリファレンスカウント両方が0になって初めて、該当ファイルの持つ各ブロックの解放可能属性がonとなり、実際にディスク上から削除される。

・つまり、ファイルシステムから対象ファイルへのハードリンク全て削除したとしても、あるプロセスが該当ファイルをオープンしたままだと、解放可能属性がoff(使用中)のままとなり、解放対象とはならない。

・運悪くこの状態でシステムがクラッシュすると、通常ならオープンしたままのfdをクローズするという終了処理がされないことになるため、関連ブロックは使用中のままとなる。

・再度起動した際も該当ブロックは使用中のままとなる。
これが、ファイルシステムの不整合となる原因の一つであり、該当ブロックは実際は使用されていないにも関わらず、使用できない(使用中のため)状態となる。

・close()するタイミングでリファレンスカウントは減じられるという点が肝で、このタイミングを逃すことが矛盾を生むということ。
fdは揮発性のメモリ上に保存される情報であり、
ファイルシステムは起動後に自力で修正することが物理的にできない。


このような具合なのですが、
起動直後はリファレンスカウントはどのファイルも0のはず(どのファイルもopen()されていない)なので、不自然にリファレンスカウントだけが非0のものがあれば、それは不整合とみなしてファイルシステムが該当ブロックを削除してくれればいいだけの話のように感じてしまいます。

自分はどこかに理解ミスがあるように思います...
よろしくお願いいたします。

コメントを投稿

0 コメント