Phase 1ではdf/du/freeの基本を学びました。この記事ではディスク監視の実践的なアプローチと、定期クリーンアップの自動化まで解説します。
ディスク使用量の効率的な調査
# ファイルシステム一覧と使用率(-T でタイプも表示)
$ df -hT
# 大きなディレクトリを素早く特定(定番コマンド)
$ sudo du -sh /var/* | sort -rh | head -20
# /の直下から再帰的に大きい場所を特定
$ sudo du -sh /* 2>/dev/null | sort -rh | head -20
# 大きなファイルをシステム全体から検索(500MB超)
$ sudo find / -type f -size +500M 2>/dev/null -exec ls -lh {} \; | sort -k5 -rh
# inode の使用状況(小さなファイルが大量にある場合はinodeが枯渇する)
$ df -i
# ncdu:対話式のディスク使用量ビューア(要インストール)
$ sudo apt install ncdu
$ sudo ncdu / # 矢印キーで移動、dで削除
よくある容量圧迫の原因と対処法
| 原因 | 確認コマンド | 対処法 |
|---|---|---|
| 古いジャーナルログ | journalctl –disk-usage | journalctl –vacuum-size=500M |
| 古いカーネル | dpkg –list | grep linux-image | sudo apt autoremove |
| Dockerイメージ・コンテナ | docker system df | docker system prune -a |
| tmpファイル | du -sh /tmp /var/tmp | find /tmp -mtime +7 -delete |
| コアダンプ | find / -name “core.*” 2>/dev/null | 削除またはulimit -c 0 |
| アプリのログ | du -sh /var/log/* | logrotate / 手動削除 |
定期クリーンアップスクリプト
#!/bin/bash
set -euo pipefail
LOG=/var/log/disk-cleanup.log
echo "=== $(date) ===" >> "$LOG"
# 30日以上前のtmpファイルを削除
find /tmp -mtime +30 -delete 2>/dev/null
find /var/tmp -mtime +30 -delete 2>/dev/null
echo "tmp cleaned" >> "$LOG"
# apt キャッシュをクリア
apt-get clean && echo "apt cache cleaned" >> "$LOG"
# 不要な依存パッケージを削除
apt-get autoremove -y && echo "autoremove done" >> "$LOG"
# journald のログを500MB以内に抑える
journalctl --vacuum-size=500M >> "$LOG" 2>&1
# 使用率をログに記録
df -h >> "$LOG"
echo "---" >> "$LOG"
# 使用率が90%超えたらsyslogに警告
df -h | tail -n +2 | while IFS= read -r line; do
usage=$(echo "$line" | awk '{print $5}' | tr -d "%")
mount=$(echo "$line" | awk '{print $6}')
if [[ "$usage" =~ ^[0-9]+$ ]] && [ "$usage" -ge 90 ]; then
logger -t disk-monitor "WARNING: $mount is ${usage}% full"
fi
done
# /etc/cron.daily/ に配置して自動実行
$ sudo cp disk-cleanup.sh /etc/cron.daily/disk-cleanup
$ sudo chmod +x /etc/cron.daily/disk-cleanup
# または systemd timer で管理(2-4 参照)
# 動作確認
$ sudo run-parts --test /etc/cron.daily/
ディスク使用率の推移を記録する
# 使用率を定期的にログに記録(cron で1時間ごと)
0 * * * * df -h >> /var/log/disk-usage-history.log
# sar でディスクI/Oの履歴も確認(sysstat が必要)
$ sudo apt install sysstat
$ sar -d 1 5 # ディスクI/O統計(1秒ごとに5回)
まとめ
du -sh /var/* | sort -rh | head -20で容量の大きい場所を素早く特定df -iでinode不足も確認する(小さなファイルが大量にある場合に発生)ncduを使うと対話的にディスク使用量を探索できる- 古いログ・カーネル・Dockerイメージ・tmpファイルが主な容量圧迫原因
- クリーンアップスクリプトを
/etc/cron.daily/に置いて自動化 - 90%超えで
loggerコマンドでsyslogに警告を記録する



コメント