Linuxサーバー管理

ディスク使用量の監視とクリーンアップ【自動化まで完全解説】

Linuxサーバー管理
記事内に広告が含まれています。

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-usagejournalctl –vacuum-size=500M
古いカーネルdpkg –list | grep linux-imagesudo apt autoremove
Dockerイメージ・コンテナdocker system dfdocker system prune -a
tmpファイルdu -sh /tmp /var/tmpfind /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に警告を記録する

コメント

タイトルとURLをコピーしました