ディスク容量はどこへ消えたか: 分析とクリーンアップ
「ディスクがほぼ満杯」は、どんな Ubuntu ユーザーにもいつか起こります。厄介なのは、df は満杯だと教えてくれても、何が埋めたのかは教えてくれないことです。ここでは再現可能な順序、つまりまず特定してからクリーンアップする手順を説明します。
ステップ 1: 実際どれくらい埋まっているのか
df -hUse% の列を見てください。主に見るのは / (ルートファイルシステム) と、/home が別パーティションなら /home です。
グラフィカルに確認するなら、ディスクでパーティションを選択したときの使用量バー、またはファイルマネージャーのサイドバー下部にある容量バーを見てください。
ステップ 2: 大きいディレクトリを見つける
du でも計算できますが、1 階層ずつ推測しながらたどることになります:
# Size of each subdirectory here, largest first
du -h --max-depth=1 . | sort -hr | headディスク使用量アナライザー (baobab) はツリー全体を一度にスキャンするので、こちらのほうがはるかに読みやすくなります:
sudo apt install baobab
baobab /home/$USER指定したパスのスキャンが始まり、完了すると次のように表示されます:

読み方:
- 左側のリストはサイズ順に並んでいます。行を 1 つずつ展開していけば正確なパスが分かるので、リングをクリックするより確実です
- 右下のツリーマップチャートは比率を面積に変えるので、最大のブロックが一目で分かります
- このスクリーンショットはインストール直後の VM で、
snapだけで 87% を占めています。バグではありません。Snap アプリはどれも複数のリビジョンを保持しています
~ のスキャンは数秒で終わり、/ のスキャンはシステム全体を走査するため数分かかります。まず ~ から始め、それでも使用量を説明できない場合にだけ / をスキャンしてください。
ステップ 3: 定番の容量消費元をクリーンアップする
古い Snap リビジョン
Snap はロールバックできるように直近のいくつかのリビジョンを保持し、そのそれぞれがプログラム全体のコピーです。これが先ほどの 87% の正体です。
# Keep 2 revisions instead of the default 3
sudo snap set system refresh.retain=2
# Remove every disabled revision
sudo snap list --all | awk '/disabled/{print $1, $3}' | while read name rev; do
sudo snap remove "$name" --revision="$rev"
doneダウンロードしたパッケージ
# Empty /var/cache/apt/archives
sudo apt clean
# Drop dependencies nothing needs any more
sudo apt autoremove --purgesystemd ジャーナル
journalctl のログは数 GB まで膨らむことがあります:
# Keep at most 200 MB
sudo journalctl --vacuum-size=200M
# Or keep only 7 days
sudo journalctl --vacuum-time=7dユーザーキャッシュ
ブラウザー、サムネイル、アプリのキャッシュはいずれも ~/.cache にあります:
du -h --max-depth=1 ~/.cache | sort -hr | head削除する前に考えてください。ブラウザーのキャッシュは必要に応じて再生成され、通常はログイン状態も維持されますが、~/.cache/thumbnails はいつ削除しても安全です。
ステップ 4: 掃除だけでは足りないとき
クリーンアップで得られるのは時間だけです。本当に容量を確保するには、ディスクを大きくするか、データを移す必要があります:
- 仮想マシン: VM の設定で仮想ディスクを拡張し、その後パーティションを拡張します (
growpartとresize2fs) - 物理マシン: ディスクを追加してフォーマット・マウントします。詳しくは ディスク、マウント、fstab を参照してください
- データの移動:
~/Downloadsや Docker のデータルートなど大きなディレクトリを新しいディスクへ移し、fstabでマウントします
FAQ
df は満杯と言うのに du の合計ははるかに少ない
よくあるのは、ファイルは削除されたのにプロセスがまだ開いているケースで、そのプロセスが終了するまで容量は解放されません。
# Find deleted files that are still open
sudo lsof +L1 2>/dev/null | head通常の原因は動作し続けているログ書き込みプロセスです。それを所有するサービスを再起動してください (sudo systemctl restart <service>)。
「デバイスに空き容量がありません」と出るのに df は空きを示す
おそらく inode の枯渇 です。小さなファイルが大量にある場合 (メールスプール、コンテナーレイヤーなど) に典型的です。
# Check inode usage
df -iIUse% が 100% ならこれが原因です。対処は同じ種類のクリーンアップですが、削除する必要があるのは大きなファイルではなく大量の小さなファイルである点が異なります。
クリーンアップの自動化
systemd-tmpfiles はすでに /tmp や一部のキャッシュを削除しています。apt キャッシュのクリーンアップを定期的に実行するには、cron エントリーを追加します:
# Clean the apt cache every Sunday at 03:00
0 3 * * 0 root /usr/bin/apt cleanこれを /etc/cron.d/apt-clean として保存します。
関連情報
- ディスク、マウント、fstab — パーティション、フォーマット、起動時のマウント
- パフォーマンス監視 — htop とシステムモニター
- journalctl — ログのサイズとローテーション