使用 GRUB 调试 PXE 启动问题

使用 GRUB 调试 PXE 启动问题

我想通过以下方式启动当前的 Antergos Live CD。为此,我下载了 ISO,安装它并将内容复制到/tftp/antergos/

然后我设置提供并使用

grub-mkstandalone -d /usr/lib/grub/x86_64-efi/ -O x86_64-efi \
                  --fonts="unicode" -o bootx64.efi grub/grub.cfg

/tftp/antergos/arch/boot/从以下内容生成 efi 加载器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
}

配置为提供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

然而,当我选择(IPv4)在我的计算机上启动时,它接收到bootx64.efi然后直接进入shell。在 shell 中,我可以cat (memdisk)/grub/grub.cfg获取上面的内容,grub.cfg因此我假设 shell 来自bootx64.efi而不是我现有的本地安装。

我该如何诊断这里出了什么问题?

答案1

问题是,grub 默认grub.cfg在 中查找(memdisk)/boot/grub。问题 ( ) 中的命令创建的 memdiskgrub-mkstandalone [...] -o bootx64.efi grub/grub.cfg如下所示:

- boot
- grub
 - grub.cfg

因此 grub 不会找到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

答案2

bootx64.efi接受的答案通过在(又名)中嵌入配置来解决问题grub.efi,但这不是唯一的方法。

检查您的 DHCP 服务器是否设置了该next-server选项。例如,使用 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总会有一个路径,并且 grub 会从 TFTP 服务器下载配置文件:(memdisk)next-server

grub> echo $prefix
(memdisk)/boot/grub

相关内容