云服务器磁盘空间告急:一套快速定位与清理的实用流程
在云服务器上跑业务,磁盘被悄悄写满是很常见的故障:服务写不进日志、数据库报错、容器节点触发 DiskPressure。下面是我平时处理这类问题的一套流程,按顺序做基本都能快速解决。
一、确认是哪个分区满了
先执行 df -h,看各挂载点的使用率。还要顺手执行 df -i 看 inode:有时容量没满,但大量小文件(如会话文件、缓存)把 inode 耗尽了,一样会报 No space left on device。
二、定位大目录和大文件
从满的分区根目录开始,用 du -xh --max-depth=1 / | sort -rh | head 逐层往下找,-x 可以避免跨分区统计。也可以直接找大文件:find / -xdev -type f -size +500M -exec ls -lh {} \; 。常见的元凶有 /var/log 下没有轮转的日志、应用自己的日志目录、容器镜像和停止的容器、忘记删除的备份文件。
三、留意“已删除但未释放”的文件
如果 du 统计出来的用量明显小于 df,很可能是文件已经被删,但还被进程占着句柄。用 lsof +L1 或 lsof | grep deleted 找到对应进程,重启该服务后空间才会真正释放。清理正在写的日志时,用 > 文件名 清空内容比 rm 更安全。
四、安全地清理
日志:用 journalctl --vacuum-size=500M 压缩 systemd 日志,并检查 logrotate 配置是否生效。
容器:Docker 环境用 docker system prune 清理停止的容器和悬空镜像,containerd 环境用 crictl rmi --prune。
包缓存:yum clean all 或 apt-get clean。
删除任何业务数据前,先确认用途,必要时先备份到 OBS。
五、从根上避免再次写满
1. 给所有应用日志配置轮转和保留天数。
2. 把数据、日志和容器存储放在独立的数据盘上,系统盘只放系统。
3. 在云监控服务 CES 里给磁盘使用率设置告警(比如 80%),提前发现问题。
4. 业务确实需要更多空间时,可以在线扩容云硬盘 EVS,再用 growpart 和 resize2fs(或 xfs_growfs)扩展文件系统。
按“看分区 → 找大文件 → 查未释放句柄 → 安全清理 → 加告警防复发”这个顺序做,磁盘告急的问题一般十几分钟就能处理完。
- 点赞
- 收藏
- 关注作者
评论(0)