# Linuxサーバーのディスク容量不足: 容量を使っているものを見つける

ディスクが満杯になる原因は、たいてい1つか2つです。上から順に調べ、削除する前によく確認してください。どのサービスのものか分からない限り、/var/lib 以下のファイルを手作業で削除しないでください。

## 1. 満杯のファイルシステムを確認する

df -h を実行します。Use% 列と Mounted on 列を見てください。満杯なのは / の場合もあれば、独立した /var、/home、/data のマウントの場合もあります。違うほうを掃除しても状況は変わりません。
df -i も実行してください。空き容量があっても、空き inode がないファイルシステムがあります。これは、セッション、メールキュー、キャッシュファイルなど、小さなファイルが何百万も溜まったときに起こります。IUse% が100%に近い場合は、大きなファイルが数個あるのではなく、小さなファイルが大量にあるということです。

## 2. 最大のディレクトリを見つける

sudo du -xh --max-depth=1 / | sort -h を実行し、最後の行を確認します。-x オプションは1つのファイルシステム内にとどまるため、マウントされたディスクや仮想ファイルシステムが結果を歪めることはありません。最も大きいディレクトリの中でも同様に繰り返します。例:sudo du -xh --max-depth=1 /var | sort -h。
ncdu がインストールされている場合(DebianおよびUbuntuでは sudo apt install ncdu)、sudo ncdu -x / で同じデータを対話的に調べられます。

## 3. 削除済みでも開かれたままのファイルを確認する

du の合計が df よりも大幅に少ない場合は、削除したファイルをプロセスが開いたままにしている可能性があります。多くは大きなログです。sudo lsof +L1 を実行すると、リンク数がゼロの開かれたファイルが一覧表示されます。そのプロセスがファイルを閉じると容量が戻ります。通常は、そのファイルを持つサービスの再起動が必要です。リクエストのピーク時を避け、落ち着いたタイミングで行ってください。

## 4. よくある原因を確認する

ログ:/var/log を確認し、journalctl --disk-usage でジャーナルを確認します。サイズが大きい場合は、journaldのサイズ制限に関するガイドをご覧ください。
パッケージ:sudo apt clean はダウンロード済みのパッケージファイルを削除します。sudo apt autoremove は不要になったパッケージや古いカーネルを一覧表示し、確定する前に削除内容を表示します。実行中のカーネルと1つ前のバージョンは残してください。
Docker:docker system df でイメージ、コンテナ、ボリューム、ビルドキャッシュを確認できます。docker system prune は、停止中のコンテナ、未使用のネットワーク、ダングリングイメージを削除します。--volumes を付けない限りボリュームは削除されませんが、回答する前にプロンプトをよく読んでください。
Snap:snap list --all を実行すると、無効になっているsnapの古いリビジョンが表示されます。これらは snap remove NAME --revision=NUMBER で1つずつ削除できます。

## 5. 容量を空けたあとに

もう一度 df -h を実行し、ディスクが満杯になって停止したサービスが動作していることを確認します(systemctl --failed)。ディスクが満杯になったデータベースは、信頼して使う前に再起動やチェックが必要な場合があります。
そのうえで、再発しないよう制限を設けます。ログのローテーション、journaldの制限、ディスクが90%に達する前のアラートです。

## FAQ

**/var/log 内のファイルを削除しても安全ですか?**

ローテーション済みで圧縮されたログ(例:syslog.1 や .gz ファイル)は、不要になれば通常は削除できます。実行中のサービスの現在のログファイルは削除しないでください。慎重に切り詰めるか、logrotate に任せ、事前にサービスが何を期待しているかを確認してください。

**df ではディスクが満杯なのに、du の合計が合わないのはなぜですか?**

多くの場合、削除済みのファイルを実行中のプロセスが開いたままにしている(lsof +L1 を参照)か、異なるファイルシステムの数値を見ています。同じマウントポイントについて、du -x の結果と df を比較してください。

**本番サーバーで docker system prune を実行しても安全ですか?**

docker system df を実行し、未使用のものを確認してからにしてください。今後起動するつもりのイメージが削除される場合があります。ボリュームは既定では保持されますが、重要なデータのバックアップがあることを確認してください。

Source: https://raincleaner.eu/ja/guides/linux-server-disk-full-find-what-is-using-space