核心是用 journalctl --vacuum-* 安全清理存量日志,并修改 /etc/systemd/journald.conf 设置 systemmaxuse、systemmaxfilesize、maxretentionsec 等参数后重启 systemd-journald 服务以控制增量;严禁手动删除 .journal 文件,否则会破坏索引导致日志不可读、写入失败及空间无法释放。

清理和限制 journald 日志空间,核心就两条:用 journalctl --vacuum-* 安全清存量,改 /etc/systemd/journald.conf 并重启服务来控增量。手动删 .journal 文件会破坏索引、导致日志不可读或服务异常,绝对不要做。
立即释放磁盘空间(临时清理)
用 journalctl --vacuum-* 命令可安全、原子地清理已有日志,不伤索引,删完即释放空间:
-
按大小保留:只留最新 500MB,适合空间告急时快速止损
sudo journalctl --vacuum-size=500M -
按时间保留:只留最近 7 天,适合按周期归档场景
sudo journalctl --vacuum-time=7d -
两者并用:journald 自动取更严格条件(比如设了
--vacuum-size=200M和--vacuum-time=30d,实际只留够 200MB 的最新日志) - 清理后验证效果:
journalctl --disk-usage,看输出是否明显下降
防止日志再次涨满(永久限制)
不改配置,清理完过几天又满了。必须编辑 /etc/systemd/journald.conf,取消注释并设置以下关键项,再重启服务:
-
启用持久化存储(若还没开):确认
Storage=persistent已设置,且/var/log/journal/目录存在(不存在就手动创建并设权限:sudo mkdir -p /var/log/journal && sudo chown root:systemd-journal /var/log/journal && sudo chmod 2755 /var/log/journal) -
限制总大小:
SystemMaxUse=500M—— 整个/var/log/journal最多占 500MB -
限制单文件大小:
SystemMaxFileSize=100M—— 超过自动轮转,避免单个文件过大难管理 -
限制保留时长:
MaxRetentionSec=1month或7d—— 超期日志自动清理(注意:旧版 systemd 如 CentOS 7 可能不支持,需确认systemd --version≥ 230) - 改完必须执行:
sudo systemctl restart systemd-journald - 验证配置是否生效:
sudo systemd-analyze cat-config systemd/journald.conf | grep -E "(MaxUse|MaxFileSize|Retention)"
日常维护与验证技巧
配置生效后还需定期检查,确保策略真正落地:
- 查当前占用:
journalctl --disk-usage(显示 “Archived and active journals take up X.XM”) - 查最早还能看到哪次启动:
journalctl --list-boots,第一行时间应符合MaxRetentionSec设置 - 查某服务最近日志是否完整:
journalctl -u sshd.service --since "3 days ago" -n 20 - 若发现日志仍持续增长,检查是否误配了
RuntimeMaxUse(作用于/run/log/journal)而漏了SystemMaxUse(作用于/var/log/journal)
特殊场景补充建议
某些受限环境(如容器宿主机、CI 临时节点)无法修改系统配置,可用定时任务兜底:
- 每天凌晨清理到 200MB:
0 2 * * * root /usr/bin/journalctl --vacuum-size=200M >/dev/null 2>&1 - 切勿用
find /var/log/journal -name "*.journal" -delete—— 索引损坏风险极高 - 如 SELinux 启用,确认目录上下文正确:
ls -Z /var/log/journal应为system_u:object_r:var_log_t:s0,否则运行sudo restorecon -Rv /var/log/journal











