真正防止磁盘爆满需配置/etc/systemd/journald.conf并重启服务;禁用手动删.journal文件;用journalctl --disk-usage确认存储状态;临时清理用--vacuum-size或--vacuum-time;永久限制设SystemMaxUse、SystemKeepFree等参数;推荐加crontab每小时自动vacuum。

直接用 journalctl --vacuum-* 清理是救急手段,真正防止磁盘爆满得靠配置 /etc/systemd/journald.conf 并重启服务。手动删 .journal 文件会破坏索引、导致日志写入异常,绝对不要这么做。
先看日志占了多少空间
执行命令确认是否已持久化存储:
-
journalctl --disk-usage—— 查看当前总占用,比如输出Archived and active journals take up 2.8G -
ls /var/log/journal/—— 若目录为空或提示No journal files were found.,说明日志只存在内存(/run/log/journal/),重启即清,无需担心磁盘问题
快速释放空间(临时清理)
适合磁盘已告急时立即执行,安全且原子化:
-
sudo journalctl --vacuum-size=500M—— 只保留最新、压缩后的 500MB 日志 -
sudo journalctl --vacuum-time=7d—— 只保留最近 7 天的日志 - 两个参数可一起用:
sudo journalctl --vacuum-size=300M --vacuum-time=14d,journald 自动取更严的那个条件
执行后务必再运行 journalctl --disk-usage 验证效果。
设置永久上限(关键步骤)
编辑配置文件让 journald 主动控量:
- 运行
sudo nano /etc/systemd/journald.conf - 取消注释并设值(单位支持 M、G、d、h):
-
Storage=persistent(确保启用持久化) -
SystemMaxUse=500M—— 整个/var/log/journal/最多占 500MB -
SystemKeepFree=1G—— 至少留出 1GB 空闲才允许继续写入 -
MaxRetentionSec=30d—— 超过 30 天自动清理 -
SystemMaxFileSize=100M—— 单个日志文件超 100MB 就轮转,提升 vacuum 效率 - 保存后执行
sudo systemctl restart systemd-journald生效
加一层定时兜底(推荐)
即使配置生效,极端情况仍可能短暂超限。建议加 crontab 每小时强制收紧一次:
- 运行
sudo crontab -e - 添加一行:
0 * * * * /usr/bin/journalctl --vacuum-size=500M >/dev/null 2>&1 - 这样每小时自动把日志压到 500MB 内,不依赖 journald 自身轮转逻辑


















