inode(アイノード)とは
Linuxのファイルシステムは、inodeというデータ構造を使って各ファイルやディレクトリの情報を管理しています。inodeはファイル名とは独立しており、実際のディスク上の位置やサイズ、所有者、アクセス権、作成・更新日時などを格納しています。
inodeの内部構造
主な項目は以下の通りです。
- inode番号:ファイルを一意に識別する番号。
- ファイルタイプ:通常ファイル、ディレクトリ、シンボリックリンクなど。
- 所有者UID / グループGID。
- アクセス権(mode)。
- サイズ:バイト数。
- タイムスタンプ:作成(atime)、変更(mtime)、状態変更(ctime)。
- データブロックへのポインタ:実データが格納されているディスクブロックへの参照。
- リンク数(hard link count):このinodeに紐付くディレクトリエントリの数。
inode番号とハードリンク
同一のinode番号を持つ複数のファイル名はハードリンクと呼ばれます。リンク数が0になると、OSはそのinodeとデータブロックを解放します。
inodeを確認する方法
コマンドラインから簡単にinode情報を取得できます。
- ファイルのinode番号を表示:
ls -i ファイル名 - 詳細情報を表示:
stat ファイル名 - ディレクトリ内のすべてのinode番号を一覧:
find . -printf "%i %p\n"
inodeに関する注意点
以下の点に注意して運用しましょう。
- ファイルシステムごとにinode数は固定です。大量の小ファイルを作成するとinodeが枯渇し、新規ファイル作成ができなくなることがあります。
- 削除できないファイルが残る原因の一つは、プロセスがそのファイルを開いたままであることです。inodeは削除されても、プロセスが開いている限りディスク領域は解放されません。
- ext4やXFSなど、ファイルシステムの種類によってinodeの配置や最大数が異なります。フォーマット時に適切なinode数を設定することが重要です。
まとめ
inodeはLinuxのファイルシステムの根幹を支える重要な概念です。inode番号、リンク数、タイムスタンプなどを理解すれば、ディスク容量管理やトラブルシューティングが格段に楽になります。日常の運用でls -iやstatを活用し、inodeの状態を意識したファイル操作を心がけましょう。