[make-initrd] polld и проверка наличия /root/sbin/init

Антон Мидюков antohami at basealt.ru
Thu Apr 6 04:28:20 MSK 2023


Здравствуйте

Предыстория: https://bugzilla.altlinux.org/44111

Заглавный вопрос: "в каком случае может быть так, что init в смонтированном корне в первые секунды нет, а потом оно чудесным образом появляется?"

Мне кажется, ответ найден: "При распараллеливании процесса монтирования корня (из сквоша, как минимум) на медленном сетевом соединении или достаточно медленном локальном накопителе".
Сейчас проблема стала хорошо воспроизводиться на ядре 6.2 при подключении по nfs или загрузке через ventoy и монтировании сквоша (без предварительной загрузки сквоша в память) на многоядерных процессорах.
Если ядро одно, то проблемы нет (проверено в виртуалке).
В ядре включили алгоритм монтирования оверлея CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU, и это проблему усугубило.
Но проблему крайне редко можно было поймать и раньше.

Отсюда выводы:
1. Факт монтирования корня недостаточное условие, существует переходный процесс монтирования
2. Обнаружение /sbin/init также не является достаточным условием, что можно продолжать загрузку, переходный процесс может оказаться длинным

Гипотеза о переходном процессе основана на сопоставлении двух логов chaind.log и polld.log
Ошибка об отсутствии /sbin/init была выдана на 1 секунду раньше, чем было завершено монтирование оверлея (оно занимало две секунды).

И другая проблема, вытекающая из этих:
bootchain после монтирования /sbin/init совершает ещё действия, поэтому нужно дождаться его выполнения.
В случае bootchain было бы надёжным запускать polld только тогда, когда он завершил свою работу.
Такое в принципе возможно?

-- 
С уважением, Антон Мидюков <antohami at basealt.ru>


More information about the Make-initrd mailing list