Linux 磁盘满了别急着删文件:四步排查套路
服务器上最常见的半夜报警之一:“磁盘使用率 95%”。很多人第一反应就是 rm -rf 一顿删,结果删完空间没释放,或者一不小心删错了东西。这里分享一套排查套路,按顺序走四步,基本十分钟内定位问题。
第一步:确认是哪块盘满了
df -h
看 Use% 最高的那一行。注意 tmpfs 和容器里的 overlay 容易误导,重点看 /、/var、/data 这类真实磁盘挂载点。
第二步:定位吃空间的大目录
du -sh /var/* | sort -rh | head -10
逐层往下钻:发现 /var/log 占了 30G,就继续 du -sh /var/log/* | sort -rh | head。日志目录通常是头号嫌疑犯,其次是备份目录和没人管的下载目录。
第三步:删了文件空间却没释放?查 deleted
这是最经典的坑:日志文件被 rm 删了,但写日志的进程还开着,文件句柄没释放,空间照样被占着。症状就是 df 看满了,du 却算不出那么多——差值就是被这些"已删除但未释放"的文件吃了:
lsof | grep deleted
解法不是继续删文件,而是让进程释放句柄:用 > /var/log/app.log 清空文件(而不是 rm),或者重启对应的服务。生产环境优先用清空,别手起刀落。
第四步:空间明明还有却写不进去?查 inode
df -i
如果 IUse% 到了 100% 而磁盘空间还有剩余,说明 inode 耗尽——通常是某个目录下有海量小文件,比如失控的 PHP session、邮件队列、解压了一半的包:
find /var/spool -type f | wc -l
找到肇事目录后批量清理。预防办法:日志轮转配好 logrotate,给小文件目录加上数量监控,别只盯着磁盘容量。
一句话总结:df 定盘、du 定位、lsof 查 deleted、df -i 查 inode。按这个顺序走,磁盘报警基本能快速定位;少删错一个文件,都是赚的。
- 点赞
- 收藏
- 关注作者
评论(0)