インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る

LinuxでNo space left on deviceになる原因と確認手順|df・inode・削除済みファイル

Linuxでファイル作成や書き込み時にNo space left on deviceが出たとき、いきなり削除せず、対象ファイルシステムの容量・inode・削除済みオープンファイルを順番に確認して原因を特定するページです。

このページの目的

「容量不足」「inode不足」「削除したファイルをプロセスが保持」のどこで詰まっているかを分けます。ゴールは、削除やサービス再起動の前に原因と影響範囲を確認することです。

最初にやること

エラーが出たパスのファイルシステムを対象に、まずdf -hdf -iを記録します。対象ファイルがまだ存在しない場合は、作成先の親ディレクトリを指定します。

このページの対象:一般的なLinuxのローカルファイルシステムで、ファイル作成・書き込み時にNo space left on deviceが出るケースです。NFS、コンテナのoverlay/tmpfs、ストレージ製品固有の制限では確認方法が異なる場合があります。表示がPermission deniedならPermission deniedのトラブルガイドを確認してください。

最初に対象ファイルシステムを確認する

No space left on deviceが出たら、サーバー全体の空き容量だけを見るのではなく、失敗したパスが載っているファイルシステムを確認します。たとえば/var/log/myapp/app.logへの書き込みで失敗した場合は、次のように対象パスを指定します。

df -h /var/log/myapp df -i /var/log/myapp

dfにパスを渡すと、そのパスを含むファイルシステムの使用状況を確認できます。対象ファイルが未作成なら、作成先ディレクトリを指定します。

最初から削除しない:容量不足に見えてもinode不足や削除済みオープンファイルが原因の場合があります。ログや一時ファイルを無差別に削除すると、障害調査に必要な情報を失ったり、アプリケーションへ影響したりします。

表示・確認結果から原因を絞る

確認結果・症状主な確認先次の確認
df -hAvailがほぼ0データブロックの空き不足duで同じファイルシステム内の使用箇所を絞る
df -iIFreeが0またはIUse%が100%近いinode不足小さいファイルが大量にあるディレクトリを確認
dfでは大きく使用しているのにduでは見つからない削除済みファイルをプロセスが開いたまま、別マウントの数え方などlsof +L1でリンク数0のオープンファイルを確認
df -hdf -iの両方に余裕がある確認対象のファイルシステム違い、overlay/tmpfs、製品・FS固有の制限、ディスク以外のリソース上限などエラー発生パスと実際のマウント先・実行環境、エラーを返した処理を再確認
Disk quota exceededユーザー・グループ等のquotaNo space left on deviceとは分けてquota設定を確認

df -hで容量不足を確認する

dfはファイルシステム全体の使用量と空き容量を確認するコマンドです。まずAvailUse%を見ます。

df -h /var/log/myapp

Use%が高く、特にAvailがほぼ0なら、同じファイルシステムで容量を使っている場所を調べます。別ファイルシステムの空きが多くても、対象パス側が満杯なら書き込みは失敗します。

df -iでinode不足を確認する

ファイルシステムによっては、データ容量に余裕があってもファイル管理に使うinodeが不足すると、新しいファイルを作れなくなります。GNU df -iはブロック使用量の代わりにinode使用量を表示します。

df -i /var/log/myapp

IFreeが0、またはIUse%が100%近い場合は、小さいファイルが大量生成されていないかを確認します。GNU coreutils環境では、次のようにディレクトリ単位のinode使用数を絞れます。

sudo du --inodes -x --max-depth=1 /var | sort -n
注意:inodeの管理方法はファイルシステムによって異なります。df -iの結果だけで削除対象を決めず、どのアプリケーションが大量のファイルを生成したかまで確認してください。

duで容量を使っている場所を探す

df -hで対象ファイルシステムの空きが少ないことを確認したら、duでディレクトリごとの使用量を絞ります。-xを付けると別ファイルシステムへまたがらずに調査できます。

sudo du -x -h --max-depth=1 /var | sort -h

大きいディレクトリが見つかったら、対象を一段ずつ絞ります。たとえば/var/logが大きい場合は次のように確認します。

sudo du -x -h --max-depth=1 /var/log | sort -h
負荷に注意:duは多数のファイルを走査するため、大規模ファイルシステムではI/O負荷が上がることがあります。本番環境では対象範囲を絞り、実行タイミングも考慮してください。

dfとduが合わないときは削除済みファイルを確認する

ファイルを削除してディレクトリエントリが消えても、そのファイルをプロセスが開いたままなら、最後のファイルディスクリプタが閉じられるまで領域が解放されないことがあります。この場合、duでは見えにくい一方でdfの使用量が減らないことがあります。

sudo lsof +L1

+L1はリンク数が1未満、つまりリンク数0のオープンファイルを絞るために使えます。SIZE/OFF、プロセス名、PIDを確認し、対象が大きな削除済みファイルか判断します。

PIDを見て即killしない:領域を解放するには最終的に対象ファイルを開いているプロセスがファイルを閉じる必要がありますが、影響を確認せずkill -9するのは危険です。アプリケーションがサポートするログ再オープン、reload、計画的なrestartなど、サービスに合った方法を選びます。

なお、lsof公式ドキュメントでは、NFSクライアント上のリンク数はローカルディスクと同じ前提では扱えないことが案内されています。NFSではこの確認だけで断定しないでください。

容量・inodeに余裕があるのにENOSPCの場合:No space left on deviceは、必ずしもディスク容量だけを意味しません。たとえばLinuxのinotify_add_watch()は、ユーザー単位のinotify watch上限に達した場合などにもENOSPCを返します。ファイル監視アプリで発生している場合は、エラーを返した処理をログ等で確認し、必要に応じてsysctl fs.inotify.max_user_watchesも確認します。原因を特定せず上限値だけを引き上げないでください。

確認結果から次の対応を決める

原因修正前に確認すること対応の考え方
データ容量不足大きいファイルの用途、保存期間、バックアップ・監査要件不要と確認できたデータの整理、正式なローテーション・アーカイブ、容量拡張を検討
inode不足大量ファイルの生成元、保持要件、再生成可否生成元を止めずに削除だけ繰り返さず、保持・生成設計を見直す
削除済みオープンファイル保持プロセス、サービス影響、再オープン手段サポートされたreload/reopen/restartでファイルを閉じ、解放を確認
容量・inodeとも正常対象パスの実環境、コンテナ層、tmpfs/NFS、FS固有の制限ディスク不足と決めつけず、実際にエラーを返している層を再特定

修正後の確認と再発防止

対応後は、最初に記録したのと同じパスで再確認します。

df -h /var/log/myapp df -i /var/log/myapp sudo lsof +L1
切り分けの基本:df -hdf -idu → 必要ならlsof +L1の順で確認すると、「何となくファイルを消す」対応を避けやすくなります。

公式・一次資料

ほかの症状も確認する

エラーメッセージや症状が異なる場合は、トラブル解決ガイド一覧から確認順を選べます。

トラブル解決一覧へ