Что такое журнал systemd и где он хранится
В современных Ubuntu и Debian системные сообщения собирает служба systemd-journald. В отличие от обычных текстовых логов, журнал хранится в двоичном формате, а читают его командой journalctl. Сюда попадают сообщения ядра, служб, входа в систему и многих приложений. Если на диске внезапно стало меньше места, журнал стоит проверить среди прочего.
Где лежат данные, зависит от настроек. Постоянное хранение идёт в каталог /var/log/journal, а временное — в /run/log/journal, который находится в памяти и очищается при перезагрузке. Включено ли постоянное хранение по умолчанию, зависит от дистрибутива и версии: на одних установках каталог /var/log/journal уже есть, на других его нужно создавать самостоятельно или менять параметр Storage. Проверить просто: посмотрите, существует ли этот каталог.
По документации systemd, если лимит не задан, журнал может занимать до десяти процентов файловой системы, но не более четырёх гигабайт. Для небольшого домашнего диска это бывает много, поэтому ограничение имеет смысл задать.
Сведения о журнале пригодятся не только при нехватке места. Когда служба ведёт себя странно, вывод journalctl для неё часто помогает найти причину. Если журнал хранится только в памяти, после перезагрузки истории предыдущего запуска не будет, и найти причину редкого сбоя станет сложнее. Поэтому настройка хранения и лимита — это выбор между экономией места и возможностью разбирать прошлые события.
Как посмотреть, сколько места занимает журнал
Прямая команда — journalctl --disk-usage. Она печатает суммарный объём архивных и действующих файлов журнала. Для детального взгляда выполните du -sh /var/log/journal: так вы увидите объём каталога с постоянными данными.
Полезные команды для чтения журнала, которые пригодятся при поиске причины разрастания:
- journalctl -b — сообщения с текущей загрузки;
- journalctl -b -1 — предыдущая загрузка, если журнал хранится постоянно;
- journalctl -u имя.service — сообщения только одной службы;
- journalctl -p err -b — только ошибки за текущую загрузку;
- journalctl --since "2 hours ago" — события за последние два часа.
Если журнал растёт быстро, нередко причина в одной службе или драйвере, который многократно пишет одно и то же сообщение. Команда journalctl -p err -b поможет найти источник: посмотрите, какие записи повторяются чаще других. Простая очистка лечит симптом, но не причину: пока источник сообщений работает, журнал снова заполнится.
Если команда journalctl выводит слишком много строк, ограничьте вывод: ключ -n 50 покажет последние пятьдесят записей, а ключ -f будет печатать новые сообщения по мере появления, как tail -f. Это удобно, когда вы воспроизводите проблему и хотите сразу видеть реакцию службы. Выход из такого режима выполняется сочетанием Ctrl и C.
Разовая очистка: vacuum по размеру, времени и числу файлов
Для быстрого освобождения места у journalctl есть три ключа очистки. Они удаляют только архивные файлы журнала; действующий файл остаётся.
| Команда | Результат |
|---|---|
| sudo journalctl --vacuum-size=200M | оставить архивы не больше указанного суммарного размера |
| sudo journalctl --vacuum-time=2weeks | удалить архивные файлы со записями старше двух недель |
| sudo journalctl --vacuum-files=5 | оставить не более пяти архивных файлов |
Значения подставляйте свои. Какой предел выбрать, зависит от того, насколько глубоко вы хотите заглядывать в историю. Удалённые записи восстановить нельзя, поэтому если они нужны для разбора сбоя, сначала сохраните их в файл (например, journalctl -b > файл.txt). После выполнения команда пишет, сколько файлов удалила и сколько места освободила; затем проверьте результат через journalctl --disk-usage.
Не удаляйте файлы из /var/log/journal вручную через rm, пока служба работает: вы рискуете повредить текущие данные. Если журнал всё же повреждён, проверить его целостность можно командой journalctl --verify, а повреждённые архивы journald обычно переименовывает сам. Разовая очистка обычно не мешает работе системы, но историю старше выбранной границы вернуть нельзя.
Постоянный лимит через journald.conf
Чтобы журнал не разрастался снова, задайте лимит в настройках. Основной файл — /etc/systemd/journald.conf, но надёжнее создать отдельный файл в каталоге /etc/systemd/journald.conf.d/ с расширением .conf: он не конфликтует с обновлениями пакета. Внутри нужен раздел [Journal] и параметры.
Наиболее распространённые параметры:
- SystemMaxUse — предел для постоянного журнала в /var/log/journal, например 200M;
- RuntimeMaxUse — предел для временного журнала в /run/log/journal;
- SystemMaxFileSize — размер одного файла журнала;
- MaxRetentionSec — максимальный срок хранения записей;
- Storage — режим хранения: persistent, volatile, auto или none.
После изменения перезапустите службу командой sudo systemctl restart systemd-journald. Новый предел начнёт действовать, а размер журнала сократится при очередной ротации или очистке. Управление службами в целом описано на странице про systemctl.
Коротко о выборе значений. Слишком маленький лимит сохраняет мало истории, и при поиске причины давнего сбоя записей уже не окажется. Слишком большой лимит сводит ограничение на нет. Значение можно подбирать по мере наблюдений за размером журнала.
Когда журнал лучше не трогать
Бывают ситуации, когда очищать журнал не стоит. Если вы расследуете сбой, зависание или перезагрузку, записи именно этого периода нужны. Сначала сохраните интересующий фрагмент в файл, например командой journalctl -b -1 > ~/boot-prev.txt, и только потом чистите. Файл можно показать на форуме или специалисту.
Отдельный случай — отключение журнала целиком через Storage=none. Технически это возможно, но тогда при любой проблеме диагностировать систему станет значительно труднее, и такой шаг оправдан в редких случаях, например на устройствах с очень малым объёмом памяти.
Наконец, не путайте журнал systemd с текстовыми файлами в /var/log, например с логами отдельных программ. Ими занимается ротация через logrotate, и очистка журнала их не затрагивает. Чтобы увидеть общую картину заполнения диска, пригодится df -h и du, о которых рассказано отдельно. Там же объяснено, как спуститься по каталогам к самому крупному.