Plainnotes

文件删了,磁盘空间没释放

2026-03-18 · 3 分钟排错

du -sh /var/log 只有 2G,df 却说用了 50G。中间那 48G 是“已删除但仍被打开”的文件。

lsof +L1

会列出 link count 为 0 的打开文件,以及持有它们的进程。典型场景:日志文件被 rm 了,但应用还开着 fd 继续写;或者 nginx 的 access.log 被删了没 reload。

处理:重启对应进程,或者用 > /proc/<pid>/fd/<n> 清空(对普通文件有效,对 socket 无效)。

预防:别用 rm 删正在写的日志,用 truncate -s 0 或者让 logrotate 处理。df 和 du 对不上时,第一个想到的就该是这条。