Как можно сделать так, чтобы Plymouth отображал сообщения FSCK во время загрузки системы?

Вопрос или проблема

Я создал пользовательскую тему Plymouth (на основе MIB Ossigeno), настроенную для обработки сообщений fsck, поступающих от systemd-fsckd, реализовав протокол связи, сообщение которого имеет следующий формат:

fsckd:<num_devices>:<progress>:<string> 

Согласно документации (8-systemd-fsckd.service)

Когда я запустил его в тестовом режиме (“после загрузки”), используя команду:

plymouthd; plymouth --show-splash ; for ((I=0; I<10; I++)); do plymouth --update=fsck:sda1:$I ; sleep 1; done; plymouth quit

С специальными сообщениями FSCK, plymouth показывает желаемые сообщения, такие как “Проверка диска 1 из 1 (завершено 2%)”. См.: Plymouth.

введите описание изображения здесь
Пока что все хорошо.

Но когда я перезагружаю систему, сообщения fsck не отображаются на экране загрузки. Но если я переключаюсь на консоль, нажав клавишу Esc, сообщения о прогрессе fsck видны.

введите описание изображения здесь

Чтобы заставить fsck запускаться при загрузке, я поочередно использовал tune2fs и grub (GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fsck.mode=force fsck.repair=yes"), чтобы узнать, есть ли какие-либо последствия.

По какой-то причине связь между fsck и Plymouth не работает или работает не очень хорошо. Стандартная тема, futureprototype, также не работает. Думаю, проблема в systemd-fsckd. Как определить, были ли выполнены задачи systemd-fsckd при загрузке? Существует ли отчет или статус, показывающий, были ли обнаружены какие-либо проблемы?

Я смотрю в /run/initramfs/fsck.log (это выглядит хорошо):

~# cat /run/initramfs/fsck.log
Лог fsck -C -f -y -T -t ext4 /dev/sda1 
Ср Фев 28 15:26:27 2024

e2fsck 1.47.0 (5-Фев-2023)
Проход 1: Проверка иноидов, блоков и размеров
Проход 2: Проверка структуры каталога
Проход 3: Проверка связности каталога
Проход 4: Проверка ссылок
Проход 5: Проверка сводной информации по группам
/dev/sda1: 212266/593344 файлов (0.2% неконтегированных), 1705537/2371072 блоков

Ср Фев 28 15:26:30 2024

Журнал…

~# journalctl -u systemd-fsck*
-- Загрузка f8b976dfd857400085057901577c56f9 --
фев 28 10:40:53 debian12 systemd[1]: Запущена служба systemd-fsckd.service - демон проверки файловой системы для отчета о статусе.
фев 28 10:41:23 debian12 systemd[1]: systemd-fsckd.service: успешно деактивирована.
фев 28 10:51:02 debian12 systemd[1]: Запущена служба systemd-fsckd.service - демон проверки файловой системы для отчета о статусе.
фев 28 10:51:32 debian12 systemd[1]: systemd-fsckd.service: успешно деактивирована

И systemctl

~# systemctl status systemd-fsckd.socket
● systemd-fsckd.socket - сокет для связи fsck с fsckd
     Загружено: загружено (/lib/systemd/system/systemd-fsckd.socket; статично)
     Активно: активно (ожидание) с Ср 2024-02-28 15:26:31 -03; 16 минут назад
   Триггеры: ● systemd-fsckd.service
       Документы: man:systemd-fsckd.service(8)
             man:[email protected](8)
             man:systemd-fsck-root.service(8)
     Прослушивание: /run/systemd/fsck.progress (поток)
     CGroup: /system.slice/systemd-fsckd.socket

~# systemctl status systemd-fsckd.service
○ systemd-fsckd.service - демон проверки файловой системы для отчета о статусе
     Загружено: загружено (/lib/systemd/system/systemd-fsckd.service; статично)
     Активно: неактивно (мёртв)
Триггер: ● systemd-fsckd.socket
       Документы: man:systemd-fsckd.service(8)

Цель состоит в том, чтобы уведомить пользователя о том, что процесс загрузки задерживается проверкой диска fsck и чтобы увидеть его прогресс. Я исчерпал все свои ресурсы и не нашел ничего в интернете. В общем, всё, что я нахожу, касается скрытия сообщений загрузки.

~# more /etc/debian_version
10.13
~# uname -a
Linux debian 4.19.0-26-686-pae #1 SMP Debian 4.19.304-1 (2024-01-09) i686 GNU/Linux

По причинам, которые не имеют значения, разработка происходит на ОС Debian 10, хотя я также пытался с Debian 12 с тем же результатом.

PD: Деталь, которую можно считать важной: тесты с Debian 10 и Debian 12 проводились на виртуальных машинах в Virtual Box.

Еще тест:

Случай первый: Debian 10 на Virtual Box. Сообщения fsck не появляются, и журнал показывает следующее:

root@debian:~# systemctl list-sockets | grep fsckd
/run/systemd/fsck.progress   systemd-fsckd.socket            systemd-fsckd.service

root@debian:~# journalctl -b /usr/lib/systemd/systemd-fsck
-- Нет записей --

root@debian:~# journalctl -b /usr/lib/systemd/systemd-fsckd
-- Нет записей --

root@debian:~# journalctl --boot | grep systemd-fsck*
мар 04 13:07:01 debian systemd[1]: Ожидание соединения с systemd-fsckd.socket - сокет для связи fsck с fsckd.
мар 04 13:07:01 debian systemd[1]: systemd-fsck-root.service - проверка файловой системы на корневом устройстве была **пропущена** из-за невыполненного условия (**ConditionPathExists=!/run/initramfs/fsck-root**).

root@debian:~# cat /run/initramfs/fsck.log
Лог fsck -C -a -T -t ext4 /dev/sda1 
Пн Мар  4 13:06:59 2024
/dev/sda1: clean, 212351/593344 файлов, 1708897/2371072 блоков
Пн Мар  4 13:06:59 202

Случай второй: Debian 10 на физическом ПК (amd64). В этом случае сообщения видны, но только в конце процесса и на очень короткое время. Ничего не отображается во время выполнения fsck.

root@Dell:~# systemctl list-sockets | grep fsckd
/run/systemd/fsck.progress      systemd-fsckd.socket            systemd-fsckd.service

root@Dell:~# journalctl -b /usr/lib/systemd/systemd-fsck
-- Журналы начинаются с Пн 2024-03-04 15:58:16 -03, заканчиваются в Пн 2024-03-04 19:25:01 -03. --
мар 04 15:58:21 Dell systemd-fsck[420]: e2fsck 1.44.5 (15-Дек-2018)
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 1: Проверка иноидов, блоков и размеров
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 2: Проверка структуры каталога
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 3: Проверка связности каталога
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 4: Проверка ссылок
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 5: Проверка сводной информации по группам
мар 04 15:58:22 Dell systemd-fsck[420]: /dev/sda1: 1034/69360 файлов (0.7% неконтегированных)

root@Dell:~# journalctl -b /usr/lib/systemd/systemd-fsckd
-- Журналы начинаются с Пн 2024-03-04 15:58:16 -03, заканчиваются в Пн 2024-03-04 19:25:01 -03. --
-- Нет записей --

root@Dell:~# journalctl --boot | grep systemd-fsck*
мар 04 15:58:21 Dell systemd-fsck[420]: e2fsck 1.44.5 (15-Дек-2018)
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 1: Проверка иноидов, блоков и размеров
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 2: Проверка структуры каталога
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 3: Проверка связности каталога
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 4: Проверка ссылок
мар 04 15:58:21 Dell systemd-fsck[420]: Проход 5: Проверка сводной информации по группам
мар 04 15:58:22 Dell systemd-fsck[420]: /dev/sda1: 1034/69360 файлов (0.7% неконтегированных), 189933/276480 блоков
мар 04 15:59:01 Dell systemd[1]: systemd-fsckd.service: успешно завершено.

root@Dell:~# cat /run/initramfs/fsck.log
Лог fsck -C -f -y -T -t ext4 /dev/sda2
Пн Мар  4 18:57:36 2024

e2fsck 1.44.5 (15-Дек-2018)
Проход 1: Проверка иноидов, блоков и размеров
Проход 2: Проверка структуры каталога
Проход 3: Проверка связности каталога
Проход 4: Проверка ссылок
Проход 5: Проверка сводной информации по группам
/dev/sda2: 673194/9551872 файлов (0.8% неконтегированных), 29651430/38200576 блоков

Пн Мар  4 18:58:11 2024
----------------

Случай третий: Debian 10 на физическом ПК (amd64) с несколькими записями в меню grub (Debian и другие загрузочные разделы с Windows).

root@5VQU7SN:~# systemctl list-sockets | grep fsckd
/run/systemd/fsck.progress      systemd-fsckd.socket            systemd-fsckd.service

root@5VQU7SN:~# journalctl -b /usr/lib/systemd/systemd-fsck
-- Журналы начинаются с Пн 2024-03-04 15:38:25 -03, заканчиваются в Пн 2024-03-04 20:39:47 -03. --
-- Нет записей --

root@5VQU7SN:~# journalctl -b /usr/lib/systemd/systemd-fsckd
-- Журналы начинаются с Пн 2024-03-04 15:38:25 -03, заканчиваются в Пн 2024-03-04 20:39:47 -03. --
-- Нет записей --

root@5VQU7SN:~# journalctl --boot | grep systemd-fsck*
-- Нет записей --

root@5VQU7SN:~# cat /run/initramfs/fsck.log
Лог fsck -C -f -y -T -t ext4 /dev/sda6 
Пн Мар  4 18:37:59 2024

e2fsck 1.44.5 (15-Дек-2018)
/dev/sda6: восстановление журнала
Очистка сиротского иноида 15992282 (uid=1000, gid=1000, mode=0100644, size=32768)
Очистка сиротского иноида 15991323 (uid=1000, gid=1000, mode=0100600, size=460)
Очистка сиротского иноида 15990858 (uid=1000, gid=1000, mode=0100644, size=4132)
Очистка сиротского иноида 15990852 (uid=1000, gid=1000, mode=0100600, size=131072)
Очистка сиротского иноида 15990840 (uid=1000, gid=1000, mode=0100644, size=4132)
Очистка сиротского иноида 15990827 (uid=1000, gid=1000, mode=0100644, size=4132)
Очистка сиротского иноида 15990826 (uid=1000, gid=1000, mode=0100644, size=4132)
Очистка сиротского иноида 15990859 (uid=1000, gid=1000, mode=0100644, size=4132)
Проход 1: Проверка иноидов, блоков и размеров
Проход 2: Проверка структуры каталога
Проход 3: Проверка связности каталога
Проход 4: Проверка ссылок
Проход 5: Проверка сводной информации по группам
Количество свободных блоков неверно (112010854, подсчитано=112010689).
Исправить? да

Количество свободных иноидов неверно (28961618, подсчитано=28961585).
Исправить? да

/dev/sda6: ***** ФАЙЛОВАЯ СИСТЕМА БЫЛА ИЗМЕНЕНА *****
/dev/sda6: 292047/29253632 файлов (0.3% неконтегированных), 4981311/116992000 блоков
fsck завершился с кодом состояния 1

Пн Мар  4 18:38:19 2024
----------------

Эта проблема становится довольно сложной, и я не вижу, как двигаться дальше. Я надеюсь, что есть какие-то эксперты, которые могут помочь мне в этом вопросе.

ОБНОВЛЕНИЕ СТАТУСА:

Я нашел, что стандартная тема Plymouth работала на другом ПК, и когда я установил свою тему, она тоже заработала. Я потратил дни на проверку конфигураций grub, fsck и plymouth, но не смог найти отличий. Пока я не заметил, что на том ПК каталог /boot был смонтирован на другой раздел, чем корень. Я установил Debian с нуля на физическом и виртуальном ПК, с отдельным /boot. И это сработало!!!
Может ли это быть ошибка systemd-fsck?

Когда я установил Debian, как на физическом ПК, так и на виртуальной машине, с выделенным разделом для /boot, сообщения fsck наконец появились во время процесса загрузки в Plymouth. Мне ясно, что это связано с тем, как fsck работает с systemd и как он проверяет корневой раздел во время загрузки.

.

Ответ или решение

Для того чтобы Plymouth отображал сообщения FSCK во время загрузки системы, необходимо учитывать ряд факторов, связанных с конфигурацией системы и взаимодействием между различными компонентами, такими как systemd, fsck и сам Plymouth. Рассмотрим необходимые шаги и особенности настройки в детальной и структурированной форме.

1. Настройка конфигураций

  1. Обновление параметров загрузки в GRUB:
    Убедитесь, что в конфигурации загрузчика GRUB указаны необходимые параметры. Вам нужно дополнить строку GRUB_CMDLINE_LINUX_DEFAULT следующими параметрами:

    quiet splash fsck.mode=force fsck.repair=yes

    После внесения изменений не забудьте обновить конфигурацию GRUB с помощью команды:

    sudo update-grub
  2. Проверка настроек Plymouth:
    Убедитесь, что ваш кастомный tema Plymouth корректно настроен для обработки сообщений от systemd-fsckd. Важно, чтобы тема использовала правильный протокол для связи с systemd-fsckd, который имеет формат:

    fsckd:<num_devices>:<progress>:<string>

    В вашем случае, если в тестовом режиме всё работает корректно, это хороший признак, однако стоит удостовериться, что нет конфликтов в работе с системными файлами.

2. Проверка работы systemd-fsckd

  1. Статус службы:
    Проверьте, активирована ли служба systemd-fsckd. Используйте команды:

    systemctl status systemd-fsckd.service
    systemctl status systemd-fsckd.socket

    Убедитесь, что служба активна и что сокет также работает в нормальном режиме. Если служба отключена, это может быть одной из причин, по которой сообщения не отображаются.

  2. Логи и диагностические данные:
    Проверьте логи, связанные с systemd-fsck и systemd-fsckd, для выявления возможных ошибок при запуске. Это можно сделать с помощью:

    journalctl -u systemd-fsck*

    Понимание "причин" отключения служб поможет вам выявить проблемы и пути их решения.

3. Разделение разделов

  1. Отдельный раздел для /boot:
    Обратите внимание на то, что в вашем окончательном решении вы упомянули, что проблема исчезла после установки /boot на отдельный раздел. Это может указывать на несовместимость в конфигурации или влияние на работу системы из-за наличия общего раздела для загрузки и корневой файловой системы. Возможно, systemd-fsck не мог правильно взаимодействовать с корневым разделом и сообщениями fsck, что предопределяло отсутствие сообщений во время загрузки.

4. Итоговая проверка

  1. Тестирование конфигурации:
    После внесения всех изменений и настройки системы, выполните перезагрузку и тщательно отследите процесс загрузки. Наблюдайте за отрисовкой сообщения FSCK на Plymouth и проверьте, все ли работает корректно.

Необходимо помнить, что любые изменения в конфигурации может занять некоторое время, чтобы адаптироваться к системе. Если после всех шагов проблема сохраняется, стоит рассмотреть возможность обращения в сообщество разработчиков или изучение релиз-нотов новых версий Debian и системных служб, так как изменения могут повлиять на совместимость и функциональность.

Оцените материал
Добавить комментарий

Капча загружается...