使用 grub 进行 PXE 启动:未设置 root 变量

使用 grub 进行 PXE 启动:未设置 root 变量

我配置了一个 dhcp 和 tftp 服务器,为了进行测试,我第一次使用 syslinux 通过 PXE 网络成功启动。

现在我想使用 grub 而不是 syslinux 来启动,为了做到这一点,我发出了命令grub-mknetdir --net-directory=<my_tftp_root_dir>,并修改了要提供的文件dhcpd.conf

PXE 启动有效,但我总是收到有关未设置的错误root variable,并且我进入 grub 救援模式。

如果我手动发出命令:

set root=(tftp,10.50.1.10)
set prefix=(tftp,10.50.1.10)
insmod normal
normal

然后我可以正确地看到 grub.cfg 菜单项并启动那里的任何内容。

但我希望它能够自动完成并获取 grub 菜单,无需人工干预。

已经让我自己疯狂地阅读而没有任何积极的反馈,所以我不知道如何设置根和前缀,以便 grub 可以正确启动。

谢谢任何建议/提示,这个 PXE 对我来说还是一个新世界。

编辑:玩一玩,我能做的最好的事情就是使用以下命令再次生成图像: grub-mkimage -O i386-pc-pxe --output /warehouse/TFTProot/boot/grub/i386-pc/core.0 --prefix='(tftp,10.50.1.10)/boot/grub' pxe tftp

不要依赖自动生成的,但是有没有比手动重新生成更好的解决方案呢?因为grub-mknetdir它已经生成了。

答案1

1)您可以构建核心映像,创建配置文件,例如

setvars.conf 并使用 mkimage 命令 -c setvars.conf 进行引用

grub-mkimage -O i386-pc-pxe --output /warehouse/TFTProot/boot/grub/i386-pc/core.0 --prefix='' -c setvars.conf ppxe tftp

2)在 tftp 服务器的根目录中保存一个名为 grub.cfg 的文件,其内容如下:

设置 root=(tftp) 设置 net_default_server=192.168.xx 设置前缀=boot/grub

答案2

您必须在 bootp 或 dhcp 服务器中将下一个服务器设置为 10.50.1.10。这是 grub2 需要的,以便设置“root”和“prefix”变量。此外,请确保您使用正确的绝对路径执行 grub-mknetdir 命令,同样适用于 --subdir 参数。

相关内容