[make-initrd] root=<any> --> mount event handler / 900-localdev regression
Leonid Krivoshein
klark.devel at gmail.com
Sun Feb 11 04:57:20 MSK 2024
Привет!
Раньше методы загрузки и их смена были частью документации make-initrd.
Кажется, в этой логике что-то поломалось или поменялось несовместимым
образом. Сейчас концовка шага pipeline rootfs выглядит так:
echo localdev > /etc/initrd/method
exit 2
Исходим из предположения, что root=pipeline как бы должен поменяться на
другой метод загрузки, т.е. localdev, но как бы не так, хотя раньше
именно так и было. Отработав, демон мог передать управление другому
коду. Сейчас же работают сразу две вещи:
1. Обработчики событий монтирования.
2. 900-localdev работает всегда и с самого начала.
Что в этом плохого? Гонки. Потому что цепочка действий (pipeline,
bootchain) не отработала, а параллельно начинает какой-то код что-то
делать. Если сейчас заменить концовку шага rootfs на:
exit 2
ничего не поменяется. До этого шага всё может даже не дойти, а
закончится раньше. А если по каким-то причинам цепочка "застрянет", мы
увидим что-то вроде:
initramfs: Waiting for root (pipeline) ...
даже после выполнения команды "echo localdev > /etc/initrd/method", т.к.
100-rootdelay не перечитывает теперь изменённое значение, он берёт $ROOT
из /proc/cmdline.
Как правильно избежать этих гонок? Как отключить на время обработки
цепочки обработку mount и localdev? И как включить их обратно после
того, как цепочка отработает?
--
WBR, Leonid Krivoshein.
More information about the Make-initrd
mailing list