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 で即見抜ける
- 原因はほぼ「小ファイル大量生成」
- 設計と運用で確実に防げる
という対処しやすい障害でもあります。
本記事の手順を、ぜひ障害対応手順書に組み込んでください。
あわせて読みたい


df で空き容量があるのに書き込みエラーになる原因(inode不足など)
Linux でファイルを書き込もうとした際に、 No space left on device というエラーが出ることがあります。 しかし df -h を実行すると、空き容量がまだ十分にあるように…
