inodeと「No space left on device」
概念ext4 および類似のファイルシステム
inodeは、Unix系ファイルシステムにおいて、ファイルの所有者、権限、サイズ、データが保存されている場所などの情報を格納するために使用されるデータ構造です。各ファイルは1つのinodeを使用し、多くのファイルシステムではinodeの総数が固定されているため、数百万もの小さなファイルが存在すると、df -hコマンドでは空き容量があるように見えても「No space left on device」エラーが発生することがあります。
1確認方法
df -iコマンドは、ファイルシステムごとのinodeの総数、使用数、空き数を一覧表示します。ls -iコマンドはファイルのinode番号を表示し、stat <file>コマンドはinodeの詳細情報を表示します。
2一般的な原因
Webアプリケーションのセッションディレクトリやキャッシュディレクトリ、メールキュー、ローテーションされていない小さなログファイル、ビルドキャッシュなどが、数百万ものファイルを作成する原因となることがあります。
3ディレクトリの特定
GNU duコマンドでinodeをカウントできます。du --inodes -x / | sort -n | tailを実行すると、エントリ数が多いディレクトリが一覧表示されます。
inode枯渇の解決方法
- 確認:
df -iを実行し、IUse%が100%に近いことを確認します。 - ディレクトリの特定:
sudo du --inodes -x --max-depth=3 / | sort -n | tail -20 - 削除を行う前に、何がファイルを作成しているかを確認してください。
- 該当アプリケーションのツールを使用して古いファイルを削除するか、findコマンドを使用します。例: 「-delete」オプションを付けずにドライランを実行して確認した後、
find /path -type f -mtime +7 -deleteを実行します。
注意点
- findコマンドを実行する際は、必ず最初に「-delete」を付けずに実行し、リストを確認してください。
- ext4のinode数は、ファイルシステム作成時に固定されます。
関連記事
- df (disk free)dfコマンドの出力の読み方、一般ユーザーにおいてAvailがゼロになる前にUse%が100%に達する理由、およびdf -iを使用してinodeを確認する方法について解説します。
- findコマンドで大容量ファイルや古いファイルを検索するLinuxでfindコマンドを使用して大容量ファイルや古いファイルを一覧表示し、安全にプレビューした上で確認済みのファイルのみを削除する方法を解説します。
- du および ncdu を使用したディスク使用量の確認Linux ディスクを圧迫している原因を、du および対話型の ncdu を使用して特定する方法を解説します。同一ファイルシステム内に留まるオプションについても説明します。
出典
最終確認: