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

No space left on deviceの原因と直し方|Linuxの容量・inode確認

No space left on deviceは、書き込みなどに必要な領域を確保できないときに出るエラーです。原因はディスク容量不足とは限りません。Linuxのdf -h・df -iで容量とinodeを確認し、削除済みファイルやファイルシステム固有の制限まで順番に切り分けます。

エラーの意味と主な原因

保存先の空き領域・inode・削除済みファイルの保持などを確認します。削除や再起動を始める前に、実際の書き込み先と原因を特定するのが目的です。

最初にやること

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

最短の判断:df -h 書き込み先ディレクトリで容量を、df -i 書き込み先ディレクトリでinodeを確認します。両方に余裕があれば、マウント先・コンテナ層・エラーを返した処理を再確認します。結果別の分岐表へ進む。
このページの対象:一般的なLinuxのローカルファイルシステムで、ファイル作成・書き込み時にNo space left on deviceが出るケースです。NFS、コンテナのoverlay/tmpfs、ストレージ製品固有の制限では確認方法が異なる場合があります。表示がPermission deniedならPermission deniedのトラブルガイドを確認してください。

関連するLinux障害調査ガイド

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

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

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

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

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

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

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

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

df -hでエラーが出たパスのAvailとUse%を確認します。空きがほぼない場合は「容量不足」の分岐へ進みます。

df -h /var/log/myapp
容量調査の手順は別ページ:対象ファイルシステムの特定、findmnt、df、duを使った使用箇所の絞り込みは Linuxのディスク使用量を確認する方法 で詳しく説明しています。

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

df -hに余裕があるのにENOSPCなら、df -iでinode側も確認します。IFreeが0、またはIUse%が100%近ければ、小さいファイルの大量生成元を特定します。

df -i /var/log/myapp
注意:inodeの管理方法はファイルシステムによって異なります。数値だけで削除対象を決めず、生成元と保持要件を確認してください。

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

容量不足と判断できた場合だけ、同じファイルシステム内でduを使って大きい場所を絞ります。ここではENOSPC原因判定の次工程として扱い、一般的な容量調査の説明は専用ページへ分離します。

sudo du -x -h --max-depth=1 /var | sort -h
本番負荷に注意:duは多数のファイルを走査します。大規模環境では対象範囲を絞ってください。具体的な絞り込み手順は ディスク使用量確認ガイド を確認してください。

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も確認します。原因を特定せず上限値だけを引き上げないでください。

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

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

修正後の確認と再発防止

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

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

公式・一次資料

ほかの症状も確認する

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

トラブル解決一覧へ