必须用 journalctl --vacuum-* 清理日志并修改 /etc/systemd/journald.conf 后重启服务,因手动删除 .journal 文件会破坏索引、引发报错和写入异常,且空间无法真正释放。

直接结论:别删文件,用 journalctl --vacuum-* 清理;要长期有效,必须改 /etc/systemd/journald.conf 并重启 systemd-journald。
为什么不能直接 rm -rf /var/log/journal/ 下的 .journal 文件
systemd-journald 会锁住正在写入的日志文件,且维护内部索引。手动删除会导致:
-
journalctl报错Failed to open journal files: Invalid argument或无法读取部分日志 - 服务可能拒绝写入新日志,
systemd-journald出现异常退出或高 CPU 占用 - 即使删了,下次重启或轮转时仍可能恢复旧结构,空间没真正释放
临时清理:用 journalctl --vacuum-* 立即释放空间
这是安全、原子的操作,journald 会自动重写索引并压缩归档。常用组合:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 按大小清理(推荐先试):
sudo journalctl --vacuum-size=500M—— 只保留最新 500MB 日志 - 按时间清理:
sudo journalctl --vacuum-time=7d—— 只保留最近 7 天 - 两者可同时用,journald 会按更严格条件执行(比如设了
--vacuum-size=100M和--vacuum-time=30d,实际只留够 100MB 的最新日志) - 执行后检查效果:
journalctl --disk-usage,确认输出如Archived and active journals take up 420.1M
永久限制:修改 journald.conf 并重启服务
不改配置,每次重启或过一段时间日志又涨回来。关键参数必须取消注释并设值:
- 编辑
/etc/systemd/journald.conf,确保以下三行生效(去掉前面的#): -
SystemMaxUse=500M—— 整个 journal 目录最大占用(不是单文件) -
SystemMaxFileSize=100M—— 单个日志文件达到此大小就轮转 -
MaxRetentionSec=1month—— 超过该时间自动清理(也可写7d) - 改完必须执行:
sudo systemctl restart systemd-journald - 验证是否加载成功:
sudo systemd-analyze cat-config systemd/journald.conf | grep -E "(MaxUse|MaxFileSize|Retention)"
脚本化定期清理(仅当配置不可控时备用)
某些环境(如容器化宿主机、CI 临时节点)无法改系统配置,可用定时脚本兜底。但注意:
- 不要用
find /var/log/journal -name "*.journal" -delete—— 同上,破坏索引 - 正确做法是封装 vacuum 命令,例如每天清到 200MB:
#!/bin/bash journalctl --vacuum-size=200M >/dev/null 2>&1 echo "$(date): vacuumed to 200M" >> /var/log/journal_vacuum.log
- 加进 crontab:
0 3 * * * /opt/scripts/vacuum-journal.sh - 务必加日志记录和重定向,否则 cron 错误会静默失败
最常被忽略的一点:改完 journald.conf 后忘记 systemctl restart systemd-journald,导致配置始终不生效;另外 SystemMaxUse 是硬上限,设太小(如 16M)可能导致关键启动日志被截断,排查故障时无从下手。










