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