インデックスノード
100%

ファイルシステム · レッスン 11

インデックスノード

inode 番号を介して、ディレクトリ内の名前がファイルシステムオブジェクトのメタデータやデータへ結び付く仕組みを学びます。

inode を使う Unix ファイルシステムでは、ディレクトリが各エントリ名を inode 番号へ対応付けます。inode はファイルシステムオブジェクトを表し、そのデータを見つけて解釈するために必要なメタデータを記録します。したがって、パス名はオブジェクト自体の主要な識別情報として保存されるわけではありません。

inode とともに保存されるメタデータ

inode に関連する一般的なメタデータには次のものがあります。

  • オブジェクトの種類とパーミッションモード
  • ユーザーとグループの所有権
  • 論理サイズと割り当て済みブロックの使用量
  • ハードリンク数
  • アクセス、変更、状態変更のタイムスタンプ
  • ファイルデータまたはファイルシステム固有のエクステント構造への参照

通常、inode にディレクトリエントリ名は保存されません。ファイルシステムによっては、拡張属性、アクセス制御リスト、作成時刻、インラインデータなどの情報を形式固有の構造で保存することもあります。

ctime は inode の状態変更時刻であり、必ずしもファイルの作成時刻ではありません。作成時刻を表す別のタイムスタンプは任意で、利用できないことがあります。

通常ファイルのパス名要素は、どこで inode 番号と関連付けられますか?

inode 番号とファイルシステムの範囲

inode 番号を表示します。

$ ls -li

最初のフィールドが inode 番号です。1 つのオブジェクトを詳しく調べるには、次を使います。

$ stat path

inode 番号が一意なのは、ある時点における 1 つのファイルシステム内だけです。別のファイルシステムでは同じ番号が存在でき、inode が解放されると番号が再利用されることもあります。オブジェクトを確実に識別するには、inode 番号だけでなく、ファイルシステムの識別情報と組み合わせてください。

inode 番号がオブジェクト識別子となる範囲はどれですか?

ハードリンクと開いている参照

複数のディレクトリエントリが同じ inode を参照できます。これがハードリンクです。別のハードリンクを作成すると、オブジェクトのリンク数が増えます。1 つの名前を削除しても、別のリンクが残っている間は、リンク数が減るだけでデータは削除されません。

最後のディレクトリエントリを削除した後も、開いているファイルは最後のプロセス参照が閉じるまで割り当てられたままです。リンク数が 0 でも、ファイル記述子からアクセスできることがあります。そのため、開いたままの大きなログを削除しても、df の使用量がすぐには減らない場合があります。

リンクを解除したファイルのリソースは、通常いつ解放されますか?

inode の容量

有限または報告可能な inode プールを持つファイルシステムでは、何百万もの小さなファイルによって、データブロックより先にメタデータ容量を使い切ることがあります。マウント済みファイルシステムの inode 使用量を調べます。

$ df -i

空き inode がなければ、df -h が空きブロックを報告していても、新しいファイルの作成に失敗することがあります。割り当て方法はさまざまです。作成時に inode 構造を事前割り当てするファイルシステムもあれば、メタデータを動的に管理し、inode 容量を異なる形で報告するものもあります。

ファイルシステムが inode 使用量を提供する場合、df -i は何を報告しますか?

ファイルシステム固有のデータ対応付け

すべての inode が、ちょうど 12 個の直接ポインターと 3 個の間接ポインターを持つとは考えないでください。これは古典的な一部のファイルシステム配置には有用な説明ですが、現代の ext4 はエクステントを使用でき、XFS、Btrfs、そのほかのファイルシステムは異なる構造を使います。インラインデータや、圧縮またはコピーオンライトされたエクステントでも関係が変わります。

内部の対応付けが重要な場合、ファイルシステム固有の診断ツールは、読み取り専用または文書化されたモードでのみ使ってください。通常の管理には、statfind -inumdf -i、リンクを理解するツールの方が安全な抽象化を提供します。

すべての inode に同じ固定ポインター配置があると考えてはいけないのはなぜですか?

レッスン完了

インデックスノード を完了しました

これで、パス名、inode、リンク、ファイルシステム容量の関係を説明できるようになりました。

  • ディレクトリエントリを、名前から inode 番号への対応付けとして扱う。

  • ctime と作成時刻を混同せず、メタデータとタイムスタンプを読み取る。

  • inode 番号を、1 つのファイルシステムと時点の範囲に限定する。

  • ハードリンクと開いているファイル記述子の両方を考慮する。

  • 1 つの万能なポインター配置ではなく、ファイルシステム固有のモデルを使う。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
ファイルシステム に戻る