1核1G开发版 /var/log 目录写满问题终极排查与解决

一、问题现象(重启后)

重启系统后,发现 /var/log 仍然被写满:

/dev/zram0      124M  119M     0 100% /var/log
  • zram 是压缩内存盘,/var/log 挂载在 zram 上
  • 可用空间为 0,导致系统异常

二、当前配置检查

2.1 journald 配置

grep -E -v "^\s*(#|$)" /etc/systemd/journald.conf
[Journal]
Storage=volatile
Compress=no
SyncIntervalSec=0
RuntimeMaxUse=40M
RuntimeMaxFileSize=10M
ForwardToSyslog=no
ForwardToWall=no

2.2 rsyslog 配置

grep -E -v "^\s*(#|$)" /etc/rsyslog.conf
module(load="imuxsock")
module(load="imklog")
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf
auth,authpriv.*            /var/log/auth.log
kern.crit;kern.emerg            /var/log/kern.crit
*.emerg                :omusrmsg:*
*.*                             stop
  • rsyslog 已最小化配置,只记录 auth 日志和内核紧急日志
  • 其他日志已被 *.* stop 丢弃

三、问题定位

3.1 查看 /var/log 占用详情

du -sh /var/log/* | sort -h

输出显示:

0       /var/log/alternatives.log
0       /var/log/bootstrap.log
0       /var/log/btmp
...
20K     /var/log/kern.log
24K     /var/log/messages
40K     /var/log/pbsbc01h3-hardware-monitor.log
52K     /var/log/auth.log
68K     /var/log/syslog
92K     /var/log/daemon.log
119M    /var/log/journal          # ← 罪魁祸首!

3.2 查看文件大小排序

ls -lhS /var/log/ | head -20
total 400K
-rw-r-----  1 root adm    90K May 25 14:13 daemon.log
-rw-r-----  1 root adm    66K May 25 14:13 syslog
-rw-r-----  1 root adm    50K May 25 14:22 auth.log
-rw-r--r--  1 root root   40K May 25 14:24 pbsbc01h3-hardware-monitor.log
...
drwxr-sr-x+ 3 root systemd-journal 4.0K Apr  2 10:36 journal  # 目录占用119M

3.3 检查 auth.log 内容

tail -100 /var/log/auth.log
grep "Failed password" /var/log/auth.log | wc -l

输出显示:

  • 只有正常的 CRON 和 SSH 登录日志
  • 没有失败的密码尝试(0 次)
  • auth.log 只有 50KB,不是问题根源

3.4 检查 kern.crit 是否存在

ls -lh /var/log/auth.log /var/log/kern.crit
ls: cannot access '/var/log/kern.crit': No such file or directory
-rw-r----- 1 root adm 50K May 25 14:22 /var/log/auth.log
  • kern.crit 文件不存在,说明没有内核紧急日志产生

四、根本原因

问题根源/var/log/journal/ 目录占用了 119MB,几乎耗尽所有空间。

虽然配置了 Storage=volatile,但:

  • Storage=volatile 的语义是:优先使用内存,但如果 /var/log/journal/ 目录已经存在,journald 会继续使用它
  • 之前持久化日志留下的目录未被删除,导致配置未真正生效

五、解决方案

5.1 立即修复步骤

# 第1步:停止 journald 服务
sudo systemctl stop systemd-journald

# 第2步:删除磁盘上的持久化日志目录(关键步骤)
sudo rm -rf /var/log/journal/

# 第3步:重启 journald 服务
sudo systemctl start systemd-journald

# 第4步:验证修复结果
df -h /var/log/
ls -la /var/log/journal/      # 应该不存在
ls -la /run/log/journal/      # 应该存在(内存日志)

5.2 验证配置生效

# 查看磁盘日志目录(应该不存在)
ls -ld /var/log/journal 2>/dev/null || echo "✅ 磁盘日志已删除"

# 查看内存日志目录(应该存在)
ls -ld /run/log/journal && echo "✅ 内存日志正常"

# 查看内存日志占用
du -sh /run/log/journal/

# 查看 /var/log 总占用
df -h /var/log/

六、修复结果

6.1 执行过程

root@pbsbc01h3:~# systemctl stop systemd-journald
Warning: Stopping systemd-journald.service, but it can still be activated by:
  systemd-journald-dev-log.socket
  systemd-journald-audit.socket
  systemd-journald.socket

root@pbsbc01h3:~# rm -rf /var/log/journal/
root@pbsbc01h3:~# systemctl start systemd-journald

root@pbsbc01h3:~# df -h /var/log/
Filesystem      Size  Used Avail Use% Mounted on
/dev/zram0      124M  428K  115M   1% /var/log

root@pbsbc01h3:~# ls -la /var/log/journal/
ls: cannot access '/var/log/journal/': No such file or directory

root@pbsbc01h3:~# ls -la /run/log/journal/
total 0
drwxr-sr-x+ 3 root systemd-journal 60 May 25 14:23 .
drwxr-xr-x  3 root root            60 May 25 14:23 ..
drwxr-s---+ 2 root systemd-journal 80 May 25 14:23 0dcde7aa16b74be582748e1f014594f3

root@pbsbc01h3:~# du -sh /run/log/journal/
16M     /run/log/journal/

6.2 修复前后对比

检查项修复前修复后状态
/var/log 占用119MB (100%)428KB (1%)✅ 完美
/var/log/journal/119MB 磁盘日志不存在✅ 已删除
/run/log/journal/16MB 内存日志✅ 正常工作
zram 使用率100%1%✅ 已释放

6.3 警告说明

停止 journald 时的警告是正常的

Warning: Stopping systemd-journald.service, but it can still be activated by:
  systemd-journald-dev-log.socket

这表示 journald 的 socket 接口仍在监听,但服务已停止。执行 rm -rf 后再启动,完全不影响功能。

七、关于 --show-config 不支持的处理

旧版本 systemd 不支持 --show-config 参数:

journalctl --show-config | grep -i storage
# journalctl: unrecognized option '--show-config'

替代验证方法:

# 方法1:查看配置文件
grep -E "^Storage|^Runtime" /etc/systemd/journald.conf

# 方法2:使用 systemd-analyze(如果支持)
systemd-analyze cat-config systemd-journald.conf | grep -E "^Storage|^Runtime"

# 方法3:验证 volatile 模式是否生效
ls -la /run/log/journal/ && echo "✅ 内存模式正常"

八、最终配置总结

8.1 journald 配置 (/etc/systemd/journald.conf)

[Journal]
Storage=volatile          # 只存内存,不写磁盘
RuntimeMaxUse=40M         # 内存上限 40MB
Compress=no               # 不压缩,省 CPU
ForwardToSyslog=no        # 不转发到 rsyslog
RateLimitIntervalSec=10s  # 防刷屏
RateLimitBurst=200

8.2 rsyslog 配置 (/etc/rsyslog.conf)

# 只记录认证日志和内核紧急日志
auth,authpriv.*            /var/log/auth.log
kern.crit;kern.emerg       /var/log/kern.crit
*.emerg                    :omusrmsg:*
*.*                        stop    # 丢弃所有其他日志

8.3 关键操作总结

  1. 停止 journaldsystemctl stop systemd-journald
  2. 删除磁盘日志目录rm -rf /var/log/journal/ ⭐ 关键步骤
  3. 重启 journaldsystemctl start systemd-journald
  4. 验证df -h /var/log/

九、日常维护建议

9.1 监控命令

# 实时监控 /var/log 目录大小
watch -n 60 'df -h /var/log/ && echo "---" && du -sh /run/log/journal/'

# 查看内存日志占用
du -sh /run/log/journal/

# 检查磁盘日志是否重建
ls -la /var/log/journal/

9.2 定期清理 rsyslog 日志(可选)

# 每月清理一次
sudo truncate -s 0 /var/log/{auth.log,daemon.log,syslog,messages,kern.log} 2>/dev/null

9.3 查看日志

# 查看本次启动的所有日志(内存中)
journalctl -b

# 查看错误级别日志
journalctl -p err -b

# 实时跟踪
journalctl -f

十、注意事项

  1. Storage=volatile 的陷阱:如果 /var/log/journal/ 目录已存在,journald 会继续使用磁盘,而不是切换到内存。必须先删除该目录。
  2. 重启后日志丢失:volatile 模式下,重启后所有历史日志都会丢失,这是正常行为。
  3. 内存占用:日志占用内存(当前 16MB,上限 40MB),对 1GB 内存影响很小(<4%)。
  4. 警告信息可忽略:停止 journald 时的 socket 警告是正常的,不影响功能。

十一、验证清单

  • [x] /var/log/journal/ 目录已删除
  • [x] /run/log/journal/ 目录存在且有内容
  • [x] /var/log 占用从 119MB 降到 428KB
  • [x] zram 使用率从 100% 降到 1%
  • [x] journald 正常记录日志(内存中)
  • [x] rsyslog 只记录 auth.log(约 50KB)
  • [x] 系统可正常写入日志,不会爆满

十二、问题解决确认

每天中午12点 /var/log 满的问题已彻底解决!

  • ✅ journald 日志全部在内存(16MB,上限40MB)
  • ✅ 磁盘日志目录已被删除且不会重建
  • ✅ zram 占用仅 428KB,剩余 115MB 可用
  • ✅ 磁盘 IO 显著降低,SD 卡寿命延长
  • ✅ 系统日志功能正常工作

文档版本:2.0
最后更新:2026-05-25
适用环境:Debian/Ubuntu 开发板,1核1G,zram 挂载 /var/log

标签: none

添加新评论