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
проверьте, есть ли ваш модуль в списке