Я пытаюсь создать загрузочное ядро 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, который нужно превратить в реальный оперативный диск. Было предложено add "brd rd_size=16777216" to /etc/initramfs/modules
, но когда я распаковываю общий файл initrd.img-4.18.0-20 (используя unmkinitramfs
), нет файла / etc / initramfs. (Я также отмечаю, что, вероятно, следует использовать rd_nr=1 rd_size=1048576
, чтобы создать только ram0 вместо ram0 через ram15).
Как мне избежать ошибки загрузки. И если это связано с загрузкой BRD, как мне это сделать для этой версии ядра?
Первоначальный виртуальный диск (в вашем случае это 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
проверьте, есть ли ваш модуль в списке