Отладка проблем с загрузкой PXE с помощью GRUB
Я хочу загрузить текущий компакт-диск Antergos через pxe netboot. Для этого я скачал ISO, установил его и скопировал содержимое в /tftp/antergos/
,
Затем я настроил dnsmasq для предложения tftp и использовал
grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi \
--fonts="unicode" -o bootx64.efi grub/grub.cfg
создать загрузчик EFI в /tftp/antergos/arch/boot/
из следующего grub.cfg
:
set timeout=5
menuentry 'Antergos x86_64' {
insmod net
insmod tftp
insmod efi_gop
set net_default_server=192.168.0.1
net_add_addr eno0 efinet0 192.168.0.150
linux (tftp)/antergos/arch/boot/vmlinuz archisobasedir=arch archisolabel=ANTERGOS modules-load=loop rd.modules-load=loop udev.log-priority=crit rd.udev.log-priority=crit quiet splash
initrd (tftp)/antergos/arch/boot/archiso.img
}
dnsmasq настроен на доставку bootx64.efi
:
enable-tftp
tftp-root=/tftp
dhcp-option=option:Bootfile-name,"/antergos/arch/boot/bootx64.efi"
dhcp-boot=/antergos/arch/boot/bootx64.efi
dhcp-option-force=210,/antergos/
dhcp-option-force=66,192.168.0.1
dhcp-option=3,192.168.0.101
Однако, когда я выбираю загрузку pxe (IPv4) на моем компьютере, он получает bootx64.efi
и затем идет прямо к раковине личинки. В скорлупе я могу cat (memdisk)/grub/grub.cfg
и получить содержимое выше grub.cfg
поэтому я предполагаю, что оболочка исходит от bootx64.efi
а не из моей существующей локальной установки.
Как мне диагностировать, что здесь происходит не так?
2 ответа
Проблема была в том, что grub выглядит по умолчанию для grub.cfg
в (memdisk)/boot/grub
, Мемдиск, созданный командой в вопросе (grub-mkstandalone [...] -o bootx64.efi grub/grub.cfg
) выглядело так:
- boot
- grub
- grub.cfg
Так что личинка не найдет grub.cfg
и ничего не делать.
Решение было позвонить grub-mkstandalone
снаружи boot
папку и передать ее как часть grub.cfg
путь вроде так:
grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi --fonts="unicode" \
-o boot/bootx64.efi boot/grub/grub.cfg
который генерирует следующее (memdisk)
содержание:
- boot
- grub
- grub.cfg
Принятый ответ решает проблему путем встраивания конфигурации вbootx64.efi
(ака ), но это не единственный способ.
Убедитесь, что ваш DHCP-сервер устанавливает эту опцию. Например, с ISC DHCPd:
next-server 192.168.0.254;
grub использует это, чтобы знать, где искать файл конфигурации, как описано здесь: https://www.gnu.org/software/grub/manual/grub/html_node/Network.html .
Если клиент скачиваетgrub.efi
, но нетgrub.cfg
, клиент загружаетсяgrub>
быстро и$net_default_server
Пустой, отсутствующий или неправильный следующий сервер, вероятно, является причиной.
grub> echo $net_default_server
По моему опыту,$prefix
всегда будет(memdisk)
путь, независимо от того,next-server
установлено правильно, и grub загружает файл конфигурации с TFTP-сервера:
grub> echo $prefix
(memdisk)/boot/grub