作为IDC运维工程师,磁盘空间100%占用是最常遇到的紧急故障之一。当监控告警响起、业务开始报错时,如何快速定位问题并恢复服务,考验的不仅是技术,更是经验。
第一步:快速定位大文件
首先用 df -h 确认哪个分区满了,然后用 du -sh /* 2>/dev/null | sort -hr | head -10 找出根目录下最大的目录。这一步要快,不要在小目录里浪费时间。重点关注 /var/log、/tmp、/home 这三个地方——90%的磁盘爆满都是日志或临时文件堆积导致的。
第二步:日志清理的正确姿势
很多新手上来就直接 rm -f 大日志文件,这是大忌!如果某个进程还在写入这个文件,rm 只会释放inode,磁盘空间并不会真正释放。正确做法是:
# 先清空内容,不删除文件
> /var/log/nginx/access.log
# 确认释放后再考虑轮转
systemctl reload nginx第三步:查找已删除但未释放的文件
磁盘显示满了但du看不到大文件?十有八九是已删除但被进程占用的文件。用 lsof | grep deleted 就能找到。解决方法很简单——重启对应的进程,或者用 > /proc/<pid>/fd/<fd号> 清空。这也是为什么重启服务经常能"神奇"解决磁盘问题的原因。
预防胜于救火
在IDC运维中,磁盘空间管理应该做在前面:
- 配置logrotate自动轮转日志
- 设置磁盘使用率80%告警,不要等到100%才处理
- 定期清理/tmp目录,用systemd-tmpfiles自动管理
- 单独分区,不要把所有数据都放在根分区
最后记住一条铁律:生产环境永远不要用 rm -rf 带通配符。你永远不知道下一秒会删错什么。磁盘满了还能抢救,数据删了才是真的灾难。
评论