我最近遇到了一个问题,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=volatile
和Storage=auto
工作,/var/log/journal
目录必须存在,并且某些发行版默认不提供此位置。
因此您需要创建并指示journald
将内存中的所有内容刷新到其中。
sudo mkdir /var/log/journal ## Enable persistent logging
sudo journalctl --flush