判断 CentOS Cleanup 是否需要运行的实用流程
一 快速判断清单
二 关键指标与阈值示例
| 指标 | 观察方式 | 建议阈值 | 建议动作 |
|---|---|---|---|
| 根分区可用空间 | df -h | < 10%–20% | 立即清理日志、缓存、旧内核等 |
| /var/log 体积 | du -h --max-depth=1 /var/log | 明显偏大(如 > 1–5GB) | 调整 logrotate;清理 journal;压缩归档旧日志 |
| YUM 缓存 | du -sh /var/cache/yum 或 yum repolist | 占用数百 MB 以上 | 执行 yum clean all |
| 旧内核数量 | rpm -q kernel 或 package-cleanup --oldkernels --count=2 | > 2–3 个 | 仅保留最近 2 个内核 |
| systemd 日志 | journalctl --disk-usage | 接近或超过 500MB–1GB | journalctl --vacuum-time / --vacuum-size |
| Docker 资源 | docker system df | Images/Volumes 占用高 | docker system prune(-a/-f 视情况) |
| 上述阈值为运维中常用的经验值,可按业务容忍度微调。 |
三 一键判断脚本
#!/usr/bin/env bash
set -Eeuo pipefail
THRESHOLD_PERC=20
JOURNAL_MAX_SIZE="500M"
KERNEL_KEEP=2
need_cleanup=false
# 1) 磁盘空间
while IFS= read -r line; do
usage=$(echo "$line" | awk '{print $5}' | tr -d '%')
mount=$(echo "$line" | awk '{print $6}')
if [[ $usage -ge $THRESHOLD_PERC ]]; then
echo "磁盘告警: $mount 已用 ${usage}% (阈值 ${THRESHOLD_PERC}%)"
need_cleanup=true
fi
done < <(df -h | awk 'NR>1 && $NF ~ /^\/$|\/var$/ {print}')
# 2) /var/log 体积
log_size=$(du -sh /var/log 2>/dev/null | cut -f1)
echo "/var/log 体积: $log_size"
[[ $(echo "$log_size" | sed 's/G//;s/M//') -gt 1024 ]] && need_cleanup=true # >1G 简单判定
# 3) YUM 缓存
cache_size=$(du -sh /var/cache/yum 2>/dev/null | cut -f1)
echo "YUM 缓存: $cache_size"
[[ -n "$cache_size" ]] && need_cleanup=true
# 4) 旧内核数量
if command -v package-cleanup >/dev/null 2>&1; then
old_kernels=$(package-cleanup --oldkernels --count=$((KERNEL_KEEP+1)) 2>/dev/null | wc -l)
if [[ $old_kernels -gt 0 ]]; then
echo "旧内核数量超过 $KERNEL_KEEP 个"
need_cleanup=true
fi
fi
# 5) systemd 日志
if command -v journalctl >/dev/null 2>&1; then
journal_usage=$(journalctl --disk-usage | sed -n 's/.*\([0-9.]\+[A-Z]\).*/\1/p')
echo "journal 日志占用: ${journal_usage:-未知}"
need_cleanup=true
fi
# 6) Docker
if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
docker_df=$(docker system df --format '{{.TotalCount}} {{.Size}}' | head -n1)
echo "Docker 资源: $docker_df"
need_cleanup=true
fi
if $need_cleanup; then
echo "结论: 建议立即运行 cleanup(磁盘/日志/缓存/旧内核等需要维护)"
exit 0
else
echo "结论: 当前无需紧急 cleanup"
exit 1
fi
说明:阈值可按需调整;该脚本仅做“是否需要”的判定,不执行实际删除操作。
四 需要运行时的安全清理顺序
五 何时不必运行与后续预防