《磁盘空间突然没了,df 一看却还有:journal 日志把根分区吃满了》

举报
yd_241984912 发表于 2026/11/10 12:26:52 2026/11/10
【摘要】 昨天一台机器突然报警,根分区用了 95%,再写文件就报错。但 du -sh /* 一路加下来,大头都对不上号,少了好几个 G。最后查到是 systemd 的 journal 日志在悄悄吃空间。第一处:先看 journal 占了多少journalctl --disk-usage这条直接告诉你日志占了多少磁盘。一台跑了几个月的机器,journal 吃掉几个 G 很常见,尤其是某个服务一直在刷 e...

昨天一台机器突然报警,根分区用了 95%,再写文件就报错。但 du -sh /* 一路加下来,大头都对不上号,少了好几个 G。最后查到是 systemd 的 journal 日志在悄悄吃空间。

第一处:先看 journal 占了多少

journalctl --disk-usage

这条直接告诉你日志占了多少磁盘。一台跑了几个月的机器,journal 吃掉几个 G 很常见,尤其是某个服务一直在刷 error 日志的时候。

第二处:清理加限流,两步做

清理只留最近 200M:

journalctl --vacuum-size=200M

想彻底一点,也可以按时间清:

journalctl --vacuum-time=7d

清完还得限流,不然过几天又满。改 /etc/systemd/journald.conf:

SystemMaxUse=200M
MaxFileSec=7day

然后重启 journald 生效:

systemctl restart systemd-journald

注意:vacuum 删的是已归档的日志,正在写的当前日志文件不动,服务不用停。

第三处:再查 /var/log 里失控的单个日志

journal 清完了如果空间还是不对,换 du 定位:

du -sh /var/log/* | sort -rh | head

经常是某个应用的日志文件一个月没轮转,单个文件就几 G。临时处理直接清空,不要 rm,进程还占着句柄,rm 了空间也不释放:

: > /var/log/xxx.log

长久之计是确认 logrotate 在跑:看 /etc/logrotate.d/ 里有没有这个应用的配置,没有就补一条,按天轮转、保留 7 份。

最后:如果 du 和 df 还是对不上

du 算的是文件实际大小,df 看的是文件系统已用块。两者差得多,先看有没有被删掉但还被进程占着的文件:

lsof | grep deleted

有就重启对应进程;没有就看挂载点:某个目录被单独挂载后,旧文件还留在根分区原位置,du 走挂载路径看不到。

三板斧记好:journalctl --disk-usage、du -sh /var/log/*、lsof | grep deleted。磁盘满了先别急着扩容,大概率是日志在作怪。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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