磁盘满了别急着删日志,我踩过这个坑

举报
yd_298384123 发表于 2026/10/31 19:27:27 2026/10/31
【摘要】 删了日志磁盘还是满?多半是文件被进程占着没释放。用 lsof 找出这类文件,truncate 清空比 rm 管用,顺手把 logrotate 配上。

磁盘写满的那一刻,第一反应永远是删日志。我第一次遇到也这么干,删了 8 个 G,df -h 一看,还是 100%。

命令敲下去的时候心里挺有底气,觉得这么大一块日志删掉肯定够用。结果刷新一下,使用率一点没变。

后来才搞明白,Linux 上你 rm 一个正在被进程打开的文件,目录项是没了,但占用的块不会释放。进程还拿着那个 fd 在写,内核就当这个文件还活着。磁盘该满还是满。

判断方法很简单:

lsof | grep deleted

列出来的就是这种"删了但没真删"的文件,第二列是进程 PID,后面有文件大小。我那台机器上,nginx 的两个 worker 各占着 3 个 G 的 access.log,加起来比我想清空的还多。

处理有两条路。要么重启对应进程,让它把 fd 关掉,空间自然回笼。要么更稳妥一点,先 truncate -s 0 把文件截断,进程还能继续写,但内容清空了。生产环境一般选后者,重启有风险。

我当时的做法是先 truncate,再给 nginx 配 logrotate,按天切分保留七天。配完顺手把 rsyslog 也调了,它才是真正的日志大户。

还有个细节:真正卡住的不一定是空间,也可能是 inode。df -i 看一下 inode 使用率,小文件太多的时候,空间还有一半,inode 先满了,表现一样是"磁盘满",但删大文件完全没用。

现在我的习惯是出事先看三个数:df -h、df -i、lsof | grep deleted。三个都看完再动手,比上来就 rm 安全得多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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