inode(アイノード)とは
inode(アイノード)は、ext2をはじめとする
Unix系ファイルシステムで古くから利用されているデータ構造です。
ファイルシステム上のファイルや
ディレクトリといったオブジェクトに関する基本情報を格納しており、ファイル管理の中核を担っています。最近の
ファイルシステムではinodeを使用しないものもありますが、同等の機能を果たすために同様の情報を保持しています。stat
システムコールを通じてプログラムに提供されるこれらの情報は、しばしば「statデータ」と呼ばれます。
inodeの役割
Linuxでは、
カーネルメモリ上でinodeの情報は `struct inode` として表現されます。BSD系システムでは `vnode` と呼ばれますが、これは仮想
ファイルシステム層に由来します。
POSIX標準で規定される
ファイルシステムの動作は、従来の
UNIXファイルシステムに大きく影響されており、ファイルには以下の属性が求められます。
ファイルの長さ(バイト数)
デバイスID(ファイルを格納するデバイスの識別子)
ファイル所有者のユーザーID
ファイルのグループID
ファイルシステム内でのinode番号(ファイル識別子)
ファイルモード(パーミッション)
最終更新時刻(ctime)、最終ファイル変更時刻(mtime)、最終アクセス時刻(atime)のタイムスタンプ
inodeを指す
ハードリンク数
inodeは、通常ファイル、
ディレクトリ、シンボリックリンクに対応し、
ファイルシステムの復旧においても重要です。inode番号は、そのinodeが記録されているデバイス上で一意の
整数値であり、全てのファイルはinodeにリンクされています。プログラムがファイル名でファイルを参照する際には、システムは対応するinodeを検索します。
stat
システムコールは、ファイルのinode番号やその他のinode内情報を取得する機能を提供します。inodeの「i」が何を意味するのかは明確ではありませんが、
UNIX開発者のデニス・リッチーは、「index」が由来ではないかと示唆しています。初期の
ファイルシステム構造では、ファイルアクセス情報がディスク上のフラットな配列に格納されており、「i-number」がその配列のインデックス、「i-node」が配列の要素だったと考えられています。
inodeに関する特性
inodeの概念に慣れていないユーザーは、
ファイルシステムの特性に驚くことがあります。例えば、複数の名前が同じinodeにリンクする
ハードリンクの場合、どの名前も等価であり、最初に作成されたファイル名は特別ではありません。これは、シンボリックリンクがオリジナルの名前に依存するのと対照的です。
リンクを持たないinodeも存在し、そのようなファイルは削除されるとディスクから解放されます。ただし、
プロセスが使用中の場合は、クローズされるまでアクセスが可能です。プログラムのアップデート時には、旧バージョンの
実行ファイルを削除してから新しい
実行ファイルを作成することで、実行中のプログラムに影響を与えずに更新が可能です。
オペレーティングシステムはファイル名をinode番号に変換するとファイル名を忘れるため、フルパス名を取得するためにはinode番号から親
ディレクトリをたどる必要があります。また、
ディレクトリの
ハードリンクは混乱の原因となるため、最近のシステムでは制限されています。
inodeの実用的な考慮
UNIXのシステム管理者は、inode番号を表示するツールを利用してファイルを特定することがあります。例えば、fsckやpfilesなどのコマンドは、inode番号をパス名に変換したり、その逆を行ったりする機能を提供します。findコマンドの`-inum`オプションやlsコマンドの`-i`オプションがその例です。
また、ファイル削除後も
プロセスがファイルを使用している場合、アクセスが継続できるという特性がセキュリティ上の問題を引き起こすことがあります。特に、多くの
プロセスが参照するライブラリのアップデートでは、旧バージョンのライブラリにアクセスし続けるため、脆弱性が修正されない可能性があります。したがって、システムの中核となるライブラリを更新した際には、システム再起動などの対策が必要となります。
トリビア
International Association of Computer Investigative Specialists (IACIS) の会議で、inodeは "I'm Not Operating DOS Ever" の略であるという提案がなされましたが、これは全くの嘘として退けられました。
外部リンク
*
The Linux Virtual File-system Layer: Inodes and Operations -
Linuxでのinodeに関する解説(英語)