我在通过 Grub2 引导加载程序启动操作系统时遇到了问题。
环境:
我有一个 PXE-Boot 基础设施,并想通过网络(TFTP)测试 PXE-Booting Grub2.efi。
将 efi 文件下载到客户端并且 grub 加载到机器上 - 我可以看到 grub 提示符grub>
- 我正在使用 Grub 版本 2.00。
我已经创建了一个配置文件(grub.cfg
)并将其放在与文件相同的 TFTP 目录中grub.efi
。
我可以从 TFTP 日志中看到 GRUB 已被下载 - 并且显然已加载到客户端 - 然后grub.cfg
由 grub 下载。
我的grub.cfg
样子如下:
set root=(hd0,gpt1)
chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
boot
简单来说,我只想用 GRUB 启动 Windows。请不要问为什么;那样的话描述起来太费时间了……
我希望 GRUB 能够找到下载的grub.cfg
文件并加载 Windows。
发生了什么:我只是被抛到了grub>
提示中。
grub.cfg
当我通过 grub 提示加载时
configfile /grub.cfg
操作系统已完美加载,所以到目前为止一切似乎都正常。
所以我的问题是,如何让 GRUB 自动加载配置文件并启动 Windows?
答案1
Grub 查找配置文件/grub/grub.cfg
或/grub/x86_64-efi/grub.cfg
(或类似)。
注意::这是来自 TFTP 服务器根目录的路径。这意味着,即使您从类似这样的路径运行 Grub 二进制文件$tftproot/path/to/grubnetx64.efi
,也不要尝试将目录放入grub/
同一目录,而要真正放入 TFTP 根目录:$tftproot/grub/
如何找出答案
在 Grub 控制台中:
grub> cat (memdisk)/grub.cfg
if [ -e $prefix/x86_64-efi/grub.cfg ]; then
source Sprefix/x86_64-efi/grub.cfg
else
source Sprefix/grub.cfg
fi
而最重要的部分是$prefix
:
grub> echo $prefix
(tftp,x.x.x.x)/grub
答案2
检查您的 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
答案3
menuentry
在和中制作它 set default="0"
。