Вопрос или проблема
У меня Arch Linux, который не работает на устройстве. У устройства нет экрана, оно не реагирует на сеть. Я беру SD-карту, вставляю ее в Ubuntu, вижу свежий system.journal и… Как посмотреть, что внутри?
Из документации Arch Linux я знаю, что могу сделать:
strings /mnt/arch/var/log/journal/.../system.journal | grep -i message
Но это действительно базовый способ. Вопрос:
Существует ли более удобный способ просмотреть system.journal с другой системы, кроме как использовать strings? Могу ли я, например, указать файл для чтения в journalctl?
Во-первых, возможность использовать strings
возникает в связи с тем, что journald не сжимает маленькие (менее 64KiB в текущей реализации) поля. Это не поддерживаемый способ чтения журналов, и в archwiki это действительно должно быть отмечено как таковое. Это скорее метод последней надежды для восстановления.
Теперь к вопросу. Из journalctl(1):
-D DIR, –directory=DIR
Принимает путь к директории в качестве аргумента. Если указано, journalctl будет работать с указанной директорией журнала DIR вместо путей по умолчанию для журнала во время выполнения и системного журнала.
Таким образом, предполагая, что корневая файловая система сломанного устройства смонтирована по пути $DEST
, используйте journalctl -D $DEST/var/log/journal
, чтобы просмотреть его системный журнал.
Для полноты: чтобы просмотреть конкретный файл, используйте journalctl --file
, например, journalctl --file /var/log/journal/$(cat /etc/machine-id)/system.journal
. Однако учтите, что файлы журнала периодически вращаются, поэтому в зависимости от вашего случая использования этот способ может не подойти для просмотра полных журналов.
На дистрибутивах без systemd вы можете
docker run -it -v <directory_with_journal>:<journal_within_rootfs> centos/systemd /bin/bash
потом вы просто
journalctl -D <journal_within_rootfs>
Ответ или решение
Чтобы эффективно просмотреть файлы журнала systemd на системе, которая не загружается, и используя другую систему (например, Ubuntu), необходимо использовать инструменты, предоставляемые systemd, такие как journalctl
. Рассмотрим детальный процесс, который позволит вам получить необходимые данные из файлов журнала systemd.
1. Монтирование файловой системы
Первоначально вам нужно будет смонтировать SD-карту вашей системы Arch Linux на рабочем компьютере под Ubuntu. Для этого выполните следующие шаги:
-
Определите, каким образом ваша SD-карта отображается в системе, используя команду:
lsblk
Найдите соответствующий раздел, обычно это что-то вроде
/dev/sdX1
. -
Создайте директорию для монтирования:
mkdir /mnt/arch
-
Смонтируйте раздел SD-карты:
sudo mount /dev/sdX1 /mnt/arch
2. Просмотр файлов журнала с помощью journalctl
После успешного монтирования вы сможете использовать journalctl
, чтобы просматривать журнал с другой системы:
-
Если журналы находятся в каталоге, который по умолчанию используется для хранения файлов журналов (
/var/log/journal
), вы можете использовать команду:journalctl -D /mnt/arch/var/log/journal
-
Чтобы просмотреть конкретный файл журнала, используйте команду:
journalctl --file /mnt/arch/var/log/journal/<machine-id>/system.journal
Где
<machine-id>
можно узнать, например, с помощью команды:cat /mnt/arch/etc/machine-id
3. Учтите ротацию журнальных файлов
Имейте в виду, что журналы могут ротационироваться, что может сделать невозможным просмотр полного журнала из одного файла. Убедитесь, что вы рассматриваете все файлы, если они существуют. Вы можете использовать journalctl
для просмотра всех старых файлов журналов в указанном каталоге.
4. Использование Docker для работы с журналами в другом окружении
Если вам нужно использовать journalctl
в окружении, где systemd не установлен (например, в дистрибутивах Linux, не использующих systemd), это можно сделать через Docker:
-
Запустите контейнер Docker с CentOS с подключенной директории, содержащей журналы:
docker run -it -v /path/to/directory_with_journal:/journal centos/systemd /bin/bash
-
Затем выполните команду для просмотра журналов:
journalctl -D /journal
Заключение
Используя вышеописанные методы, вы сможете эффективно анализировать журналы systemd, даже если оборудование не доступно для прямого взаимодействия. journalctl
предоставляет удобные способы фильтрации и анализа данных, что делает его мощным инструментом для диагностики проблем на системах, использующих systemd.