LINUX.ORG.RU

Параметр Init= игнорируется для рамдиска, если в корне оного есть init?


0

1

Читал про солнечно-парусный фэйл. Решил показать, что Линукс (ядро + юзерспэйс) вполне работают вообще без доступа на запись в единственную корневую ФС.

Запустил qemu-system-x86_64 -initrd /boot/initrd-319-x64.gz -kernel /boot/bzImage-3.19-x64 -m 32 -append «init=/bin/ash»

и.... оно не сработало. Т.е. сам-то рамдиск выплюнул меня в ash, но там уже всё в rw перемонтировано, и другое ненужное мне сделано.

Собственноручно созданный рамдиск нормально съел параметр, дал шелл. Полез разбираться. Кажется, что если идёт загрузка из initrd/initramfs то первым выполняется дефолтный /init, а уж затем - проверяется пользовательский вариант (и если тот не сработал - несколько запасных).

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/main.c

Даже не знаю, баг это или фича.

★★★★★

Это фича. Если есть initramfs (загруженный загрузчиком или вкомпилированный в ядро), то запускается инит с него. И этот инит уже интерпретирует параметр командной строки init= как инит, который надо экзекать с рутовой фс после pivot_root.

iliyap ★★★★★
()

Если на initramfs у тебя Dracut, у него есть параметры, управляющие тем как и что делать. Мне больше всех нравится rd.break=.

iliyap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.