结论:先分清是磁盘真满还是 inode 满,再用 du 逐层定位,别忘了检查被删除但仍被进程占用的文件。
① 执行 df -h 看空间,df -i 看 inode。如果空间没满但 inode 100%,说明是海量小文件,用 find / -xdev -type f | awk 统计目录文件数,重点查 /var/spool、缓存目录和日志轮转目录。
② 空间确实满时,从根目录开始 du -sh /* 2>/dev/null | sort -rh | head,逐层往下钻,比直接 find 全盘快得多,也不会把磁盘 IO 打满。
③ 如果 du 统计出来的总和对不上 df 的结果,多半是有进程还占着已删除的文件,用 lsof | grep deleted 找出来,重启对应进程即可释放。
④ 清理时优先删日志和临时文件,别动 /proc、/sys 下的内容;同时检查 logrotate 配置,很多服务器反复满盘就是日志没轮转或轮转后没删旧包。