【VMware ESXi】ESXi 8.0U3h 集成 Realtek 网卡驱动 Fling 并解决安装后无网卡
最近在一台使用 Realtek 网卡的机器上安装 ESXi 8.0U3h,遇到了一个比较典型的问题:原版 ISO 可以启动安装程序,但安装过程中和安装完成后都无法正常识别网卡。
这类问题在家用主板、小主机、软路由硬件上比较常见。ESXi 8.x 官方镜像默认不一定包含对应 Realtek 网卡驱动,所以需要把 Realtek Network Driver Fling 集成进安装介质。
本文记录这次完整处理过程,包括 ISO 集成、启动失败修复、安装后 DCUI 无网卡的原因,以及最后如何把驱动持久化到 ESXi 的 bootbank。
参考文章:
Installing Realtek Network Driver Fling using Free ESXi 8.0 Update 3e ISO
驱动下载
Realtek Network Driver Fling 的下载入口不太好找,这里把本次使用的驱动包单独整理出来,方便后续复现。
- VMware-Re-Driver_ 1.101.01-5vmw.800.1.0.20613240.zip:原始 offline bundle,适合重新制作 ISO 时使用。
- IFRE.V00:从 VIB 中提取出来的启动模块,适合已经理解流程、只需要写入 bootbank 的场景。
- SHA256SUMS.txt:文件校验值。
校验值如下:
365b5b2ee604111ea651dd123d8d7167bd1513a20ec217520d26923395cfba9d VMware-Re-Driver_1.101.01-5vmw.800.1.0.20613240.zip
9b82f310947d62d98f52879a2f72161ac539f516f432c4542f4bb2b277b83124 IFRE.V00环境信息
本次使用的文件如下:
VMware-VMvisor-Installer-8.0U3h-25067014.x86_64.iso
VMware-Re-Driver_1.101.01-5vmw.800.1.0.20613240.zip注意:William Lam 原文示例是 ESXi 8.0 Update 3e,我这里实际使用的是 ESXi 8.0 Update 3h。处理思路相同,但文件名和版本号需要按自己的 ISO 为准。
问题现象
原版 ISO 安装时看不到网卡,或者安装完成后进入 DCUI 页面,在 Network Adapters 中没有任何物理网卡。
这里要注意一个判断点:即使没有插网线,ESXi 也应该能看到物理网卡接口,只是 Link 状态可能是 Down。如果 DCUI 中完全没有 vmnicX,说明驱动没有加载成功,和网线是否插入没有直接关系。
一、从 Realtek Offline Bundle 中提取驱动
下载到的 Realtek 驱动是一个 offline bundle zip,里面包含真正的 VIB 文件。
先查看压缩包内容:
unzip -l VMware-Re-Driver_1.101.01-5vmw.800.1.0.20613240.zip可以看到其中包含:
vib20/if-re/vmw_bootbank_if-re_1.101.01-5vmw.800.1.0.20613240.vib解出 VIB:
mkdir -p work/extract work/vib
unzip -q VMware-Re-Driver_1.101.01-5vmw.800.1.0.20613240.zip 'vib20/if-re/*.vib' -d work/extractVIB 本质上可以用 ar 解开:
cd work/vib
ar x ../extract/vib20/if-re/vmw_bootbank_if-re_1.101.01-5vmw.800.1.0.20613240.vib解开后能看到:
descriptor.xml
ifre
sig.pkcs7其中 ifre 就是后面需要放进 ESXi 启动介质里的驱动 payload。为了和 ESXi 启动模块命名保持一致,将它复制为 IFRE.V00:
cp work/vib/ifre work/iso-add/IFRE.V00二、修改 BOOT.CFG 加载 IFRE.V00
ESXi ISO 中有两份启动配置需要关注:
/BOOT.CFG
/EFI/BOOT/BOOT.CFG其中 modules= 行列出了启动时要加载的所有模块。需要在这一行末尾追加:
--- /IFRE.V00修改后的形式大致如下:
modules=/jumpstrt.gz --- /useropts.gz --- /features.gz ... --- /imgpayld.tgz --- /IFRE.V00这里建议两个 BOOT.CFG 都修改,避免 BIOS 启动和 UEFI 启动行为不一致。
三、重新生成 ISO
这一步我一开始踩了坑。
第一次使用 xorriso -boot_image any replay 在原 ISO 基础上追加文件,表面看目录和启动项都在,但真机 UEFI 启动时报错:
Loading /EFI/BOOT/boot.cfg
UEFI Secure Boot is not enabled
Failed to load crypto64.efi: Not found
Falling back to internal crypto suite
Loading /b.b00
Fatal error: 15 (Not found)这个报错说明启动器已经读取到了 boot.cfg,但后续按配置加载 /b.b00 时失败。后面检查发现,重打包后的 UEFI El Torito boot image 的 load size 和原厂 ISO 不一致:
原厂 ISO: UEFI load size = 1
错误 ISO: UEFI load size = 2048所以这里不要只看 ISO 目录里有没有文件,还要检查 El Torito 启动参数。
最后改用 mkisofs 重新生成,并显式指定 UEFI boot image 的 load size 为 1:
mkisofs \
-relaxed-filenames \
-J \
-R \
-V 'ESXI-8.0U3H-25067014-STANDARD' \
-o VMware-VMvisor-Installer-8.0U3h-25067014-Realtek-ifre.iso \
-b ISOLINUX.BIN \
-c BOOT.CAT \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-eltorito-alt-boot \
-eltorito-platform efi \
-b EFIBOOT.IMG \
-no-emul-boot \
-boot-load-size 1 \
work/fulliso生成后检查启动参数:
xorriso -indev VMware-VMvisor-Installer-8.0U3h-25067014-Realtek-ifre.iso -report_el_torito plain关键结果如下:
El Torito boot img : 1 BIOS y none 0x0000 0x00 4
El Torito boot img : 2 UEFI y none 0x0000 0x00 1
El Torito img path : 1 /ISOLINUX.BIN
El Torito img path : 2 /EFIBOOT.IMG确认 UEFI 对应的 Ldsiz 是 1,这点和原厂 ISO 保持一致。
同时确认 IFRE.V00 已经在 ISO 内:
xorriso -read_fs norock -indev VMware-VMvisor-Installer-8.0U3h-25067014-Realtek-ifre.iso -find / -maxdepth 2 -type f | grep IFRE输出:
'/IFRE.V00'四、安装后 DCUI 仍然没有网卡的原因
这次 ISO 修好后,ESXi 可以正常安装成功,但安装完成进入 DCUI 后,Network Adapters 中仍然看不到任何网卡。
这个现象一开始容易误判为驱动没集成成功,其实原因是:
ISO 中的驱动只保证安装器环境可以加载,安装完成后的 ESXi 系统还需要把驱动写入安装目标盘的 bootbank。
也就是说,安装器启动时能用到 IFRE.V00,不代表安装后的系统重启时也会自动加载它。
所以安装完成后,还需要做一次持久化处理。
五、把驱动写入 BOOTBANK1 和 BOOTBANK2
安装完成后不要急着拔 U 盘。继续使用定制 ISO 启动到 ESXi Installer 环境,然后按 Alt + F1 进入 Shell。
先确认安装器里有没有 Realtek 驱动模块:
ls -l /tardisks/*ifre* /tardisks/*IFRE*如果能看到类似 IFRE.V00 或 ifre.v00 的文件,就可以复制到两个 bootbank:
cp /tardisks/IFRE.V00 /vmfs/volumes/BOOTBANK1/ifre.v00
cp /tardisks/IFRE.V00 /vmfs/volumes/BOOTBANK2/ifre.v00如果实际文件名是小写,就使用小写路径:
cp /tardisks/ifre.v00 /vmfs/volumes/BOOTBANK1/ifre.v00
cp /tardisks/ifre.v00 /vmfs/volumes/BOOTBANK2/ifre.v00然后修改两个 bootbank 的 boot.cfg,让安装后的 ESXi 每次启动都加载 ifre.v00:
sed -i '/^modules=/ s#$# --- /ifre.v00#' /vmfs/volumes/BOOTBANK1/boot.cfg
sed -i '/^modules=/ s#$# --- /ifre.v00#' /vmfs/volumes/BOOTBANK2/boot.cfg确认配置已经写入:
grep -i ifre /vmfs/volumes/BOOTBANK1/boot.cfg /vmfs/volumes/BOOTBANK2/boot.cfg
ls -l /vmfs/volumes/BOOTBANK1/ifre.v00 /vmfs/volumes/BOOTBANK2/ifre.v00确认无误后重启主机。
六、重启后验证网卡
进入 ESXi 后,即使没有插网线,也应该能看到 vmnicX。如果没有插线,状态可能是 Down,这是正常的。
可以在 ESXi Shell 中执行:
esxcli network nic list查看具体某一块网卡:
esxcli network nic get -n vmnic0查看驱动模块是否加载:
vmkload_mod -l | grep -i re如果还是看不到网卡,再检查 PCI 设备是否存在:
lspci -v | grep -i -A5 -E 'ethernet|network|realtek'如果 lspci 能看到 Realtek 网卡,但 esxcli network nic list 看不到 vmnicX,说明驱动没有绑定成功,下一步就要核对这块网卡的 PCI ID 是否在当前 if-re 驱动支持范围内。
总结
这次处理有两个关键点:
- ISO 集成时,不只是把
IFRE.V00放进 ISO,还要确保BOOT.CFG会加载它,并且 UEFI El Torito 启动参数不能被破坏。 - 安装成功不代表驱动已经写入目标系统,安装后的 ESXi 还需要把
ifre.v00放进BOOTBANK1和BOOTBANK2,并修改两个 bootbank 的boot.cfg。
如果只是解决安装器识别网卡,做到第一步可能就够了;但如果安装完成进入 DCUI 后仍然没有网卡,就一定要检查 bootbank 持久化这一步。