AlmaLinux 10:journald 日志去哪了,怎么留下来
在 PVE 的 AlmaLinux 10.2 虚拟机(最小化安装,systemd 257-23.el10_2.1.alma.1)上实测:
- 默认状态:没有
/etc/systemd/journald.conf,Storage取默认auto,没有/var/log/journal; - 手动建目录并重启后的状态;
journalctl的查询与--vacuum-size回收输出。
截图与日志:public/evidence/journald/alma-journalctl.png。
默认状态:日志在内存里
Section titled “默认状态:日志在内存里”最小化安装后直接看:
$ ls /etc/systemd/journald.confls: cannot access '/etc/systemd/journald.conf': No such file or directory
$ systemd-analyze cat-config systemd/journald.conf | grep -E '^#?Storage'#Storage=auto
$ ls -d /var/log/journalls: cannot access '/var/log/journal': No such file or directory
$ journalctl --disk-usageArchived and active journals take up 5.6M in the file system.Storage=auto 的语义是「有 /var/log/journal 就持久化,没有就易失」。所以这时那 5.6M 全在 /run/log/journal,重启即丢。
配置片段只在 /usr/lib/systemd/journald.conf(软件包自带、全注释),/etc 下没有覆盖文件。
让日志落地:建目录 + 重启
Section titled “让日志落地:建目录 + 重启”# mkdir -p /var/log/journal# systemctl reboot重启后 journald 自己的日志给出证据:
$ journalctl -u systemd-journald -b --no-pager | grep JournalOct 21 08:32:01 localhost systemd-journald[565]: System Journal (/var/log/journal/c9bf91c1c75e4ff192415c3b38a521c3) is 12.5M, max 894.4M, 881.9M free.目录由 journald 自己补全属主与 ACL:
$ ls -ld /var/log/journal/*drwxr-sr-x+ 2 root systemd-journal 53 ... c9bf91c1c75e4ff192415c3b38a521c3max 894.4M 是默认值:SystemMaxUse 未设置时取文件系统的 10%(这台 8.8G 根盘)。想改再写 SystemMaxUse=。

只改配置 + restart 不够
Section titled “只改配置 + restart 不够”先说结论:在这台 EL10 上,写 Storage=persistent 再 systemctl restart systemd-journald 没有切换成功——连续三次重启后,journald 仍打印 Runtime Journal (/run/log/journal/...),/var/log/journal 始终是空目录。把 drop-in 换成 /etc/systemd/journald.conf 主文件也一样。
有效的做法是建好目录后重启系统(上面那一步)。如果暂时不能重启,加 Storage=persistent 至少能保证下次开机生效。
这条是实测记录,不是文档结论。systemd 官方文档只描述
Storage=的语义,没有承诺「restart 即可切换存储位置」;版本差异以你的实际输出为准。
查询:按 unit、按启动、按级别
Section titled “查询:按 unit、按启动、按级别”$ journalctl --list-boots --no-pager | tail -2-1 5f6d9c1765b540b398764d07ce8e0655 Wed 2026-10-21 08:10:28 UTC Wed 2026-10-21 08:30:05 UTC 0 00f206a0002b42f40d14f560b472fc42 Wed 2026-10-21 08:31:59 UTC Wed 2026-10-21 08:33:25 UTC
$ journalctl -u sshd -n 2 --no-pager --output=shortOct 21 08:33:25 localhost.localdomain sshd-session[18261]: Accepted password for labuser from 192.168.2.2 port 52642 ssh2
$ journalctl -p err -b --no-pager | tail -1Oct 21 08:33:03 localhost.localdomain systemd[1]: Failed to start NetworkManager-wait-online.service - Network Manager Wait Online.三个常用维度:-u 按 unit、-b 按本次启动、-p err 按级别。定位「刚重启后某个服务为什么没起来」通常就是 journalctl -b -u <unit>。
回收:—vacuum-size 与 —vacuum-time
Section titled “回收:—vacuum-size 与 —vacuum-time”$ journalctl --vacuum-size=2MVacuuming done, freed 0B of archived journals from /run/log/journal.Vacuuming done, freed 0B of archived journals from /var/log/journal/c9bf91c1c75e4ff192415c3b38a521c3.$ journalctl --disk-usageArchived and active journals take up 12.5M in the file system.两点值得注意:
- vacuum 会按目录分别打印一行,
/run和/var都处理; freed 0B不代表没执行——当前活动的system.journal不会被 vacuum 删掉,只有归档(*.journal~或已关闭的)才会被回收。
- 以为日志已经持久化:
journalctl能看到很多历史,但那可能只是本次启动以来的内容,reboot后全没; - 只写 drop-in 不建目录:
Storage=persistent不会替你创建/var/log/journal; - 在
/etc里找配置却找不到:最小化安装只有/usr/lib/systemd/journald.conf,改它会被包升级覆盖,正确做法是/etc/systemd/journald.conf.d/*.conf; - 用
rm清理日志:应该用journalctl --vacuum-*,直接删文件可能留下悬空索引。
练习:观察一次持久化前后
Section titled “练习:观察一次持久化前后”journalctl --disk-usagels -d /var/log/journal 2>&1# 建目录并重启journalctl --disk-usagejournalctl -u systemd-journald -b | grep "System Journal"检查:
- 重启前
ls -d /var/log/journal报不存在; - 重启后同一命令能列出目录,且
journald日志出现System Journal; - 重启前的日志仍在(说明落盘成功);
--disk-usage的数值包含持久化目录。
常见问题
为什么我的 AlmaLinux 有 /etc/systemd/journald.conf?
服务器组或升级过的系统可能预置了该文件;最小化安装(349 包)没有。两处都看一遍:/etc 覆盖 /usr/lib。
能否不用重启就切换?
本页实测 restart 无效。若不能重启,可考虑先把日志转发到 rsyslog 或远端,等维护窗口再重启切换。
journald 和 /var/log/messages 的关系?
EL10 默认仍有 rsyslog 写文本日志(Server 组);两者独立,journald 存二进制、rsyslog 存文本,轮转规则也不同。
- 文本日志轮转:/log-rotation/
- 仓库与包源:/repos/
- 开机排障:开机与启动排障