<p>不能手动删除 /var/log/journal/ 下的 .journal 文件,必须用 journalctl --vacuum-* 或修改 /etc/systemd/journald.conf 并重启 systemd-journald 服务来安全清理。</p>

不能手动删除 /var/log/journal/ 下的 .journal 文件。
journalctl 日志是结构化二进制数据库,systemd-journald 依赖内部索引和文件关联关系持续写入。直接 rm 或 find ... -delete 会导致:
- journalctl 报错:
Failed to open journal files: Invalid argument - 新日志无法写入,服务可能拒绝记录、反复重启或 CPU 占用飙升
- 即使删了文件,重启后 journald 可能重建损坏的索引,空间仍不释放
✅ 正确做法只有两种:用 journalctl --vacuum-* 清理,或改配置后重启服务。
用 journalctl 命令安全清理过期日志
这是唯一推荐的手动清理方式,原子、安全、立即生效:
查看当前占用:
journalctl --disk-usage保留最新 500MB(自动删最旧的):
sudo journalctl --vacuum-size=500M保留最近 7 天的日志:
sudo journalctl --vacuum-time=7d两者同时用(取更严条件):
sudo journalctl --vacuum-size=300M --vacuum-time=14d
执行后再次运行 journalctl --disk-usage 确认空间已回收。
配置永久限制,避免反复手动清理
临时清理治标,改配置才能治本。编辑 /etc/systemd/journald.conf,确保以下几行取消注释并设值:
[Journal] Storage=persistent Compress=yes SystemMaxUse=500M SystemMaxFileSize=100M MaxRetentionSec=1week
保存后必须重启服务:sudo systemctl restart systemd-journald
验证是否生效:sudo systemd-analyze cat-config systemd/journald.conf | grep -E "(MaxUse|MaxFileSize|Retention)"
补充说明:哪些“看起来像碎片”的文件也不能碰
-
system@*.journal~或user-*.journal~:不是备份,是 journald 正在写入的临时文件,删了会中断写入 -
/run/log/journal/下的文件:内存中日志,重启即消失,无需处理(且通常无权写入) -
.journal~或带@符号的文件:都是 journald 自动管理的组成部分,非孤立碎片
真正的“碎片”不存在——journald 不产生无用残留,只产生受控的归档与轮转。
如果你只是想快速腾出空间(紧急情况)
可配合其他日志类型一起处理:
清空大文本日志(不删文件,保留 inode):
sudo truncate -s 0 /var/log/syslogsudo truncate -s 0 /var/log/kern.log删除旧压缩归档:
sudo rm /var/log/*.gzsudo rm /var/log/*.?[4-9] /var/log/*.??
但 /var/log/journal/ 下的所有 .journal 文件,一律不许手动删。

















