Я пытаюсь создать загрузочное ядро 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
проверьте, есть ли ваш модуль в списке