GRUB PXE启动未加载基于MAC/IP的配置文件,如何实现按MAC地址加载不同配置?
GRUB PXE启动未加载基于MAC/IP的配置文件,如何实现按MAC地址加载不同配置?
首先,核心问题大概率是你的GRUB镜像没启用feature_net_search_cfg这个关键特性——这正是控制GRUB是否搜索那些带MAC/UUID/IP后缀的配置文件的开关。咱们一步步来排查解决:
1. 先确认feature_net_search_cfg是否启用
你可以在PXE启动时按c键进入GRUB命令行,输入set命令查看所有变量。如果找不到feature_net_search_cfg,或者它的值是n,那就是没启用,这就是问题根源。
2. 启用feature_net_search_cfg特性
方法一:通过DHCP传递参数(最快验证)
如果用的是ISC DHCP服务器,你可以在DHCP配置里给GRUB添加启动参数,强制开启这个特性:
option grub-feature-net-search-cfg "y";
或者直接在指定GRUB镜像的那一行附加参数:
filename "boot/tree/EFI/boot/grubx64.efi net_search_cfg=y";
这样GRUB启动时会直接启用该特性。
方法二:重新生成PXE用的GRUB目录
如果你是用grub-mknetdir生成的PXE GRUB文件,默认可能没开启这个特性。重新生成时加上启用参数:
grub-mknetdir --net-directory=/path/to/tftp/root --enable-feature=net_search_cfg
替换/path/to/tftp/root为你的TFTP根目录,这样生成的GRUB镜像会默认启用搜索带标识符配置文件的功能。
方法三:修改主grub.cfg添加变量
在你的主/grub/grub.cfg开头加上一行:
set feature_net_search_cfg=y
不过这个方法要注意优先级,建议先试前两种更直接的方式。
3. 确认配置文件的格式和路径是否正确
- 路径:根据你的TFTP日志,GRUB请求的是
/grub/grub.cfg,所以(FWPATH)就是/grub/,你创建的带MAC的配置文件必须放在TFTP根目录下的grub文件夹里,也就是路径为/grub/grub.cfg-00-0a-11-22-33-44,确保位置没错。 - MAC格式:GRUB对MAC地址的格式要求严格,试试把分隔符换成冒号(比如
grub.cfg-00:0a:11:22:33:44),或者不带分隔符的全小写十六进制(grub.cfg-000a11223344),不同版本的GRUB可能会用不同格式匹配。
4. 验证效果
修改后重新PXE启动,查看TFTP日志,如果看到GRUB请求对应MAC后缀的配置文件,就说明成功了。
备注:内容来源于stack exchange,提问作者Bogd




