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

Я пытаюсь создать загрузочное ядро ​​PXE для CloneDeploy. У меня есть сетевой адаптер, которому нужны некоторые драйверы, которые не работают из коробки, но работают нормально при установке 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-диск. Было предложено 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 ответ

Начальный рамдиск (в вашем случае это 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

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

Другие вопросы по тегам