18.04.2 загрузить initrd в ramdisk

18.04.2 загрузить initrd в ramdisk

Я пытаюсь создать загрузочное ядро ​​PXE дляКлонироватьРазвертывание. У меня есть сетевая карта, для которой нужны некоторые драйверы, которые не работают «из коробки», но отлично работают в установленной Ubuntu, поэтому я подумал, что просто загружу ее по PXE, используя ядро ​​и initrd, с которых я загружаю Ubuntu (не будучи большим специалистом по Linux, я не могу придумать лучшего способа сделать это; попытки собрать собственное ядро ​​не привели к созданию рабочей сетевой карты).

Я запускаю последнюю версию 18.04.2. Поэтому я скопировал файлы: vmlinuz-4.18.0-20-genericи initrd.img-4.18.0-20-generic в нужные места моей PXE-системы и пытаюсь загрузиться с них.

Это командная строка загрузки (ipxe) (расположение образов сокращено для удобства чтения):

kernel http://.../IpxeBoot?filename=vmlinuz-4.18.0-20-generic&type=kernel initrd=initrd.img-4.18.0-20-generic root=/dev/ram0 rw ramdisk_size=1560000  web=http://.../ USER_TOKEN= task=debug consoleblank=0 
imgfetch --name initrd.img-4.18.0-20-generic http://.../IpxeBoot?filename=initrd.img-4.18.0-20-generic&type=bootimage
boot

При загрузке инициализируется куча соответствующих устройств (включая мою сетевую карту!), но затем я сталкиваюсь со следующей ошибкой:

gave up waiting for root file system device
ALERT! /dev/ram0 does not exist. Dropping to a shell!

я нашелэтот вопрос, что предполагает, что мне нужно сделать дополнительный шаг во время загрузки где-то, чтобы загрузить модуль brd и превратить initrd в фактически пригодный для использования ram disk. Было предложено сделать add "brd rd_size=16777216" to /etc/initramfs/modules, но когда я распаковываю файл initrd.img-4.18.0-20-generic (используя unmkinitramfs), нет /etc/initramfs. (Я также отмечаю, что мне, вероятно, следует использовать rd_nr=1 rd_size=1048576только ram0, созданный вместо ram0 через ram15).

Как обойти ошибку загрузки. И если это подразумевает загрузку brd, как это сделать для этой версии ядра?

решение1

Начальный ramdisk (в вашем случае это initrd.img-4.18.0-20-generic) генерируется update-initramfsинструментом автоматически во время установки ядра в вашу систему.

update-initramfsпроверяет вашу систему и добавляет необходимые модули initrdдля загрузки во время загрузки.

Есть два места, где вы можете разместить свои скрипты initial ramdisk:

/usr/share/initramfs-tools

и

/etc/initramfs-tools 

В вашем случае вы должны вставить эту строку /etc/initramfs-tools/modulesи запустить

update-initramfs -u

для вашего текущего ядра.

А теперь посмотрите на результат:

mkdir myinitramfs

cd myinitramfs

zcat /boot/initrd.img-4.18.0-20-generic | cpio --extract

cat conf/modules

проверьте, есть ли ваш модуль в списке

Связанный контент