Linux磁盘空间爆满应急处理:3步快速定位+清理方案

0 阅读1分钟

前言

生产环境磁盘空间爆满是运维工作中的常见紧急故障。本文分享快速定位大文件、安全清理空间的实战方案。

问题影响

磁盘空间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分钟搞定。