Когда я делаю journalctl --disk-usage
это говорит что-то о 300 МБ размер файлов журнала, но когда я смотрю на фактический текст с journalctl | wc -c
это что-то о 28 МБ. Что ж, у journald есть сжатие, и даже с учетом метаданных, таких как временная метка, uid, хэш сообщения и тому подобное, мне кажется нелепой тратой дискового пространства.
Может кто-нибудь сказать мне, почему файлы журнала такие большие по сравнению с фактическим текстом внутри?
На то есть две причины. Во-первых, как упомянул @Mella, существует разница между текущим журналом и всеми журналами.
Во-вторых, как описано в man journalctl
, есть несколько форматов вывода. Вы измеряли размер самого компактного / наименее детализированного. Чтобы увидеть максимальное количество данных в журнале systemd, используйте:
journactl --output=verbose
В моем случае компактный вывод журнала возвращает 32 Мбайт данных, а 128 Мбайт возвращаются с --output=verbose
и 152M находятся с journalctl --disk-usage
, охватывающая как активные, так и архивные журналы.
Видеть man journald.conf
чтобы узнать, как ограничить объем дискового пространства journald
использует, если вы обеспокоены.
Как указано вверх по течению и, следовательно, известно разработчикам journald, что используемый в двоичном формате журнал не очень хорош (пока?).
Также есть вариант в /etc/systemd/journald.conf
названный Compress=yes
, который может быть неактивен в вашей системе, так как фактически отсутствует сжатие.
Хотя в принципе верно, что journald различает активный и в архиве журналы журнала, это вводящий в заблуждение ответ на другие ответы, как в man journalctl
в нем недвусмысленно говорится:
Выходные данные чередуются из всех доступных файлов журнала, независимо от того, вращаются они или в настоящее время записываются, и независимо от того, принадлежат ли они самой системе или являются доступными пользовательскими журналами.
Следовательно, другой ответ здесь вводит в заблуждение.
"проблемы с фрагментацией / распределением файлов"
На моей коробке journalctl --version == "systemd 239[...]"
файлы журнала, содержащие данные, существуют в размерах, кратных 8 МБ. Как следствие, мой файл системного журнала будет иметь размер 8 МБ, даже если в нем действительно хранится лишь небольшая часть (например, 56 КБ) данных.
«антикоррупционная проблема» По словам одного из разработчиков Poettering journald
и systemd
в случае, если считается, что журнал поврежден journald
, он не будет «исправлен», а вместо этого оставлен как есть, чтобы предотвратить дальнейшие проблемы. (видеть https://bugs.freedesktop.org/show_bug.cgi?id=64116#c3)
Это, конечно, означает, что существует большая вероятность, что несжатые, почти пустые журнальные двоичные файлы журнала будут сидеть в вашем журнале var, что делает его намного больше, чем разумная альтернатива с открытым текстом.
journalctl
без параметров (выход которых вы измеряете wc -c
) отображает только записи журнала в активном журнале (я не совсем уверен, что вызывает текучесть кадров). journalctl --disk-usage
отображает пространство, используемое архивными журналами, а также активным журналом.