为什么“journalctl --disk-usage”和“journalctl | wc”对应得不好?

为什么“journalctl --disk-usage”和“journalctl | wc”对应得不好?

长话短说为什么日志存储了大约 770 MiB,而显示日志只产生 90MiB 的数据?

#更新# 我做了一个journalctl -a -o verbose,至少产生了大约 530MiB,但小于期刊在磁盘上使用的 770MiB。无论如何,我预计磁盘上的日志会以某种方式压缩,并且应该小于 530MiB,而不是更大。到底是怎么回事?

#更新2#

似乎journald倾向于创建大部分空的日志文件。

$> cat [email protected]~ | wc -c
8388608
#> cat [email protected]~ | sed 's/\x00//g' | wc -c
47181

这可能就是 @Mioriin 的评论所暗示的。有什么原因导致journald 保存的日志文件有8MiB 但几乎为空?

带背景的长版

/var/log我的系统非常健谈,有 linux 内核 dmesg 输出、gnome DE 等 -通过我遗憾地使用的系统记录器填充我的目录journald(仍然在标准的 systemd arch linux 上)。

我查看了一下du -hs /var/log,发现大约 2GiB,其中大部分是journald期刊。我删除了超过 90 天的数据journalctl --vacuum-time=90d,可惜牺牲了超过 3 个月的日志,将用于journald日志的磁盘空间减少到只有大约 770MiB,如通过检查

$> journalctl --disk-usage 
Archived and active journals take up 768.0M in the file system.

这太棒了。然而,在我的 arch Linux 机器上 90 天的 770MiB 数据似乎相当多,所以我尝试调查一下 770MiB 的用途。我做了恕我直言的第一个逻辑步骤来测量日志输出的初始大小

$> journalctl | wc
584467 7662317 90227741

并仔细检查是否

$ journalctl | dd of=/dev/null iflag=fullblock bs=1M
86+1 records in
86+1 records out
90244229 bytes (90 MB, 86 MiB) copied, 9.21893 s, 9.8 MB/s

表明由于某种原因,阅读“二进制因为节省空间” journald纯文本不会产生 < 770MiB 的数据,而只有 90MiB。

现在我的问题是为什么这两个数字不匹配?我心爱的人怎么可能journald最终使用 770MiB 来存储 90MiB 的数据?

除了“测量和对结果感到困惑”之外,我还做了什么来帮助自己?

我浏览了冗长的内容man journactl,但显然对它提供的相当复杂的细节感到不知所措,但找不到任何暗示可能导致二进制压缩期刊数据使用比二进制压缩期刊数据更多的空间这一反直觉的事情。实际纯文本复制日志。

我想应该有一个“简单”的解释。

相关内容