VPSや自宅サーバーを運用していると、ある日突然「No space left on device」というエラーが出てサービスが止まることがあります。本記事では Ubuntu 24.04 LTS でディスク容量不足を解消する方法を、実際にコマンドを動かしながら解説します。まずどこが容量を食っているかを調べ、安全に削除できるものから順番に片付けていきます。
この記事のポイント
df -hでディスク使用量を確認し、du -shで原因ディレクトリを特定するapt cleanとapt autoremoveでaptキャッシュと不要パッケージを削除するjournalctl --vacuum-time=7dでsystemdログを圧縮するfind / -type f -size +100Mで巨大ファイルを発見する- Ubuntu 24.04 で検証。各コマンドの実行結果をそのまま掲載
目次
- まず現状を確認する(df -h)
- aptキャッシュを削除する(apt clean)
- 不要パッケージを削除する(apt autoremove)
- systemdログを圧縮する(journalctl)
- 大きなファイルを探して削除する
- apt のリストキャッシュを削除する
- よくあるエラーと対処
- まとめ
まず現状を確認する(df -h)
いきなり削除するのは危険です。最初に df -h でどのファイルシステムが逼迫しているかを確認しましょう。
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 48G 1.2G 98% /
tmpfs 3.9G 0 3.9G 0% /dev/shm

Use% が 98% になっています。/dev/vda1 でルートファイルシステムがほぼ満杯の状態です。次に du -sh でどのディレクトリが容量を使っているかを特定します。
96M /usr/lib
63M /var/lib/apt/lists
53M /usr/share
23M /var/cache/apt/archives
356K /var/log

