我在 journalctl 中遇到了问题,我在 journald.conf 中将其设置为最大使用 100M:
[Journal]
Compress=yes
SyncIntervalSec=5m
SystemMaxUse=100M
ForwardToSyslog=no
ForwardToKMsg=no
ForwardToConsole=no
ForwardToWall=yes
LineMax=48K
ReadKMsg=yes
由于某种原因,它只给我 2 天的日志。当我运行 journalctl --disk-usage 时,它显示:
$ sudo journalctl --disk-usage
Archived and active journals take up 106.0M in the file system.
但是,当我运行 journalctl | wc -c 时,它显示只有 7MB 的日志:
$ sudo journalctl | wc -c
7429593
为什么 journalctl 只提供了 7MB 的日志(2 天),而使用了 106MB?多余的空间用在哪儿了?
答案1
如果你检查输出已归档并且活动日志在文件系统中占用了 106.0M 的空间。意味着它也包括存档日志。检查以下位置,您将知道总日志的确切大小
# ls -lthr /run/log/journal/<id>/
total 544M
-rw-r-----+ 1 root systemd-journal 32M Jun 25 19:13 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jun 27 04:00 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jun 28 14:38 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jun 30 01:16 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 1 11:56 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 2 22:36 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 4 09:10 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 5 19:48 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 7 06:20 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 8 17:00 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 10 03:42 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 11 14:20 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 40M Jul 13 00:59 system@<some id>.journal
-rw-r-----+ 1 root systemd-journal 32M Jul 14 04:31 system.journal
答案2
默认 --output=short 不显示所有字段。包括每个条目的相当大的启动 ID 和时间戳。
--output=export 与磁盘格式并不完全相同,因为有很多文本带有 name=value。但是,作为序列化流,它更接近实际大小。
# journalctl --disk-usage
Archived and active journals take up 56.0M on disk.
# journalctl | wc -c
5420238
# journalctl -o export | wc -c
34683172
其余的我并不完全确定。日志文件格式规范提到所有内容都填充为 64 位对齐。可能数组和标签对象等元数据也占用空间。