我配置了一个 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 参数。