Inode

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を検索します。

inode番号とstatシステムコール



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に関する解説(英語)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。