Вопрос или проблема
Я создал пользовательскую тему 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. Настройка конфигураций
-
Обновление параметров загрузки в GRUB:
Убедитесь, что в конфигурации загрузчика GRUB указаны необходимые параметры. Вам нужно дополнить строкуGRUB_CMDLINE_LINUX_DEFAULT
следующими параметрами:quiet splash fsck.mode=force fsck.repair=yes
После внесения изменений не забудьте обновить конфигурацию GRUB с помощью команды:
sudo update-grub
-
Проверка настроек Plymouth:
Убедитесь, что ваш кастомный tema Plymouth корректно настроен для обработки сообщений отsystemd-fsckd
. Важно, чтобы тема использовала правильный протокол для связи сsystemd-fsckd
, который имеет формат:fsckd:<num_devices>:<progress>:<string>
В вашем случае, если в тестовом режиме всё работает корректно, это хороший признак, однако стоит удостовериться, что нет конфликтов в работе с системными файлами.
2. Проверка работы systemd-fsckd
-
Статус службы:
Проверьте, активирована ли службаsystemd-fsckd
. Используйте команды:systemctl status systemd-fsckd.service systemctl status systemd-fsckd.socket
Убедитесь, что служба активна и что сокет также работает в нормальном режиме. Если служба отключена, это может быть одной из причин, по которой сообщения не отображаются.
-
Логи и диагностические данные:
Проверьте логи, связанные сsystemd-fsck
иsystemd-fsckd
, для выявления возможных ошибок при запуске. Это можно сделать с помощью:journalctl -u systemd-fsck*
Понимание "причин" отключения служб поможет вам выявить проблемы и пути их решения.
3. Разделение разделов
- Отдельный раздел для /boot:
Обратите внимание на то, что в вашем окончательном решении вы упомянули, что проблема исчезла после установки /boot на отдельный раздел. Это может указывать на несовместимость в конфигурации или влияние на работу системы из-за наличия общего раздела для загрузки и корневой файловой системы. Возможно,systemd-fsck
не мог правильно взаимодействовать с корневым разделом и сообщениямиfsck
, что предопределяло отсутствие сообщений во время загрузки.
4. Итоговая проверка
- Тестирование конфигурации:
После внесения всех изменений и настройки системы, выполните перезагрузку и тщательно отследите процесс загрузки. Наблюдайте за отрисовкой сообщения FSCK на Plymouth и проверьте, все ли работает корректно.
Необходимо помнить, что любые изменения в конфигурации может занять некоторое время, чтобы адаптироваться к системе. Если после всех шагов проблема сохраняется, стоит рассмотреть возможность обращения в сообщество разработчиков или изучение релиз-нотов новых версий Debian и системных служб, так как изменения могут повлиять на совместимость и функциональность.