Зачем настраивать journald
По умолчанию многие дистрибутивы Linux хранят журнал systemd в оперативной памяти. Это значит, что после перезагрузки вы теряете историю загрузки, крахи сервисов и сообщения ядра. Кроме того, без явных лимитов логи могут незаметно занять весь системный раздел, что приводит к зависанию системы. Правильная конфигурация systemd-journald решает обе проблемы: сохраняет важные записи на диск и строго контролирует потребление ресурсов.
Требования и подготовка
Перед началом убедитесь, что у вас есть доступ к учётной записи с правами sudo или root. Конфигурация универсальна для современных систем, использующих systemd. Проверьте текущий статус службы и путь хранения:
journalctl --disk-usage
systemctl status systemd-journald
Если команда --disk-usage показывает 0B или путь указывает на /run/log/journal, значит постоянная запись отключена и её нужно включить.
Шаг 1: Открытие конфигурационного файла
Основные параметры хранятся в /etc/systemd/journald.conf. Откройте файл в текстовом редакторе с повышенными привилегиями:
sudo nano /etc/systemd/journald.conf
Все активные настройки уже содержатся в секции [Journal]. Остальные строки начинаются с # и являются комментариями с описанием параметров. Вам не нужно переписывать файл — достаточно раскомментировать и изменить нужные строки.
Шаг 2: Включение постоянного хранения
Найдите директиву Storage и измените её значение на persistent. Это переключает режим хранения с временного на дисковый:
Storage=persistent
⚠️ Важно: После изменения этого параметра systemd автоматически создаст директорию
/var/log/journal/при следующем запуске службы. Убедитесь, что на корневом разделе достаточно свободного места.
Шаг 3: Ограничение размера и времени хранения
Чтобы журнал не разросся до критических значений, задайте жёсткие лимиты. Добавьте или раскомментируйте следующие параметры в той же секции [Journal]:
# Максимальный объём, который займут логи на диске
SystemMaxUse=1G
# Максимальный размер одного файла журнала
SystemMaxFileSize=100M
# Период хранения записей (в данном случае 4 недели)
MaxRetentionSec=4week
# Интервал синхронизации с диском в секундах
SyncIntervalSec=5m
Параметр SystemMaxUse гарантирует, что journald автоматически удалит самые старые файлы, как только общий размер превысит 1 ГБ. SyncIntervalSec предотвращает потерю данных при внезапном отключении питания, регулярно сбрасывая буфер на диск.
Шаг 4: Перезапуск службы
systemd не перечитывает конфигурационные файлы динамически. Примените изменения командой перезапуска:
sudo systemctl restart systemd-journald
Если служба не перезапустилась или упала с ошибкой, проверьте журнал самой службы для поиска синтаксических опечаток:
sudo journalctl -xeu systemd-journald.service
Убедитесь, что вы не допустили ошибок в именах директив и единицах измерения.
Проверка корректности настроек
Убедитесь, что логи теперь сохраняются в постоянном хранилище:
ls -la /var/log/journal/
Проверьте актуальный размер журнала:
journalctl --disk-usage
Вывод должен показать ненулевой объём, например Archived and active journals take up 256.0M in the file system. Запустите тестовую записи и найдите её:
logger "Тестовое сообщение FixPedia"
journalctl -n 5
Если ваше сообщение появилось в конце вывода, конфигурация работает штатно.
Решение типичных проблем
Служба не запускается после правок.
Чаще всего причина — некорректный формат значения. systemd строго проверяет единицы измерения (K, M, G, T для размера; sec, min, hour, week для времени). Восстановите оригинальный файл из резервной копии или пакета дистрибутива, если правка сломала внутренний парсер.
Логи всё ещё исчезают после перезагрузки.
Проверьте права владельца на директорию /var/log/journal/. Она должна принадлежать root:systemd-journal и иметь права 2775. Исправьте их командой:
sudo chown root:systemd-journal /var/log/journal/
sudo chmod 2775 /var/log/journal/
Диск быстро заполняется, несмотря на лимиты.
Убедитесь, что не запущены сторонние логгеры, дублирующие вывод journald, или приложения с агрессивным выводом в stdout/stderr. Временно очистите старые записи без удаления конфига:
sudo journalctl --vacuum-time=2weeks
sudo journalctl --vacuum-size=500M
Это мгновенно освободит место, после чего встроенная ротация продолжит работу в автоматическом режиме.