ファイルは時々変更されますが、inodeは変更されず、その逆も同様です。なぜですか?

ファイルは時々変更されますが、inodeは変更されず、その逆も同様です。なぜですか?

ファイルが更新されると、対応する索引ノードも更新されます。しかし、時には次のような状況が発生します。

  1. ファイルは同じで、inodeは新しいものです。
  2. ファイルが変更されましたが、対応する inode が古い。

なぜ?

ベストアンサー1

質問は少し不明ですが、試してみましょう。


エディタなどを使用してファイルを編集すると、通常は新しいファイルが作成されますが(新しいinodeを含む)、同じ/編集されたデータが含まれます。元のファイル(オリジナルのinodeを含む)はバックアップとして保存できます。

一方、シェルリダイレクト(>and)はinodeを再利用するため、ファイルを上書きまたは追加した後もinodeは変更されません。>>(欠点は、古い内容を上書きすることが多いため、誤って上書きすると保存できないことです。)


inodeが「順番に」使用されるという保証はなく、使用可能な最も低いinodeが最初に使用されます。 「最も古い」(最初に削除された)iノードは、必ずしも「最新」iノードの前に使用されるわけではありません。ファイルを削除すると、解放されたリソースがファイルシステムによって維持されている2つのリストに追加されます。 1つは使用可能なブロック(つまりディスクのスペース)を含み、もう1つは使用可能なinodeを含みます。これらのリストは特定の順序ではありません。つまり、ファイルが削除されたときに解放されたリソースが追加されるだけです。

通常、これら2つのリストは「チャンク」のままであるため、複数のinodeまたは複数の空きブロックが緩やかにグループ化されます。新しいファイルにリソースが必要な場合、ファイルシステムは通常、次のファイルに移動する前に「ブロック」のリソースの使用を完了します。

したがって、要約すると、inodeやスペースブロックがどの順序で再利用されるのかわかりません。 inode番号や削除順に並べ替えられません。すべてのinodeまたはすべてのスペースは、再使用される前に同じ時間を「待機」する必要はありません。一部はほとんどすぐに再利用されますが、他のものは長い間再利用されません(リスト内のどの「チャンク」に含まれるかによって異なります)。

おすすめ記事