LINUX.ORG.RU

Помогите разобраться с initramfs

 , ,


0

1

Потребовалось создать initramfs для загрузки скопированного из live системы ядра в моей системе.
До этого никогда не использовал initrd — собирал ядро с вкомпилеными модулями.

Моя система грузится с флешки в Legacy ркжиме (не EFI).

Нужно загрузить ядро из https://pisilinux.org/download/

Скопировал ядро в /boot/, модули в /lib/modules/.
Прописал в /etc/dracut.conf
root=PARTUUID=45297d58-1fca-91d4-0f11-384e21f953a7
Выполнил
# dracut --kver 5.15.131
initramfs успешно создался, подправил /boot/grub/grub.cfg, прописал initrd /boot/initramfs-5.15.131.img

При попытке загрузиться GRUB выкидывает в rescue-mode (почему?). Ладно, прописал
root=hd0,gpt1
linux /boot/kernel-5.15.131
initrd /boot/initramfs-5.15.131.img
boot
пошла загрузка, но вылетает ошибка:
dracut Warning: dracut: FATAL: No or empty root= argument
dracut Warning: dracut: Refusing to continue
дальше идёт несколько строк ядра про usb и на этом всё, загрузка дальше не идёт.

Помогите, что я делаю не так?

★★★★★

Последнее исправление: teod0r (всего исправлений: 1)

Ответ на: комментарий от teod0r

смотри вики арча https://wiki.archlinux.org/title/GRUB

Если вместо меню или «шапки» нормальной консоли вы видите при старте загрузчика сообщение об ошибке и приглашение вида grub rescue>, значит вы попали в аварийную консоль.

Аварийная консоль GRUB2 встроена в стартовый образ загрузчика, и запускается в случаях, когда GRUB2 не может самостоятельно перейти в «нормальный» режим. Такое может случиться, если ядро GRUB2 при загрузке не нашло каталог со своими файлами и модулями по пути, указанному в переменной prefix.

Значение этой переменной обычно имеет вид (диск,раздел)/путь, например (hd0,msdos6)/boot/grub. Обозначение диска подставляется при старте загрузчика, а остальная часть (начиная с запятой) «зашивается» в стартовый образ ещё на этапе установки. Это значит, что после изменения любого из содержащихся в $prefix параметров (таблицы разделов, номера раздела, пути к файлам grub), загрузчик требуется переустанавливать, в противном случае он «вывалится» в аварийную консоль.

anonymous
()
Ответ на: комментарий от teod0r

Если в пути к файлу не указан диск или раздел, подразумевается текущий диск или раздел из переменной root . При запуске GRUB2 эта переменная уже указывает на раздел, где хранятся все файлы загрузчика, и как правило, образы ядра и initramfs. Задавать переменную root в конфиге имеет смысл ТОЛЬКО для загрузки с ДРУГОГО раздела.

у тебя не было указания на раздел с файлами и конфигом груба (root=hd0,gpt1) и переменной root (root=UUID=UUIDгде_находится_корень_системы_вместе_с_файлами загрузчика) груб не находил свои файлы

anonymous
()
Ответ на: комментарий от anonymous

у тебя не было указания на раздел с файлами и конфигом груба (root=hd0,gpt1) и переменной root (root=UUID=UUIDгде_находится_корень_системы_вместе_с_файлами загрузчика) груб не находил свои файлы

как раз в grub.cfg у меня всё это указано:

menuentry 'CRUX' {
        root='hd0,1'
        linux /boot/kernel-5.15.131 root=PARTUUID=45297d58-1fca-91d4-0f11-384e21f953a7 rootwait ro  zswap.enabled=1 selinux=0   oops=panic ipv6.disable=1 consoleblank=0 console=tty12 --
        initrd /boot/initramfs-5.15.131.img
}
но я всё-равно не понял вот это:

Задавать переменную root в конфиге имеет смысл ТОЛЬКО для загрузки с ДРУГОГО раздела.

который root= не нужно задавать? и да, на всякий случай повторюсь, до initrd всё работало.

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

Чтобы добраться до твоего конфига груба ему надо знать где он находится, root для груба и root для ядра разные вещи хотя путь может и совпадать. Для загрузки груба фиолетово что там с инитрамс или ядром, ему надо добраться до своих файлов а для этого надо указать где они находятся а если ты указываешь неверное или пустое расположение то и не находит их там

anonymous
()