journalctl --disk-usage 是查看 journald 磁盘占用的唯一可信方法,显示 /var/log/journal/ 和 /run/log/journal/ 下被 journald 管理的日志总大小,其他 du 命令结果仅为近似参考。

Linux系统日志本身不直接提供“空间记录”这个概念,但你真正想查的,通常是 journald 占用的磁盘空间(因为传统 syslog 文本文件大小一目了然,而 journald 默认存二进制日志,容易悄悄吃满磁盘)。
journalctl --disk-usage 显示当前日志占用空间
这是最直接的方法,它读取 /var/log/journal/(或 /run/log/journal/)下所有日志文件总大小:
-
journalctl --disk-usage—— 输出类似Archived and active journals take up 124.5M in the file system. - 若返回
0B或提示 “No journal files were found”,说明 journald 没启用持久化,日志只存在内存或/run/log/journal/(重启即丢),此时不占磁盘空间 - 该命令无需 root 权限即可运行,但仅显示总用量,不区分归档/活跃日志
为什么 /var/log/journal 目录大小和 journalctl --disk-usage 不一致
常见原因有三个:
-
/var/log/journal/下可能残留已删除但未释放的 journal 文件(进程仍持有句柄),journalctl --disk-usage统计的是实际被 journald 管理的日志数据,而du -sh /var/log/journal统计的是文件系统可见的目录大小 - 日志轮转后,旧日志文件可能被压缩(如
.journal~或.gz),journalctl不计入这些归档文件 - rsyslog 或其他守护进程也可能往
/var/log/写文本日志,它们和 journald 无关,需单独用du -sh /var/log/*.log*查看
限制 journald 日志最大磁盘用量
靠默认配置很容易把 /var 分区撑爆,必须手动设上限:
- 编辑
/etc/systemd/journald.conf,取消注释并修改这两行:SystemMaxUse=512MRuntimeMaxUse=256M -
SystemMaxUse控制/var/log/journal/最大用量,RuntimeMaxUse控制/run/log/journal/(内存临时目录) - 改完必须重启服务:
sudo systemctl restart systemd-journald,否则配置不生效 - 注意:如果启用了
Storage=persistent但没创建/var/log/journal/目录,journald 会退回到/run/log/journal/,导致SystemMaxUse完全失效
清理旧日志释放空间
别直接 rm -rf /var/log/journal/* —— 这会破坏 journald 数据结构,下次启动可能报错或重建空目录:
- 安全清理全部归档日志:
sudo journalctl --vacuum-size=256M(保留最新 256MB) - 或按时间清理:
sudo journalctl --vacuum-time=2weeks(删掉 2 周前的所有日志) - 清理后立即执行
journalctl --disk-usage验证是否生效 - 如果
/var/log/journal/下仍有大量小文件(如system@*.journal),说明 journald 没正确加载配置,检查systemctl status systemd-journald是否报错
真正容易被忽略的点是:journald 的磁盘用量不是“日志文件大小”的简单叠加,而是由其内部索引+压缩+归档机制共同决定的;--disk-usage 是唯一可信指标,其他任何 du 或 ls -l 结果都只是近似参考。











