尽管 Storage=persistent,systemd-journald 系统日志在启动后仍不会持久

尽管 Storage=persistent,systemd-journald 系统日志在启动后仍不会持久

我最近遇到了一个问题,systemd 无法保留以前启动的日志。我在这里和其他地方查看了几个答案,但没有找到解决方案。

问题是用户日志在启动后会保留,但系统日志不会

/etc/systemd/journald.conf

[Journal]
Storage=persistent
SystemMaxUse=500M
SystemMaxFiles=5

journalctl -b -1

[root@2ba2de9e /var/log/journal] # journalctl --system -b -1
Data from the specified boot (-1) is not available: No such boot ID in journal

我在一些树莓派上使用 archlinux arm

版本4.14.24-1-ARCH systemd 237.64-1 systemd-sysvcompat 237.64-1

有人知道为什么会发生这种情况吗?在我的台式机上运行正常吗?

答案1

由于磁盘空间不足,journald 可能会删除旧日志。(您没有提到启动后多久-b -1无法正常工作,所以我不知道当时您是否有很多当前启动的日志。)

您已SystemMaxUse=500M配置,但如果没有太多可用磁盘空间,journald 可能会决定使用少于 500MB 的空间。还有一个SystemKeepFree=...设置,默认为文件系统大小的 15%(或 4GB,以较小者为准),journald 将比您允许的空间更严格地执行该限制。如果您的/var/log/journal分区空间紧张,也许这可能是问题的一部分。

您可以使用一些命令来检查 journald 使用的空间量,例如:

$ journalctl --disk-usage

您还可以查看 journald 知道多少次启动 (以及它们的时间和 ID):

$ journalctl --list-boots

这些也许还有助于阐明您的问题......

我希望这有帮助!

答案2

我的发行版附带了这个文件:/etc/systemd/journald.conf.d/volatile-storage.conf 它有以下行

Storage=volatile

易变的部分需要更改为持久的部分,否则改变/etc/systemd/journal.conf会被忽略。

答案3

延伸镜像答案,为了Storage=volatileStorage=auto工作,/var/log/journal目录必须存在,并且某些发行版默认不提供此位置。

因此您需要创建并指示journald将内存中的所有内容刷新到其中。

sudo mkdir /var/log/journal     ## Enable persistent logging
sudo journalctl --flush

相关内容