要让 journalctl 日志重启后不丢失,必须将日志路径从内存 /run/log/journal 切换到磁盘 /var/log/journal,需完成目录创建、权限设置、配置启用、服务重启、效果验证五步操作。

要让 journalctl 日志在重启后不丢失,必须把默认的内存路径 /run/log/journal 切换到磁盘路径 /var/log/journal。这不是改一行配置就能生效的事,而是目录创建、权限设置、配置启用、服务重启、效果验证五步连贯操作。
手动创建并初始化持久化日志目录
systemd-journald 不会自动创建 /var/log/journal,目录缺失或权限错误时,服务会静默退回到 volatile 模式,日志仍存在内存中,重启即丢。
- 创建目录:
sudo mkdir -p /var/log/journal - 设置归属组为
systemd-journal(关键!否则写入失败):sudo chown root:systemd-journal /var/log/journal - 设置 2755 权限(保留 setgid,确保子目录继承组):
sudo chmod 2755 /var/log/journal - 用 systemd-tmpfiles 补全策略(更健壮):
sudo systemd-tmpfiles --create --prefix /var/log/journal
修改 journald.conf 启用持久化存储
编辑 /etc/systemd/journald.conf,在 [Journal] 小节中明确配置:
-
Storage=persistent—— 必须显式指定,不要用auto,避免目录异常时自动降级 -
Compress=yes—— 默认使用 LZ4 压缩,节省约 70% 磁盘空间 -
ForwardToSyslog=no—— 关闭冗余转发,除非你真在用 rsyslog 集成
保存后执行:sudo systemctl restart systemd-journald
限制磁盘占用,防止日志撑爆系统
持久化后日志持续增长,需设置容量和时间上限。在 [Journal] 小节中追加以下参数:
-
SystemMaxUse=2G—— 所有持久化日志总大小上限(建议 1–4G) -
SystemKeepFree=3G—— 强制保留至少 3G 空闲空间,防系统卡死 -
MaxRetentionSec=2week—— 日志最长保留 2 周(支持1d、30d、6months等) -
MaxFileSec=1d—— 单个日志文件最多存 1 天,利于轮转 -
SystemMaxFileSize=100M—— 单个文件最大 100MB,避免过大难处理
改完同样需执行 sudo systemctl restart systemd-journald 生效。
验证是否真正落盘且跨重启可用
只看配置文件没用,必须检查实际行为:
-
journalctl --disk-usage—— 输出应含/var/log/journal且显示非零字节数,注明 “in the file system” -
journalctl --list-boots—— 至少看到两个以上 boot ID,说明重启后历史日志已保存 -
ls -lh /var/log/journal/*/system.journal—— 应有实际生成的二进制文件 - 可补测:重启前
logger "test-persistence",重启后再运行journalctl -n 5 | grep test确认可见


















