服务器磁盘满了先别删:定位占用与安全清理顺序(运维笔记)
发表于 : 周一 10月 12, 2026 2:01 am
服务器告警磁盘满,第一反应是删日志,但经常删完没几小时又满。正确的顺序是先定位,再决定删还是截断。
1. 先看是哪一层满了
两个都要看。df -h 看容量,df -i 看 inode。inode 满了同样报空间不足,但删大文件没用,得删小文件多的目录。
2. 逐层定位大目录
一路往下收敛到具体目录,别一上来就全盘 find,I/O 会拖垮线上服务。
3. 检查已删除但未释放的文件
这是最容易被忽略的一类:日志被 rm 了,但进程还攥着文件句柄,空间不释放。
处理方式不是删文件,而是让进程重新打开日志或干脆重启它。否则你删多少都不管用。
4. 日志优先截断而不是删除
如果日志正被进程写入,直接 rm 就会变成上面那种情况。用截断更安全:
截断后文件还在,写入的进程不用重启,空间立刻回收。
5. 清理前先确认三件事
6. 根治靠策略,不靠手动
日志轮转(logrotate 或应用自带)、保留天数、压缩归档、定期告警阈值,这几件事配好一次,比每次告警都手工救火省心得多。
一句话总结:先 df 再看 du,再查 deleted,最后才是删。顺序对了能少踩一大半坑。
参考来源:运维社区磁盘排查实践文章、Linux 系统管理笔记等。信息时效性有限,以实际环境为准。
1. 先看是哪一层满了
代码: 全选
df -h
df -i两个都要看。df -h 看容量,df -i 看 inode。inode 满了同样报空间不足,但删大文件没用,得删小文件多的目录。
2. 逐层定位大目录
代码: 全选
du -h --max-depth=1 / | sort -h
du -h --max-depth=1 /var | sort -h一路往下收敛到具体目录,别一上来就全盘 find,I/O 会拖垮线上服务。
3. 检查已删除但未释放的文件
这是最容易被忽略的一类:日志被 rm 了,但进程还攥着文件句柄,空间不释放。
代码: 全选
lsof | grep deleted | sort -k7 -n | tail -20处理方式不是删文件,而是让进程重新打开日志或干脆重启它。否则你删多少都不管用。
4. 日志优先截断而不是删除
如果日志正被进程写入,直接 rm 就会变成上面那种情况。用截断更安全:
代码: 全选
truncate -s 0 /var/log/xxx.log
: > /var/log/xxx.log
截断后文件还在,写入的进程不用重启,空间立刻回收。
5. 清理前先确认三件事
代码: 全选
这个文件是不是正在被进程持有
删掉之后应用还能不能跑
有没有正在跑的备份任务依赖它6. 根治靠策略,不靠手动
日志轮转(logrotate 或应用自带)、保留天数、压缩归档、定期告警阈值,这几件事配好一次,比每次告警都手工救火省心得多。
一句话总结:先 df 再看 du,再查 deleted,最后才是删。顺序对了能少踩一大半坑。
参考来源:运维社区磁盘排查实践文章、Linux 系统管理笔记等。信息时效性有限,以实际环境为准。