Linuxでinode番号を確認する代表的な方法はls -iとstatです。inode番号は、同じファイルシステム内のファイル実体を識別し、ハードリンクの確認、名前変更や置換の調査、inode枯渇の診断に役立ちます。ただし、inode番号だけを全システム共通の永続IDとして扱うことはできません。本稿では表示方法に加え、正しい照合単位と実務での使いどころを整理します。
inode番号が表しているもの
inodeには、ファイル種別、モード、所有者、リンク数、サイズ、タイムスタンプ、割り当てブロックなどのメタデータが関連付けられます。ディレクトリ内の名前は、その実体を表すinodeへの参照です。通常ファイルでは、複数の名前が同じinodeを指すハードリンクを作れます。内容を一方の名前から変更すると、同じinodeを指す別名から見ても変更後の内容になります。
inode番号の一意性は特定のファイルシステム内に限られます。別のファイルシステムでは同じ番号が再利用されるため、厳密な識別にはデバイスIDとinode番号の組を使います。Linux man-pagesもst_devとst_inoを対応する情報として説明しています。マウント構成をまたいだ一覧でinode番号だけを比較してはいけません。
ls -iで現在のディレクトリを確認する
ls -iは、各エントリの左側にinode番号を表示します。リンク数や権限も同時に見たい場合は-lを加えます。ディレクトリそのものを調べるときは-dを使い、ディレクトリの中身を一覧する動作と区別します。ファイル名がオプションに見える場合に備えて、対象名の前へ--を置きます。
ls -i -- ./report.csv
ls -li -- ./report.csv
ls -lid -- ./archive
表示例で同じinode番号と同じデバイス上にある複数の名前は、同じ実体へのハードリンクである可能性があります。ただし、画面に見えるinode番号が同じだけでは、別マウントかどうかを判定できません。次のstatでデバイス番号とリンク数も確認します。また、アクセス権が不足すると一部の属性を取得できないことがあります。
statでデバイス・inode・リンク数を一緒に出す
GNU statでは、%iがinode番号、%dがデバイス番号の10進表現、%Dが16進表現、%hがハードリンク数、%Fがファイル種別、%nが名前です。照合用ログには、少なくともデバイスとinodeを同じ行へ出します。サイズや更新時刻も加えると、後の調査で対象を取り違えにくくなります。
stat --format='device=%d inode=%i links=%h type=%F size=%s name=%n' -- ./report.csv
stat --printf='%d\t%i\t%h\t%s\t%Y\t%n\n' -- ./report.csv
%Yは最終データ更新時刻をEpoch秒で出すため、機械比較に向いています。ただし、属性を取得してから別の処理を行うまでの間に、名前の付け替えやファイルの置換が起こる可能性があります。セキュリティ判断や削除判断を「先に得たinode番号」だけで行うと、TOCTOUと呼ばれる時点差の問題が生じます。本稿の例は観察と照合に限定します。
ハードリンクとシンボリックリンクを見分ける
ハードリンクは同じinodeを共有する別名です。リンク数はstatの%hやls -lのリンク数欄で確認できます。一方、シンボリックリンクは参照先のパス文字列を持つ別のファイルで、リンク自身にも別のinodeがあります。したがって、リンクそのものと参照先をどちらも調べるには、リンク追跡の有無を明示します。
ls -li -- ./current ./releases/app.conf
stat --format='follow: %d:%i %F %n' -- ./current
stat --dereference --format='target: %d:%i %F %n' -- ./current
GNU statは通常、シンボリックリンク自体の情報を表示し、--dereferenceを指定すると参照先をたどります。コマンドやシステムコールによって既定のリンク追跡規則が異なるので、「同じパスを指定したから同じinodeが出る」と決めつけないことが重要です。存在しない参照先やリンクの循環ではエラーになるため、標準エラーと終了ステータスも記録します。
同じinodeを持つ名前を読み取り専用で探す
あるinodeへのハードリンクを探すには、対象と同じファイルシステム内をfindで検索できます。先にstatでデバイス番号とinode番号を取得し、開始点が同じマウント内かを確認します。-xdevは別ファイルシステムへの横断を止め、-inumは指定inode番号を持つエントリを選びます。
stat --format='device=%d inode=%i links=%h name=%n' -- /srv/data/report.csv
find /srv/data -xdev -inum 123456 -print
例の123456は、実際に確認したinode番号へ置き換えます。検索結果がリンク数より少ない場合は、開始点の外に別名がある、権限不足で探索できない、調査中に構成が変化した、といった可能性があります。逆に、ディレクトリのリンク数には.や子ディレクトリとの関係など通常ファイルとは異なる規則が関わるため、同じ数え方を当てはめません。
名前変更・上書き・置換をinodeで判別する
同じファイルシステム内で単に名前が変更されただけなら、通常はデバイスとinodeの組が維持されます。一方、アプリケーションが一時ファイルへ新内容を書き、最後にrenameで差し替える保存方式では、同じパスでもinodeが変わります。設定ファイルやログの監視で「パスは同じなのに追跡が途切れた」ときは、変更前後のデバイス・inode・更新時刻を比較します。
ただし、inode番号はファイル削除後に再利用され得ます。長期間離れた二つの観測で同じ番号が出ても、同一ファイルだった証明にはなりません。ファイルシステムの再作成、スナップショット、復元、コンテナや名前空間、ネットワークファイルシステムも識別の意味を変えます。監査用途ではinodeだけに依存せず、時刻、サイズ、ハッシュ、保存元のイベント情報などを組み合わせます。
inode枯渇をdf -iで調べる
空き容量があるのに新しいファイルを作れない場合、inodeまたはファイルシステム固有のメタデータ資源が不足している可能性があります。GNU df -iは、ブロック使用量ではなくinode使用量を表示します。メールキュー、キャッシュ、セッション、ビルド生成物など小さいファイルが大量に増える環境では、バイト容量より先にinode側が上限へ近づくことがあります。
df -i -- /var
df -h -- /var
du --inodes -x --max-depth=2 -- /var | sort -n | tail
最初の二つでinodeと容量を同じマウントについて確認し、三つ目で配下のinode消費が多い場所を絞ります。du --inodesはファイル数調査に便利ですが、ファイルシステムが報告する総inode数の意味や割り当て方式は実装ごとに異なります。inodeが固定数で事前作成されると一律に説明せず、ext4、XFS、Btrfs、tmpfs、NFSなど対象ファイルシステムの公式資料も確認します。
運用監視へ組み込むときの設計
監視では、df -iの使用率だけでなく、増加速度、残数、対象マウント、ファイルシステム種別、収集成功可否を保存します。使用率が低くても急増している場合があり、分母が小さい領域では残数の方が実務上重要です。また、権限エラーをゼロ件として扱うと誤判定するため、データなしと正常なゼロを区別します。
原因調査では、まず読み取り専用の集計で増加元を特定し、保持期間やアプリケーション設定を確認します。多数のファイルを一括削除する操作は、業務影響、バックアップ、法的保持、オープン中ファイル、シンボリックリンク、マウント境界を検証した別手順に分けます。inode番号を知ることは診断材料であって、それだけで削除対象を決める根拠ではありません。
実務での確認フロー
findmntやdfで対象パスが属するファイルシステムを確認する。statでデバイス番号、inode番号、リンク数、種別、サイズを一緒に取得する。- シンボリックリンクの場合は、リンク自体と参照先のどちらを調べるか明示する。
- ハードリンク探索は同じマウント内に限定し、権限エラーを記録する。
- 容量問題では
df -hとdf -iを対にして比較する。 - 長期識別にはinode単独を使わず、観測時刻や内容の識別情報も組み合わせる。
確認チェックリスト
- inode番号をデバイス番号と組にして比較している
- ハードリンクとシンボリックリンクを区別している
- リンク追跡の有無をコマンドで明示している
- inode番号が削除後に再利用され得ることを考慮している
- 同じパスでも置換保存によりinodeが変わる可能性を考慮している
- inode枯渇の診断で容量使用量とinode使用量を別々に確認している
inodeは、Linuxのファイルを「名前」だけでなく実体との対応から理解するための有力な手掛かりです。ls -iで手早く確認し、statでデバイス番号とリンク数を補い、df -iでファイルシステム全体の資源を調べる、という役割分担を守ると、リンクや置換、容量不足の調査精度が上がります。

コメント