[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