inode枯渇による障害の見抜き方と解消手順

  • URLをコピーしました!

Linuxサーバーで「ディスク容量は空いているのにファイルが作れない」 という障害が発生した場合、真っ先に疑うべきなのがinode枯渇です。

本記事では、inode枯渇障害を即座に見抜く方法から、 その場で復旧する手順・再発防止策まで、現場対応レベルで解説します。

目次

inodeとは何か?(最重要ポイント)

inodeとは、Linuxファイルシステムにおいて ファイルやディレクトリ1つにつき必ず1個消費される管理情報です。

  • ファイルサイズ
  • 所有者
  • パーミッション
  • 保存場所(ブロック)

inodeが尽きる=新しいファイルを一切作れない状態になります。

inode枯渇時の典型的な症状

  • touch や echo が失敗する
  • ログが突然出力されなくなる
  • アプリが設定ファイルを生成できず異常終了
  • 「No space left on device」と表示される

特に厄介なのは、df -h では空きがある点です。

inode枯渇を一発で見抜く確認コマンド

① inode使用率の確認

df -i

出力例:

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/sda1      5242880 5242880       0  100% /

IUse% が 100% なら inode枯渇確定です。

② 容量とinodeの違いを確認

df -h

容量は空いているのに inode が枯渇しているケースが典型です。

inodeが枯渇する主な原因

  • 大量の小さなログファイル
  • 一時ファイルの削除漏れ
  • メールキューの滞留
  • 監視エージェントの暴走
  • アプリのバグによるファイル無限生成

「小さいファイルが大量」が最大の特徴です。

inodeを大量消費しているディレクトリの特定

① ディレクトリ単位でinode数を調査

find / -xdev -type f | wc -l

特定ディレクトリを調べる場合:

find /var/log -type f | wc -l

② 上位ディレクトリから切り分ける

for dir in /var/*; do echo "$dir: $(find $dir -type f | wc -l)"; done

inodeを大量消費しているディレクトリが一目で分かります。

今すぐできるinode枯渇の解消手順

① 不要ファイルの削除(最優先)

rm -f /var/log/*.old

ログ削除後は必ず再確認します。

df -i

② 古いファイルを日付で削除

find /var/log -type f -mtime +30 -delete

③ メールキューの確認(Postfix例)

mailq
postsuper -d ALL

削除してもinodeが解放されない場合

削除したはずなのに inode が減らない場合、 プロセスがファイルを掴んだままの可能性があります。

開いている削除済みファイルを確認

lsof | grep deleted

該当プロセスを再起動すると inode が解放されます。

inode枯渇を防ぐための再発防止策

  • logrotateの適切な設定
  • 一時ファイルディレクトリの定期清掃
  • 監視による inode 使用率アラート
  • ファイル大量生成アプリの見直し

inode監視の実務ポイント

ディスク容量だけでなく、必ず以下も監視対象に含めます。

  • inode使用率(df -i)
  • /var, /tmp, /var/tmp

inode監視がない環境は、事故が起きる前提と考えるべきです。

まとめ

inode枯渇は、気づいた時には業務停止につながる典型障害です。

しかし、

  • df -i で即見抜ける
  • 原因はほぼ「小ファイル大量生成」
  • 設計と運用で確実に防げる

という対処しやすい障害でもあります。

本記事の手順を、ぜひ障害対応手順書に組み込んでください。

目次