journalctl 的“模式”由日志来源、存储位置、权限及输出格式共同决定:--disk-usage查磁盘占用,--verify验完整性,--header显元数据;/var/log/journal/存在且非空表示持久化启用,否则为 volatile 模式;storage=persistent在/etc/systemd/journald.conf中配置,重启服务生效。

journalctl 查看日志的详细模式信息
Linux 系统用 systemd-journald 管理日志时,journalctl 是核心工具,但它的“模式”不是配置项,而是由日志来源、存储位置、访问权限和输出格式共同决定的。所谓“模式详情”,实际指当前 journal 的运行状态、持久化设置、日志路径及读取能力。
-
journalctl --disk-usage查看当前日志占用磁盘空间(判断是否启用持久化) -
journalctl --verify检查日志文件完整性(验证二进制日志结构是否损坏) -
journalctl --header输出 journal 文件头信息,含日志起始时间、序列号、机器 ID、系统启动次数等元数据 - 检查
/var/log/journal/是否存在且非空:存在表示启用了持久化;若只在/run/log/journal/有内容,则为 volatile 模式(重启丢失)
确认 journald 是否启用持久化存储
默认情况下,systemd-journald 只把日志存到内存(/run/log/journal/),重启即清空。要查是否改过配置,直接看 /etc/systemd/journald.conf 中的 Storage= 行:
-
Storage=volatile→ 只存内存,/var/log/journal/不会创建 -
Storage=persistent→ 首次启动会自动创建/var/log/journal/<machine-id>/</machine-id>并写入磁盘 -
Storage=auto(默认)→ 若/var/log/journal/目录可写则启用持久化,否则退回到 volatile
注意:systemd-journald 启动后不会动态重读该配置,修改后需执行 sudo systemctl kill --signal=SIGUSR1 systemd-journald 或重启服务。
区分 journal 日志与传统 syslog 文件日志
很多人混淆 journalctl 和 /var/log/syslog(或 /var/log/messages)。关键区别在于:
-
journalctl读的是二进制结构化日志(.journal文件),支持字段过滤(如-u sshd、_PID=1234)、时间范围、优先级筛选 -
/var/log/syslog是 plain text,由rsyslog或syslog-ng转发生成,内容是 journal 日志的文本副本,不保留原始结构字段 - 如果同时启用
rsyslog,它默认通过imjournal模块读取 journal,但转发过程可能丢字段、改时间戳、合并行——不能替代原生journalctl
常见错误:为什么 journalctl 显示 “No journal files were found”?
这个提示不是命令出错,而是说明当前没有可读的 journal 数据源。原因通常有三个:
- 系统没启用持久化,且刚重启过 →
/run/log/journal/下无有效文件(此时 journal 其实正在运行,只是没历史记录) -
/var/log/journal/目录存在但权限不对(应属root:systemd-journal,且至少drwxr-sr-x) -
systemd-journald服务未运行(sudo systemctl status systemd-journald看状态,active (running)才正常)
真正容易被忽略的是:即使 journalctl 能显示最近几条日志,也不代表它能回溯 —— volatile 模式下,只要上次重启前的日志就永远消失了,不存在“恢复”一说。











