journalctl --vacuum-size 是清理 systemd-journal 磁盘空间最直接有效的物理裁切手段,通过按时间倒序删除最老的 .journal 文件,将日志总大小强制压缩至指定值(如 500M),永久释放磁盘空间且不可逆,同时需配合 /etc/systemd/journald.conf 中 SystemMaxUse 等配置实现长期管控。

journalctl --vacuum-size 是清理 systemd-journal 占用磁盘空间最直接有效的物理裁切手段,它会永久删除旧日志文件、释放真实磁盘空间,而非仅隐藏或轮转。
理解 --vacuum-size 的作用机制
systemd-journal 默认将日志以二进制格式(.journal)存于 /var/log/journal/(持久化存储)或 /run/log/journal/(易失性存储)。当磁盘爆满,首要目标是快速腾出物理空间——--vacuum-size 正是为此设计:它扫描所有 journal 文件,按时间倒序排序,逐个删除最老的日志文件,直到总占用空间 ≤ 指定大小。
- 该操作不可逆,删除后无法恢复
- 只影响已写入磁盘的 .journal 文件(不触内存缓冲或当前运行日志)
- 不影响 journalctl 查询逻辑(剩余日志仍可正常检索)
立即执行紧急裁切(推荐 500M 安全阈值)
若 /var 分区使用率已达 95%+,优先执行:
sudo journalctl --vacuum-size=500M
该命令将 journal 总体积强制压缩至 ≤ 500MB。实际释放空间取决于原日志总量——若原有 8GB 日志,可能释放超 7.5GB 空间。
- 首次运行会输出类似:Vacuuming done, freed 7.2G of archived journals
- 若提示 No entries to vacuum,说明当前日志总大小已 ≤ 目标值
- 可反复尝试更小值(如 200M),但需确保留出至少 100MB 缓冲以防服务写入失败
配合配置实现长期可控
单次裁切只是救火,需同步设置自动限制防止复发:
- 编辑 /etc/systemd/journald.conf
- 取消注释并修改以下三行:
SystemMaxUse=500M SystemKeepFree=1G MaxRetentionSec=1month
重启生效:sudo systemctl restart systemd-journald
- SystemMaxUse:硬性上限,journald 主动清理时以此为准
- SystemKeepFree:保留至少 1GB 空闲空间,避免因磁盘满导致 journal 停写
- MaxRetentionSec:配合时间维度,防止单一高频率服务撑爆空间
验证与排查常见陷阱
执行后务必确认效果:
- 查当前占用:
journalctl --disk-usage - 看实际文件大小:
sudo du -sh /var/log/journal/* - 若 /var/log/journal/ 下仍有大量旧目录未删,可能是权限问题——确保 journald 进程有读写权限,或手动清理残留:
sudo rm -rf /var/log/journal/*/*.journal~ - 注意:若系统启用了 Storage=volatile(日志仅存内存),--vacuum-size 无效,需改用 Storage=persistent 并重启 journald


















