ディスク使用率100%は想像以上に深刻です。データベースは書き込みを拒否し、サイトは500エラーを吐き、ログすら記録されなくなり調査の手がかりも失われます。特定から掃除までの標準手順を紹介します。
ステップ1:全体を把握する
df -hでパーティションごとの使用率を確認し、ルートパーティションかどこかのマウントポイントが満杯かを特定します。容量が残っているのにinodeが枯渇している場合(df -iが100%)は大量の小さいファイルが原因です。アプローチは同じですが、探すのはファイル数の多いディレクトリです。
ステップ2:大きなディレクトリを特定
ルートから掘り下げます:du -h --max-depth=1 / 2>/dev/null | sort -rh | head。最大のディレクトリに入って繰り返せば、2〜3回で犯人を特定できます。
よくある5大容量食い
- ログ:/var/log配下のローテーションログとアプリ自身のログ。システムジャーナルは
journalctl --vacuum-size=200Mで縮小し、アプリログにはlogrotateを設定; - Docker:宙ぶらりんのイメージとビルドキャッシュが大量に容量を消費。
docker system dfで確認しdocker system pruneで掃除(使用中のものが消えないか要確認); - 古いバックアップ:追加するだけで削除しないバックアップスクリプトは数ヶ月でディスクを満杯に。保持ポリシーを追加しましょう;
- パッケージキャッシュ:
apt cleanでダウンロードキャッシュを解放; - 削除済みなのに開かれたままのファイル:プロセスが削除済みファイルのハンドルを保持している間は容量が解放されません。
lsof | grep deletedで特定し、そのプロセスを再起動します。
掃除の鉄則2カ条
第一に削除前に確認:ファイルの用途を確かめてから。データベースのディレクトリや書き込み中のログを絶対にrmしないこと。第二に使用中の大きなファイルは削除ではなく切り詰め:稼働中のログはtruncate -s 0で空にする方が削除より安全です。掃除後はディスク使用率のアラート(80%超で警告)を設定し、次回は100%になる前に気づけるようにしましょう。