ディスクの空き容量がない(No space left on device)
ファイルの保存やパッケージのインストールをしようとしたときに No space left on device と表示されて止まってしまう——という状況を、実際のコマンドの流れで切り分けていきます。
rm などの削除コマンドは元に戻せません。本当に不要なファイルかを確認してから実行してください。判断に迷う場合は、まずファイルを別の場所に退避してから削除するのが安全です。
どんな症状か
新しいファイルを保存しようとした、パッケージをインストールしようとした、ログが急に追記されなくなった、といった場面で No space left on device というエラーに遭遇したときの対応です。似た状況で Disk quota exceeded と表示される場合は、ディスク自体の空き容量ではなく、ユーザーごとの割り当て(クォータ)超過が原因のことがあります。
原因を切り分ける
ステップ1:どのパーティションが埋まっているか確認する
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 20G 0 100% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
Use% が100%に近いパーティションが原因です。上の例では /(ルート)が満杯になっています。マウントポイントが複数ある場合は、書き込めなくなったファイルが実際にどのパーティションに属しているかも合わせて確認します。
ステップ2:inode(ファイル管理領域)が枯渇していないか確認する
$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 1310720 1310720 0 100% /
df -h では空きがあるように見えるのに書き込めない場合、小さなファイルを大量に作ってinode(ファイルの管理情報の枠)を使い切っているケースがあります。IUse% が100%に近い場合はこちらが原因です。
ステップ3:どのディレクトリが容量を食っているか特定する
$ du -sh /var/* 2>/dev/null | sort -rh | head -5
2.1G /var/log
340M /var/cache
120M /var/lib
45M /var/tmp
12M /var/spool
du -sh で各ディレクトリの合計サイズを確認し、sort -rh で大きい順に並べ替えると、原因のディレクトリを素早く特定できます。上の例では /var/log(ログ)が突出して大きいことが分かります。
ステップ4:削除したのに容量が戻らない場合を疑う
$ lsof +L1 2>/dev/null | head -5
ファイルを削除しても、そのファイルを開いたままのプロセスがあると、ディスク上の領域はすぐには解放されません。lsof +L1 は「削除済みだがどこかのプロセスに掴まれたまま」のファイルを一覧表示します。該当プロセスを再起動すると領域が解放されます。
解決方法
原因が分かったら、状況に応じて次のような対処を行います。
- ログの肥大化が原因の場合:
journalctl --vacuum-size=200Mで journal ログを縮小、またはlogrotateの設定(保持期間・圧縮)を見直します。 - パッケージキャッシュが原因の場合:
apt clean(Debian系)やdnf clean all(RHEL系)でキャッシュを削除します。 - 不要なファイルが原因の場合: 内容を確認したうえで削除します。判断に迷うファイルは、削除前に別ディスクへ退避しておくと安心です。
- 削除しても容量が戻らない場合: 該当ファイルを掴んでいるプロセスを特定し、再起動して領域を解放します。