删了文件磁盘还是满的?多半是进程还抱着它

举报
yd_241984912 发表于 2026/10/30 21:46:04 2026/10/30
【摘要】 日志文件删了,df 一看空间一点没回来;或者 du 算出来的用量和 df 对不上,差了一大截。这种情况多半不是删错了地方,而是文件已经删了、但还有进程抱着它不放,空间就一直不释放。第一,先确认是不是这种情况。用 lsof | grep deleted 看一眼:输出里带 (deleted) 的就是已经被删、但还被进程占着的文件,后面跟的大小就是没释放的空间。最常见的就是日志:程序一直在往里写,...

日志文件删了,df 一看空间一点没回来;或者 du 算出来的用量和 df 对不上,差了一大截。这种情况多半不是删错了地方,而是文件已经删了、但还有进程抱着它不放,空间就一直不释放。


第一,先确认是不是这种情况。用 lsof | grep deleted 看一眼:输出里带 (deleted) 的就是已经被删、但还被进程占着的文件,后面跟的大小就是没释放的空间。最常见的就是日志:程序一直在往里写,运维顺手把日志文件 rm 了,程序手里还握着句柄,继续往里写,磁盘当然不减。df 和 du 对不上、差额又正好等于这些 (deleted) 文件的大小时,基本就是这个原因。


第二,选对释放办法。有两个办法:一是重启抱着文件的进程,句柄一关空间立刻回来,适合能重启的服务;二是不停服务直接清零,对着 /proc/<PID>/fd/<号> 做 : > 操作把文件截断,空间同样回来、服务也不用停。注意别用 rm 再删一次——文件已经不在目录里了,再删没有用;也别上来就 kill -9,先确认这个进程能不能停、停了有什么影响。


第三,以后别再踩:正在被写的日志别用 rm 删,改用 : > 文件名截断,或者配 logrotate 按大小、时间自动转存。截断是把文件内容清零、句柄还在,程序继续写也不受影响;删除是把目录项去掉、句柄还留着,空间反而释放不掉。


总结一下:删了文件空间不回来,先 lsof | grep deleted 查谁抱着,再决定重启还是截断;以后清日志用截断、别用 rm。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。