
ファイルが更新されると、対応する索引ノードも更新されます。しかし、時には次のような状況が発生します。
- ファイルは同じで、inodeは新しいものです。
- ファイルが変更されましたが、対応する inode が古い。
なぜ?
答え1
質問は少し不明ですが、試してみましょう。
エディタなどを使用してファイルを編集すると、通常は新しいファイルが作成されますが(新しいinodeを含む)、同じ/編集されたデータが含まれます。元のファイル(オリジナルのinodeを含む)はバックアップとして保存できます。
一方、シェルリダイレクト(>
and)はinodeを再利用するため、ファイルを上書きまたは追加した後もinodeは変更されません。>>
(欠点は、古い内容を上書きすることが多いため、誤って上書きすると保存できないことです。)
inodeが「順番に」使用されるという保証はなく、使用可能な最も低いinodeが最初に使用されます。 「最も古い」(最初に削除された)iノードは、必ずしも「最新」iノードの前に使用されるわけではありません。ファイルを削除すると、解放されたリソースがファイルシステムによって維持されている2つのリストに追加されます。 1つは使用可能なブロック(つまりディスクのスペース)を含み、もう1つは使用可能なinodeを含みます。これらのリストは特定の順序ではありません。つまり、ファイルが削除されたときに解放されたリソースが追加されるだけです。
通常、これら2つのリストは「チャンク」のままであるため、複数のinodeまたは複数の空きブロックが緩やかにグループ化されます。新しいファイルにリソースが必要な場合、ファイルシステムは通常、次のファイルに移動する前に「ブロック」のリソースの使用を完了します。
したがって、要約すると、inodeやスペースブロックがどの順序で再利用されるのかわかりません。 inode番号や削除順に並べ替えられません。すべてのinodeまたはすべてのスペースは、再使用される前に同じ時間を「待機」する必要はありません。一部はほとんどすぐに再利用されますが、他のものは長い間再利用されません(リスト内のどの「チャンク」に含まれるかによって異なります)。