【Ubuntu】ディスクがいっぱい(No space left on device)になったときの調べ方

ディスク逼迫の調査 - df/duとログ肥大の切り分け

この記事で解決できること

  • Ubuntuサーバで「ディスクがいっぱい」と言われたとき、どこが増えているかを素早く特定できます
  • dfdu の使い分けが分かります
  • ログ肥大(Nginx/Apache、WordPress周辺、Docker、systemd journal)を疑うときの確認手順が分かります

💡 結論(最短)

  1. df -hどの領域(マウントポイント)が埋まっているか を特定
  2. 埋まっている領域で du を使い、大きいディレクトリ → 大きいファイル の順に絞り込み
  3. /var/logjournalctl の使用量を見て、ログ肥大かどうか を切り分け

目次

  1. どこが埋まっているか確認する(df)
  2. 何が増えているかを探す(du)
  3. ログ肥大の切り分け
  4. Docker環境の確認
  5. 応急処置(安全寄り)
  6. 確認(直ったかチェック)

⚠️ 前提(対象環境)

  • OS:Ubuntu(サーバ)
  • シェル:bash
  • 権限:sudo が使える想定(使えない場合は、読めない場所はスキップしてください)

1. まずは「どこが埋まっているか」を確認する(df)

$ df -h

注目ポイント

  • Use% が高い行(例:90%超)
  • Mounted on(どこにマウントされているか)

よくあるパターン

  • /(ルート)が満杯
  • /var が別パーティションで満杯(ログやサービスデータが溜まりやすい)
  • Docker利用で /var/lib/docker 配下が肥大

inode枯渇も確認(ファイル数が多すぎるケース)

容量が残っているのに「空きがない」系の症状は、inode枯渇の可能性があります。

$ df -ih

IUse% が高い(例:100%近い)場合は、小さいファイルが大量にある可能性が高いです。

2. 「何が増えているか」を上から探す(du)

df で埋まっているマウントポイントが分かったら、その配下で du を使って原因を絞ります。

ルート配下の大きいディレクトリをざっくり見る

(ルート / が満杯の場合)

$ sudo du -x -h -d 1 / | sort -h
  • -x:別マウントをまたがない(原因の切り分けがしやすい)
  • -d 1:深さ1階層まで(まずは粗く)
  • sort -h:サイズ順

ここで大きいディレクトリ(例:/var/home)が見えたら、次はその中を掘ります。

/var が大きいとき(ログ・Docker・DBが溜まりやすい)

$ sudo du -x -h -d 1 /var | sort -h

よく肥大する候補

  • /var/log(ログ)
  • /var/lib(DockerやDBなどのデータ)
  • /var/cache(キャッシュ)

3. ログ肥大の切り分け(/var/log と systemd journal)

/var/log のサイズを見る

$ sudo du -h -d 1 /var/log | sort -h

さらに「ファイル単位」で大きいものを探します:

$ sudo find /var/log -type f -printf "%s %p\n" | sort -n | tail -n 20

ここで候補に上がりやすい例

  • Nginx:/var/log/nginx/access.log error.log
  • Apache:/var/log/apache2/access.log error.log
  • システム:/var/log/syslog auth.log

まずは「何が増えているか」を見つけるのが目的です。いきなり削除はしないでください。

systemd journal のサイズを見る(journalctl)

Ubuntuでは journal(バイナリログ)が肥大していることがあります。

$ sudo journalctl --disk-usage

4. Docker を使っている場合の確認(ログ/イメージ肥大の入口)

Docker環境だと、ログやイメージ、ボリュームで容量を使いがちです。

Docker全体の使用量を確認

$ docker system df
  • Images / Containers / Local Volumes のどれが大きいかの当たりを付けます

💡 詳細な削除は事故りやすいので、ここでは「原因の方向性を掴む」までに留めるのがおすすめです。

5. 応急処置(安全寄り):まず空きを作る

根本原因(ログが出続ける、エラーが止まらない等)を止めないと再発します。
ただし緊急時は、まず空きを作ってサービスを復旧させる必要があります。

古いjournalを削除して容量を制限(比較的安全)

最大1GBまでに抑える例:

$ sudo journalctl --vacuum-size=1G

日数ベース(例:7日より古いログを削除):

$ sudo journalctl --vacuum-time=7d

💡 迷う場合は --vacuum-size のほうが扱いやすいです。

ログが異常に増え続ける場合(根本原因の入口)

Nginx/Apache/WordPressでエラーが出続けると、ログが止まらず再発します。

  • Nginx/Apacheのエラーログ(error.log
  • WordPress/PHP-FPMのエラーログ
  • アプリの例外ログ

まずは「何のエラーが連続しているか」を確認し、原因のサービスを止める/直す方向に進めます。

6. 確認(直ったかチェック)

作業後は必ず df で改善を確認します。

$ df -h
$ df -ih

⚠️ 事故らないための注意点

  • 原因特定の前に削除しない(消すほど悪化することがあります)
  • /var/lib はDocker/DBなどのデータがあるため、闇雲に触らない
  • ログ削除は「出続けている原因」が残っていると再発する(根本原因の修正が必要)

📋 検証環境

本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。

次に読む