downuuship

Linux 磁盘写满时的快速定位顺序

2026-09-28

服务突然报 No space left on device,但 du 加起来又对不上 df 的数字。这时候按下面的顺序查,通常几分钟就能定位。

第一步:分清空间满还是 inode 满

df -h /
df -i /

df -h 看的是块占用,df -i 看的是 inode 数量。如果空间还有余量但 inode 是 100%,说明小文件太多,常见于缓存目录、session 文件、邮件队列。

第二步:找大目录

du -xhd1 / | sort -rh | head -10

-x 很重要:不加这个参数,du 会跨进挂载点,把别的磁盘也算进来,结果没有参考价值。

第三步:查被删除但没释放的文件

这是 du 和 df 对不上的最常见原因。某个日志文件被删了,但还有进程握着它的句柄,空间就不会释放。

lsof +L1 | sort -k7 -n | tail -10

找到进程后,重启该进程即可释放;不方便重启的,可以用 : > /proc/<pid>/fd/<n> 清空。

第四步:按类型清理

常见的几个大头:

收尾

清理完最好顺手加一个监控阈值,别等到写满了才发现。磁盘从 80% 涨到 100% 往往只要几个小时,尤其是日志没有轮转的时候。