TOP云物理服务器特惠,CPU可选双路E5-2660(32核)、双路E5-2680v2(40核)、双路E5-2696/98 V4(88核)、双路Gold 6138(80核)、双路Platinum 8173(112核);
内存从32G-128G可选,带宽有单线、多线独享20M-200M,价格低至368元。
购买链接:https://c.topyun.vip/cart?fid=1&gid=236
服务器磁盘空间不足是运维人员最常面临的挑战之一——日志文件堆积、临时文件未清理、数据库备份未轮转,都可能导致磁盘使用率飙升至100%,进而引发服务崩溃、数据写入失败等严重问题。手动清理磁盘虽能应急,但无法应对突发流量或长期未维护的系统;而通过脚本自动化监控与清理,可在磁盘使用率超过阈值时立即执行预设清理策略,将风险扼杀在萌芽状态。本文将分享一套完整的磁盘告警自动清理脚本方案,涵盖监控逻辑、清理策略、安全校验及TOP云物理服务器的自动化运维支持。
一、磁盘使用率告警的核心场景与风险
1. 哪些场景容易触发磁盘告警?
- 日志文件爆炸式增长:
- 应用日志(如Nginx访问日志、Java应用日志)、系统日志(
/var/log/messages)未配置日志轮转(logrotate),单文件体积可能超过GB级别。
- 应用日志(如Nginx访问日志、Java应用日志)、系统日志(
- 临时文件未清理:
- 缓存目录(如
/tmp、/var/tmp)、会话目录(如PHP的/var/lib/php/sessions)长期堆积,占用大量空间。
- 缓存目录(如
- 数据库备份未轮转:
- MySQL的
mysqldump备份、MongoDB的mongodump备份未按日期归档或删除旧文件,导致备份目录膨胀。
- MySQL的
- 容器/虚拟机镜像堆积:
- Docker的
/var/lib/docker/overlay2、KVM的镜像存储目录未定期清理无用镜像或快照。
- Docker的
2. 磁盘满导致的典型故障
- 服务不可用:
- 磁盘空间不足时,Nginx无法写入访问日志、MySQL无法执行INSERT操作、系统无法创建新的进程文件(
/var/run目录满)。
- 磁盘空间不足时,Nginx无法写入访问日志、MySQL无法执行INSERT操作、系统无法创建新的进程文件(
- 数据丢失风险:
- 若
/var/lib/mysql等数据目录空间不足,可能导致事务回滚失败或表损坏。
- 若
- 监控失效:
- 磁盘满时,监控代理(如Zabbix Agent、Prometheus Node Exporter)可能无法写入数据,导致告警系统“失明”。
二、磁盘自动清理脚本的设计原则
1. 脚本需满足的核心需求
- 实时监控与阈值告警:
- 定期检查磁盘使用率(如每5分钟),当使用率超过85%(可配置)时触发清理。
- 安全清理策略:
- 优先清理非关键文件(如日志、临时文件),避免误删数据库或配置文件。
- 日志记录与通知:
- 记录每次清理的操作(删除的文件、释放的空间),并通过邮件/短信通知运维人员。
- 防误删机制:
- 跳过系统关键目录(如
/etc、/boot)、正在写入的文件及白名单中的文件。
- 跳过系统关键目录(如
2. 脚本架构概览
三、完整脚本实现(Bash示例)
Bash
#!/bin/bash
# 配置参数
THRESHOLD=85 # 磁盘使用率阈值(%)
MOUNT_POINT="/" # 监控的挂载点(如/、/data)
LOG_FILE="/var/log/disk_clean.log" # 清理日志路径
EMAIL="admin@example.com" # 告警接收邮箱
WHITELIST=("/etc" "/boot" "/var/lib/mysql") # 白名单目录(不清理)
# 获取磁盘使用率(百分比)
usage=$(df -h "$MOUNT_POINT" | awk 'NR==2 {print $5}' | tr -d '%')
# 检查是否超过阈值
if [ "$usage" -gt "$THRESHOLD" ]; then
echo "[$(date)] WARNING: Disk usage on $MOUNT_POINT is $usage% (Threshold: $THRESHOLD%)" >> "$LOG_FILE"
# 清理策略1:删除旧日志文件(保留最近7天)
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \; 2>> "$LOG_FILE"
# 清理策略2:清空临时文件(跳过正在使用的文件)
find /tmp -type f -mtime +1 -exec sh -c '! fuser -s {} 2>/dev/null' \; -delete 2>> "$LOG_FILE"
# 清理策略3:删除Docker无用镜像(需安装docker)
if command -v docker &> /dev/null; then
docker system prune -af --volumes 2>> "$LOG_FILE"
fi
# 防误删:跳过白名单目录
for dir in "${WHITELIST[@]}"; do
find "$dir" -prune -o -type f -delete 2>> "$LOG_FILE"
done
# 重新计算释放后的使用率
new_usage=$(df -h "$MOUNT_POINT" | awk 'NR==2 {print $5}' | tr -d '%')
echo "[$(date)] Cleaned: Original usage $usage% -> New usage $new_usage%" >> "$LOG_FILE"
# 发送告警邮件
echo "Disk cleanup triggered on $MOUNT_POINT. Usage reduced from $usage% to $new_%." | mail -s "Disk Usage Alert: Cleanup Completed" "$EMAIL"
else
echo "[$(date)] Disk usage on $MOUNT_POINT is $usage% (OK)" >> "$LOG_FILE"
fi
四、脚本部署与优化建议
1. 部署方式
- Crontab定时任务:
Bash
# 每5分钟检查一次 */5 * * * * /path/to/disk_clean.sh - Systemd服务(长期运行):
- 创建
/etc/systemd/system/disk-clean.service,设置ExecStart为脚本路径,并启用Watchdog监控脚本状态。
- 创建
2. 优化方向
- 多磁盘监控:
- 扩展脚本支持多个挂载点(如
/、/data),循环检查每个磁盘的使用率。
- 扩展脚本支持多个挂载点(如
- 动态阈值:
- 根据业务高峰时段(如白天)和低峰时段(如夜间)设置不同阈值,避免误清理。
- 集成云存储:
- 当本地磁盘不足时,自动将日志/备份文件上传至TOP云对象存储(了解云存储服务),而非直接删除。
五、TOP云物理服务器:自动化运维的终极方案
1. 内置磁盘监控与清理工具
- 智能告警系统:
- TOP云控制台实时显示各磁盘使用率,当超过阈值时自动触发告警(邮件/短信/Webhook),并推荐清理策略(如“清理日志文件”或“扩展磁盘”)。
- 自动化清理任务:
- 用户可在控制台配置定时清理规则(如“每天凌晨3点清理/var/log下7天前的日志”),系统自动执行并记录操作日志。
2. 弹性扩展能力避免清理
- 在线磁盘扩容:
- 若脚本预测磁盘将在未来24小时内满,可自动通知用户扩容(立即扩容云主机磁盘),无需停机。
- 分布式存储支持:
- 针对大数据、数据库等高IO场景,推荐使用TOP云分布式存储(如Ceph、GlusterFS),通过横向扩展存储节点避免单盘压力。
3. 安全审计与合规性
- 操作日志全记录:
- 所有清理操作(脚本执行或控制台手动清理)均记录审计日志,满足等保2.0、ISO27001等合规要求。
- 文件删除可追溯:
- 结合TOP云日志服务,可查询被删除文件的原始路径、删除时间及操作人,便于事故回溯。
六、脚本使用注意事项
- 测试环境验证:
- 先在测试环境运行脚本,确认清理策略不会误删关键文件。
- 关键业务谨慎清理:
- 若服务器运行金融、医疗等关键业务,建议仅清理日志和临时文件,避免清理应用生成的缓存文件(可能影响性能)。
- 备份重要数据:
- 清理前可通过
tar或rsync备份重要目录(如/var/lib/docker),防止意外丢失。
- 清理前可通过
服务器磁盘空间管理是运维的基础工作,而自动化脚本可将重复性操作转化为可预测、可控制的标准化流程。TOP云物理服务器通过“监控-告警-清理-扩容”全链路自动化,让磁盘管理更简单、更安全!




