前言
生产环境磁盘空间爆满是运维工作中的常见紧急故障。本文分享快速定位大文件、安全清理空间的实战方案。
问题影响
磁盘空间100%会导致:
- 应用无法写入日志,服务异常
- 数据库无法写入,事务失败
- 系统无法创建临时文件,进程崩溃
应急处理流程
1. 快速定位大文件
查看根目录各分区占用:
df -h
定位占用最大的目录:
du -h --max-depth=1 / | sort -hr | head -10
查找大于1GB的文件:
find / -type f -size +1G -exec ls -lh {} \;
2. 日志文件清理
方案A:清空日志内容(保留文件)
# 清空单个日志
> /var/log/syslog
# 批量清空
for log in /var/log/*.log; do > $log; done
方案B:删除旧日志
# 删除7天前的日志
find /var/log -name "*.log" -mtime +7 -delete
# 删除压缩日志
find /var/log -name "*.gz" -mtime +7 -delete
方案C:配置日志轮转
# /etc/logrotate.d/custom
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
}
3. Docker垃圾清理
查看Docker占用:
docker system df
清理未使用的资源:
# 清理所有未使用的镜像、容器、网络、卷
docker system prune -a --volumes
# 仅清理悬空镜像
docker image prune
# 清理停止的容器
docker container prune
4. 其他清理方案
清理包管理器缓存:
# Ubuntu/Debian
apt-get clean
apt-get autoclean
# CentOS/RHEL
yum clean all
清理临时文件:
rm -rf /tmp/*
rm -rf /var/tmp/*
实战案例
某次生产环境磁盘爆满,通过以下步骤快速恢复:
# 1. 定位问题
df -h # 发现 /var 分区 100%
du -h --max-depth=1 /var | sort -hr
# 2. 发现 /var/log 占用 80GB
cd /var/log
ls -lh | sort -k5 -hr | head -10
# 3. 发现 nginx/access.log 50GB
> nginx/access.log # 清空日志
# 4. 配置日志轮转,防止再次爆满
预防措施
1. 监控告警
# 磁盘使用率超过80%告警
df -h | awk '$5+0 > 80 {print $0}'
2. 定时清理
# crontab 每天凌晨2点清理7天前日志
0 2 * * * find /var/log -name "*.log" -mtime +7 -delete
3. 日志轮转 确保所有应用日志都配置了logrotate。
总结
- 紧急情况:先清日志,能快速腾出空间
- Docker环境:定期执行
docker system prune - 长期方案:配置日志轮转+监控告警
掌握这套流程,磁盘爆满问题5分钟搞定。