解决journal日志导致服务器磁盘满

HB 网络电脑 2023-08-19

背景
ubuntu 18.04服务器磁盘突然100%,一查/var/log/journal目录占用太大。
查看垃圾文件的方法
未清理前发现硬盘根分区空间告急,用 du -t 100M /var 或 journalctl --disk-usage 命令查看,发现/var/log/journal日志文件占用了近3G空间,每个日志文件体积高达8-128M,这些日志文件记录了很长时间以来的systemd情况,毫无价值,用journalctl --vacuum-size=10M命令将其清理之后,腾出了2.7G的空间。用df命令一查,/根分区果然宽敞了很多。
查看某个目录的文件大小并排序(单位为MB)

du -hm --max-depth=1 /var/ | sort -n

# du -hm --max-depth=1 /var/ | sort -n
1       /var/adm
1       /var/crash
1       /var/db
1       /var/empty
1       /var/games
1       /var/gopher
1       /var/kerberos
1       /var/local
1       /var/nis
1       /var/opt
1       /var/preserve
1       /var/spool
1       /var/tmp
1       /var/yp
131     /var/www
198     /var/lib
486     /var/cache
3695    /var/log
8513    /var/

查看 /var/log/journal/ 日志目录

#ll /var/log/journal/
total 12
drwxr-sr-x+ 3 root systemd-journal 4096 Mar 28  2023 ./
drwxrwxr-x  5 root syslog          4096 Dec 19 10:53 ../
drwxr-sr-x+ 2 root systemd-journal 4096 Dec 17 11:17 74a2fab0b6b04f4d98b162c1f771e925/

清理
要清理 journal 日志,可以使用以下步骤:
运行以下命令来查看 journal 日志的使用情况:

journalctl --disk-usage

这将显示 journal 日志的当前使用情况,包括占用的磁盘空间和日志条目数量。直接清空 /var/log/journal 文件

1、用echo命令,将空字符串内容重定向到指定文件中

echo "" > system.journal

2、直接删除 /var/log/journal/ 目录下的日志文件

rm -rf /var/log/journal/74a2fab0b6b04f4d98b162c1f771e925

说明:此方法只会清空一次,一段时间后还要再次手动清空很麻烦,这里可以用以下命令让journalctl 自动维护空间。
3、、journalctl 命令自动维护文件大小
1)只保留近一周的日志

sudo journalctl --vacuum-time=1w

2)清理超过100MB大小的日志

sudo journalctl --vacuum-size=100

3) 清理特定时间范围前的日志(本例清除3天前的日志):

sudo journalctl --vacuum-time=3d

问题与分析解决
执行 journalctl 命令时报错:Error was encountered while opening journal files: Input/output error

# journalctl --vacuum-time=1w
Error was encountered while opening journal files: Input/output error

问题分析:日志文件损坏
解决方法:删除之前的日志,并重启 journalctl 服务
mv journal/74a2fab0b6b04f4d98b162c1f771e925 journal/74a2fab0b6b04f4d98b162c1f771e925_bk_20230725

systemctl restart systemd-journald.service

然后,再执行 journalctl 限制日志的命令:

# journalctl --vacuum-time=1w
Vacuuming done, freed 0B of archived journals on disk.
# journalctl --vacuum-size=10M
Vacuuming done, freed 0B of archived journals on disk.

自动清理

$ sudo vi /etc/systemd/journald.conf
# 增加以下配置
[Journal]
# 设置最大日志大小,默认为系统磁盘空间的 10%
SystemMaxUse=50M

# 设置日志保留的最长时间,默认为 4 weeks
MaxRetentionSec=1week

# 设置日志保留的最短时间,默认为 1 day
MinRetentionSec=1day

# 重启服务
sudo systemctl restart systemd-journald

PREV
怎样识别机械硬盘是叠瓦盘还是垂直盘
NEXT
Windows部署frp内网穿透,通过互联网访问自己家里的电脑

评论(0)

发布评论