如何使用 UEFI 将 ESXi 安装安装到 PXE 引导?

如何使用 UEFI 将 ESXi 安装安装到 PXE 引导?

我想使用 UEFI PXE 引导一些 ESXi 主机,但不断收到以下消息:

在此输入图像描述

我正在使用虚拟机进行测试,可以看到它在数据包捕获中命中了 DHCP/TFTP 服务器(CentOS 7)(捕获了 3 次重新启动,如下所示):

09:18:04.995404 IP 192.168.0.136.rsc-robot > stager.test.lab.tftp:  50 RRQ "efi.x64/syslinux.efi" octet tsize 0 blksize 1468
09:18:04.997399 IP 192.168.0.136.cera-bcm > stager.test.lab.tftp:  42 RRQ "efi.x64/syslinux.efi" octet blksize 1468
...
09:18:40.700760 IP 192.168.0.136.itm-mcell-u > stager.test.lab.tftp:  50 RRQ "efi.x64/syslinux.efi" octet tsize 0 blksize 1468
09:18:40.704583 IP 192.168.0.136.optika-emedia > stager.test.lab.tftp:  42 RRQ "efi.x64/syslinux.efi" octet blksize 1468
...    
09:18:57.525302 IP 192.168.0.136.altalink > stager.test.lab.tftp:  50 RRQ "efi.x64/syslinux.efi" octet tsize 0 blksize 1468
09:18:57.528201 IP 192.168.0.136.tunstall-pnc > stager.test.lab.tftp:  42 RRQ "efi.x64/syslinux.efi" octet blksize 1468

曾是只要我直接指向“mboot.efi”中的映像文件(我从 syslinux 6.03 中将其放入其中),就可以让 ESXi 安装程序通过 UEFI 运行,但我想使用 syslinux 从默认值传递 PXE 配置配置文件。我通过 DHCP 定向到那里,如下所示:

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
allow booting;
allow bootp;

option client-system-arch code 93 = unsigned integer 16;

class "pxeclients" {
    match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
    #TFTP Server
    option tftp-server-name "192.168.0.250";
    next-server 192.168.0.250;
    if option client-system-arch = 00:00 {
        filename = "bios/pxelinux.0";
    } elsif option client-system-arch = 00:07 {
        filename = "efi.x64/syslinux.efi";
    }
}

subnet 192.168.0.0 netmask 255.255.255.0 {
    option domain-name-servers 192.168.0.250;
    range 192.168.0.100 192.168.0.145;
}

我的 tftpboot/pxelinux.cfg/default 文件:

UI vesamenu.c32
PROMPT 0

menu title UEFI Deployment
MENU INCLUDE graphics.conf

LABEL -
   MENU label Standard Builds
   MENU DISABLE

LABEL ESXi 6.7
   MENU LABEL ^esxi 6.7
   MENU INDENT 3
   MENU DEFAULT
   KERNEL images/ESXiv6.7/mboot.efi
   APPEND initrd=/images/ESXiv6.7/boot.cfg ks=nfs://192.168.0.250/nfsshare/ks-prime.cfg

我可以完全移动默认文件并得到相同的结果。我不相信靴子会被推过去使用它。

编辑:我正在添加 TFTP 日志。看起来它从未加载过 syslinux.efi。值得注意的是,我的 BIOS 实现正确地在加载各自的 pxelinux.0 文件后从映像中提取 boot.cfg 文件。我假设默认文件实际上在此实例中工作,而不是 EFI 默认文件。

TFTP UEFI 日志:

Jul 24 08:28:49 stager in.tftpd[49849]: Client ::ffff:192.168.0.136 finished efi.x64/syslinux.efi
Jul 24 08:35:58 stager in.tftpd[50227]: connect: Invalid argument
Jul 24 08:36:05 stager in.tftpd[50233]: connect: Invalid argument

答案1

显然(至少某些版本的)UEFI PXE 标准要求使用 DHCP 选项指定启动文件的大小option boot-size <value>。对于基于 BIOS 的传统 PXE 引导,则不需要这样做。

您可以通过执行以下操作获得正确的大小值du -B 512 syslinux.efi

因此,如果该du命令报告的大小syslinux.efi为 400 个块,您会希望 DHCP 配置显示如下内容:

...
    } elsif option client-system-arch = 00:07 {
        filename = "efi.x64/syslinux.efi";
        option boot-size 400;
    }
...

如果没有此选项,我测试的某些系统无法使用 UEFI PXE 启动。

vesamenu.c32模块对于 UEFI 也可能存在问题,因为 UEFI 固件将提供其自己类型的显示 API,与 VESA VBIOS 扩展无关。我已经取得了一些成功menu.c32

我已经测试了syslinux.efi两者ipxe.efiipxe.org。我可以让它们都在我的环境中工作,但 iPXE 对我来说似乎更强大。

答案2

对于任何来到这里寻求解决方案的人。由于此原因,目前无法进行此设置漏洞在 Syslinux/GRUB EFI 引导加载程序中。您需要直接从 DHCP 传递 mboot.efi。遗憾的是,这意味着在 UEFI 模式下无法进行基于菜单的选择。

相关内容