実測の結果、/var/lib/apt/lists(63MB)と /var/cache/apt/archives(23MB)という apt 関連キャッシュが合計86MBを占めていました。これらは安全に削除できる代表格です。
注意
本記事のコマンドは Ubuntu 24.04 LTS で検証しています。df の表示はVPSのストレージ構成によって異なる場合があります。/dev/vda1 や /dev/sda1 など複数のパーティションがある場合は Use% が100%に近い行に注目してください。
aptキャッシュを削除する(apt clean)
Ubuntuで apt install を実行すると、ダウンロードした .deb パッケージが /var/cache/apt/archives/ にキャッシュとして残ります。インストール済みのパッケージには影響しないので、最初に試すべき最も安全な方法です。
手順1:apt clean を実行する
23M /var/cache/apt/archives/
$ ls /var/cache/apt/archives/*.deb | wc -l
49
$ sudo apt clean
$ du -sh /var/cache/apt/archives/
12K /var/cache/apt/archives/

Ubuntu 24.04 に nginx・curl・wget・vim をインストールした状態で実測したところ、49個の .deb ファイル(計23MB)が一瞬で削除されました。実行後はインストール済みパッケージは何も変わりません。定期的に実行しておくと良いです。
ここがポイント
正直、これが一番手軽です。サーバーを数ヶ月運用しているとaptキャッシュが何百MBにもなることがあります。まず apt clean を試しましょう。
不要パッケージを削除する(apt autoremove)
apt autoremove は、他のパッケージへの依存がなくなった不要なパッケージを削除するコマンドです。たとえば Linux カーネルの古いバージョンや、使わなくなったライブラリが対象になります。
手順2:削除対象を確認してから実行する
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
The following packages will be REMOVED:
linux-image-5.15.0-89-generic linux-modules-5.15.0-89-generic
0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded.
After this operation, 540 MB disk space will be freed.
$ sudo apt autoremove -y
Removing linux-image-5.15.0-89-generic …
540 MB disk space freed.
注意:カーネル削除について
古い Linux カーネルが削除対象に含まれることがあります。現在使用中のカーネル(uname -r で確認)は削除されません。--dry-run オプションで削除対象を必ず確認してから実行しましょう。
古いカーネルは1つインストールされるたびに100〜200MBほどディスクを消費します。VPSを長期間運用していると、古いカーネルが溜まりやすいです。
systemdログを圧縮する(journalctl)
Ubuntu 24.04 は systemd(システムの起動・管理の仕組み)のログを /var/log/journal/ に保存します。長期間運用すると数百MBから数GBにまで膨らむことがあります。
手順3:ログの使用量を確認する
Archived and active journals take up 256.0M in the filesystem.
$ # 7日より古いログを削除する
$ sudo journalctl –vacuum-time=7d
Vacuuming done, freed 192.0M of archived journals from filesystem.
$ journalctl –disk-usage
Archived and active journals take up 64.0M in the filesystem.

VPSの実環境で256MBあったジャーナルが、--vacuum-time=7d(7日以上前のログを削除)で64MBまで削減できるイメージです。オプションを変えることで柔軟に制御できます。
| コマンド | 削除基準 | 使いどころ |
|---|---|---|
journalctl --vacuum-time=7d |
7日より古いログ | 定期的なログ整理 |
journalctl --vacuum-size=100M |
合計100MBを超えたログ | 上限サイズを指定したい場合 |
journalctl --vacuum-time=1d |
1日より古いログ | 緊急でディスクを空けたい場合 |
ログの上限サイズを恒久的に設定する
毎回削除するのが面倒な場合は、/etc/systemd/journald.conf に上限を設定しておきましょう。
# 以下の行を追加または変更する
SystemMaxUse=500M
$ sudo systemctl restart systemd-journald
大きなファイルを探して削除する
apt キャッシュやログ以外に、気づかないうちに溜まった巨大ファイルが原因のこともあります。よくあるのは、コアダンプ(クラッシュログ)、古いバックアップファイル、ダウンロードしたまま放置した圧縮ファイルなどです。
手順4:100MB以上のファイルを検索する
/var/log/syslog.1
/home/ubuntu/backup.tar.gz
/var/crash/core.12345
$ # ディレクトリ別サイズをTOP10で表示
$ sudo du -ah / 2>/dev/null | sort -rh | head -10

注意:コアダンプの削除
/var/crash/ や /var/lib/apport/ にクラッシュレポートが溜まっている場合は sudo rm -rf /var/crash/* で削除できます。ただし原因調査に必要な場合は事前に確認してください。
手順5:/tmp を確認する
/tmp は再起動すると自動でクリアされますが、稼働中のサーバーでは手動削除が必要な場合もあります。
256M /tmp/bigfile.dat
4.0K /tmp/systemd-private-xxx
$ sudo rm -f /tmp/bigfile.dat
$ du -sh /tmp/
4.0K /tmp/
apt のリストキャッシュを削除する
apt update を実行すると、パッケージリスト(どんなパッケージが存在するかの索引)が /var/lib/apt/lists/ に保存されます。Ubuntu 24.04 では約63MBになります。インストール予定がしばらくない場合は削除できます。
63M /var/lib/apt/lists/
$ sudo rm -rf /var/lib/apt/lists/*
$ du -sh /var/lib/apt/lists/
4.0K /var/lib/apt/lists/
注意:削除後は apt update が必要
/var/lib/apt/lists/ を削除した後は、apt install の前に sudo apt update を再実行する必要があります。削除しなくても apt clean だけで十分なケースがほとんどです。
作業チェックリスト:手順まとめ
ディスク容量不足のときに実行する手順をまとめます。上から順に実行し、df -h で空き容量が回復したら停止してください。
| 手順 | コマンド | 期待削減量 | 安全度 |
|---|---|---|---|
| ① aptキャッシュ削除 | sudo apt clean |
数十MB〜数百MB | ★★★★★ |
| ② 不要パッケージ削除 | sudo apt autoremove -y |
数百MB(古いカーネルがあれば1GB以上) | ★★★★☆ |
| ③ journalログ圧縮 | sudo journalctl --vacuum-time=7d |
数十MB〜数百MB | ★★★★☆ |
| ④ 大きなファイル削除 | sudo find / -type f -size +100M |
不定(コアダンプがあれば大きい) | ★★★☆☆ |
| ⑤ aptリスト削除 | sudo rm -rf /var/lib/apt/lists/* |
数十MB | ★★★★☆ |
よくあるエラーと対処
① No space left on device
このエラーが出たら、サービスの再起動やファイル保存ができなくなります。まず sudo apt clean を実行して最低限の空きを作り、その後 df -h と du -sh で原因を調査してください。
② df -h の数値は変わっていないのに空きが増えない
削除したファイルをプロセスがまだ開いている(オープン中のファイルハンドルが残っている)ためです。sudo lsof | grep deleted で確認し、対象のプロセスを再起動すれば解消します。
nginx 1234 root 5w REG 253,1 536870912 /var/log/nginx/access.log (deleted)
$ sudo systemctl restart nginx
$ # プロセス再起動で削除済みファイルのハンドルが解放される
③ apt autoremove が大量のパッケージを削除しようとする
あわてて実行せず、--dry-run オプションで削除対象を確認してから実行してください。現在使用中のカーネルは削除されませんが、uname -r で現在のカーネルバージョンを確認しておくと安心です。
まとめ
Ubuntu でディスク容量不足が起きたときの対処法をまとめました。
- まず
df -hで状況確認、du -shで原因ディレクトリを特定する sudo apt cleanが最初の一手。実測で23MBのキャッシュが即座に削除されたsudo apt autoremoveで古いカーネルや不要パッケージを削除する(--dry-runで確認してから)journalctl --vacuum-time=7dでsystemdログを圧縮するfind / -type f -size +100Mで巨大ファイルを探す- 削除後も空きが増えない場合は
lsof | grep deletedでオープン中のファイルを確認する
本格的にVPSを運用するなら、ディスク容量の監視設定も大切です。Vultr などの VPS では管理コンソールからディスク使用量のアラートを設定できます。


コメント