Linux 磁盘告急别慌:从 98% 到 62% 的一次磁盘清理实战
周二凌晨,监控短信把我吵醒:生产机根分区使用率 98%,只剩不到 2GB。应用还没挂,但日志写不进去、定时任务开始报错,留给我的时间并不多。这次清理没有动任何业务数据,半小时后使用率回到 62%,过程记录如下。
一、先看整体,再找大户
上来不要急着删。先用 df -h 确认是哪个分区满了,再用 du 定位:
df -h
du -sh /* 2>/dev/null | sort -rh | head
du -sh /var/log/* 2>/dev/null | sort -rh | head
那台机器上,/var 占了大头,其中 /var/log 和 /var/lib/docker 是两个大户。定位清楚再动手,是清理的第一原则。
二、日志是最安全的突破口
应用日志、系统日志往往可以安全瘦身,但要注意方法。正在被进程写入的日志不能直接 rm,删了文件句柄还在,空间不会释放,正确做法是截断:
echo > /var/log/app/app.log
journalctl --vacuum-size=500M
find /var/log -name "*.log.*" -mtime +30 -delete
同时检查 logrotate 是否在跑。很多机器的日志之所以失控,就是轮转配置缺失,或者应用自己写日志不走轮转。把日志按天切分、保留 14 天,基本能避免重蹈覆辙。
三、软件包缓存和旧内核
这一块收益常常被低估。apt 或 yum 的缓存、下载过的安装包、旧内核都可以清理:
apt-get autoclean && apt-get autoremove
yum clean all
dnf remove --oldinstallonly --setopt installonly_limit=2 kernel
注意不要删正在运行的内核,先用 uname -r 确认当前版本,只删更早的版本。一次清理出几个 GB 很常见。
四、Docker 和临时文件
装了 Docker 的机器要单独看。悬空镜像、无用的容器和卷会越积越多:
docker system df
docker system prune -a --volumes
prune 带 --volumes 会删未使用的卷,执行前务必确认没有重要数据。/tmp 下超过 7 天的文件、崩溃产生的 core 文件也可以定期清理,但不要用 rm -rf /tmp/* 一刀切,先列出来确认。
五、治本比清理更重要
清理完只是回到安全线,真正要做的是三件事:第一,给磁盘使用率设两级告警,80% 提醒、90% 电话;第二,把日志轮转和定期清理写进 cron,每周跑一次;第三,容量规划留有余量,业务增长快的目录单独挂盘,扩容时不用停机。
这次清理的经验很简单:磁盘满了先定位、再清理、最后治本。删之前多问一句“删了会不会影响业务”,比任何清理命令都重要。
- 点赞
- 收藏
- 关注作者
评论(0)