先说结论:如果你手里正在用的或者准备入手的服务器/工控机/软路由,用的是Realtek、Intel某些较新的网卡,或者主板板载网卡太新,那么VMware vSphere ESXi 6.7 U3官方原版ISO大概率会卡在“找不到网络适配器”这一步,装都装不进去。这篇文章就是把我在实际项目里反复做过好多次的“给ESXi 6.7 U3打网卡驱动补丁并重新封装ISO”的完整过程拿出来聊聊,包括原理、踩坑、封装步骤和验证方法,给正在折腾ESXi 6.7 U3的兄弟们一份能直接照着抄的作业。
ESXi 6.7 U3虽然是老版本了,但它在很多生产环境和homelab里仍然是主力,因为它稳定、兼容性好、资源占用低。问题在于,官方ISO自带驱动库是固定的,更新周期远跟不上硬件迭代速度,新网卡没驱动导致无法安装是特别常见的坑。尤其是NIC驱动,装不上ESXi第一步都走不了,更别提后面创建虚拟机、跑业务了,所以封装驱动这个操作在不少场景下属于刚需。
这篇文章适合这三类人:一是准备在物理机上直接安装ESXi 6.7 U3但识别不到网卡的人,二是想把自己常用的驱动(比如硬盘控制器、USB网卡)集成进去以便以后部署更顺利的系统运维,三是对ESXi镜像定制原理感兴趣、想自己动手diy一个专属安装包的虚拟化爱好者。
1. 内容整体设计与思路拆解
1.1 为什么要给ESXi 6.7 U3封装网卡驱动
先从一个实际问题说起。我去年帮朋友折腾一台配置还不错的软路由,主板是某知名品牌的工控板,板载双Intel I225-V 2.5G网卡。这种网卡在Windows、Linux下都妥妥的,但拿官方ESXi 6.7 U3的ISO一引导,安装界面卡在选择网卡那一步,列表里空空如也,直接没法往下装。原因很简单:I225-V是Intel 2020年之后才大规模出货的网卡,而ESXi 6.7 U3的官方支持周期和驱动库还停留在更早的硬件时代,官方ISO里根本没有对应的驱动。
这种问题在大厂服务器上反而不太常见,因为Dell、HPE、Lenovo这些厂商会出自己的定制版ESXi镜像,把该型号服务器支持的驱动都集成好了。但很多homelab玩家、中小企业用的组装机、工控机、老服务器,只能靠自己解决驱动问题,封装驱动就成了最直接的方案。
另外还有一种很常见的场景:你想在ESXi里用USB网卡做管理口,或者用NVMe SSD做虚拟机存储,但官方镜像里缺少相应的USB控制器驱动和NVMe驱动。虽然ESXi 6.7 U3对NVMe的支持已经比老版本好很多,但某些非主流的NVMe硬盘、USB转千兆网卡仍然需要额外打驱动,这种情况下掌握封装方法就是一劳永逸的事。
1.2 封装方案选型:为什么我推荐ESXi-Customizer-PS
给ESXi封装驱动,社区里主要有两套思路:一套是使用VMware官方的PowerCLI模块,通过New-EscxImage命令构建自定义镜像;另一套是使用第三方脚本ESXi-Customizer-PS。
ESXi-Customizer-PS是我用得最多的方案。这个脚本本质上还是调用PowerCLI的底层命令,但它在易用性和稳定性上做了大量封装,很多细节都替你处理好了。比如它会在封装过程中自动处理驱动包的依赖关系、自动检查VIB包的可用性、自动把depot中的驱动注入镜像,出错时还会给出很明确的提示信息,这对新手来说简直不要太友好。
相比之下,如果你直接用PowerCLI命令,需要自己管理depot路径、自己处理各种参数,出错概率高不少。而且ESXi-Customizer-PS已经有了好几个版本迭代,社区里大量测试验证过,我用它封装过至少几十次,踩过大大小小的坑,目前来看是最稳定的方案。
需要注意的一点是,ESXi-Customizer-PS要求你本机安装了PowerCLI,它只是一个辅助脚本。这就意味着你得先准备好一台装有PowerCLI的Windows机器作为封装环境,或者像我一样装一个Windows虚拟机专门干这个活。
1.3 封装驱动前必须先补的功课
正式开始封装之前,有两件事必须搞清楚,否则后面容易白忙活。
第一件事是确认你的网卡芯片型号。这是最基础也最关键的一步,如果你连网卡是什么芯片都不知道,后面找驱动包就是在碰运气。Windows系统下可以打开设备管理器查看,Linux下用lspci命令,特别是lspci | grep -i ethernet能看到网卡型号和厂商信息。我之前试过在PE环境里看设备管理器来确认网卡型号,也是个办法,但能进系统的话还是先进系统确认,信息更准确。
第二件事是确认打驱动包(VIB包)的获取渠道。社区里经常用的驱动来源有两个:VMware官方的Fling站点(比如Intel网卡驱动、Realtek网卡驱动),以及各网卡厂商自己发布的ESXi驱动包。Realtek的驱动需要特别留意,因为Realtek官方对ESXi的支持一直不太积极,很多驱动是第三方开发者适配的,VIB包的质量参差不齐。我的建议是:能用官方或者大厂驱动(Intel、Broadcom、Mellanox)就优先用这些,稳定性更有保障。
另外还要注意,ESXi 6.7 U3对应的是VIB包格式,和ESXi 7.0的VIB包在兼容性上有差异,封装前最好确认你下载的VIB包是for ESXi 6.7的版本,否则会出现封装成功但安装时驱动加载失败的问题。这个坑我踩过,后来才反应过来是版本不匹配,希望大家少走弯路。
2. 核心细节解析与实操要点
2.1 驱动VIB包格式和封装原理
很多刚接触ESXi封装的人会好奇,封装驱动到底是在干什么?其实说穿了很简单,ESXi系统本身就是一个跑在裸机上的微型Linux系统,里面预置了一整套硬件驱动库,驱动文件以VIB包的形式组织在系统里。而ESXi安装镜像的核心结构也和Linux安装盘类似,包含了一整套引导系统、安装程序、驱动库和安装包。
所谓封装驱动,就是把特定的VIB包从外部源导入到安装镜像中,让安装程序在安装阶段就能读取并加载这些驱动。具体到实现层,ESXi-Customizer-PS脚本会完成这样的工作:先把官方的ESXi ISO解压到一个临时目录,然后从你准备的离线depot(驱动包仓库)中提取VIB包,将这些VIB包注入到镜像的适当位置,同时更新镜像的元数据信息,最后重新打包成一个新的ISO镜像。
这个操作理解起来最核心的一点是:它不是简单地把文件复制进去,而是需要保证驱动包能通过ESXi安装程序的验证,能被系统的软件包管理机制pmDelete/pmInstall所识别和加载。所以封装过程中对VIB包的签名、依赖关系、兼容性都会有校验流程,这也是为什么选对驱动包格式很关键。
2.2 驱动获取渠道和VIB包查找技巧
我常用的驱动获取方式主要有以下几个,每个都有各自的特点和使用场景。
VMware Fling站点是首选渠道,上面有Intel网卡驱动、Realtek网卡驱动、USB网卡驱动等官方或半官方的驱动包,这些驱动的兼容性和稳定性都有一定保障。尤其是Intel的ixgbe、igb、i40e、ice系列驱动,在Fling上往往能找到适配ESXi 6.7的版本。
各网卡原厂的支持页面也可以关注。Intel官网提供了很多ESXi驱动的直接下载,通常是以zip格式的离线depot包形式提供,里面包含对应平台的VIB包。Realtek官网也有少量ESXi驱动,但年代普遍比较久远,下载前要仔细看支持列表。
第三方社区和GitHub上也有大量ESXi驱动包,最典型的是各种黑群晖、软路由、ESXi装机教程里分享的驱动集合包。这种渠道得到的驱动包需要格外小心,尽量选评价较好、下载量大、更新时间相对近的,下载后最好用杀毒软件扫描一遍。毕竟是要打进系统镜像里的东西,安全性必须重视。
还有一个比较实用的技巧:如果你需要的网卡驱动在Fling上找不到,那可以去查看对应网卡芯片在ESXi 7.0或8.0中是否支持,如果支持,可以尝试在旧版本驱动包里找兼容的VIB包。但这样做只建议在测试环境里验证,不建议直接用到生产环境。
2.3 封装前的环境准备清单
封装ESXi镜像对环境要求不算高,但每一样都缺一不可,我列个清单出来,方便你照着准备。
一台Windows机器,建议Windows 10或Windows Server 2016以上版本。这台机器要有足够的磁盘空间,因为打包过程中需要同时存放ISO镜像、解压文件、封装文件和最终输出的新ISO,加起来可能占用好几个GB。配置上不需要太高,但内存建议至少8GB,CPU双核就够了。
必备软件包括VMware PowerCLI(版本建议12.0以上)、ESXi-Customizer-PS脚本、ESXi官方ISO镜像、网卡驱动离线depot包。PowerCLI的安装可以直接在PowerShell里用Install-Module命令安装,也可以从VMware官网下载安装包,只要保证模块能在PowerShell里正常加载就行。
准备工作里最容易被忽略的一点是:必须确保网络环境能正常访问VMware的在线仓库,因为ESXi-Customizer-PS在封装过程中可能需要联网下载一些额外的依赖组件。如果你所在网络无法访问外网,也可以提前把依赖包下载好放到本地,脚本会识别本地缓存。
2.4 网卡驱动兼容性速查表
这里放一张我整理的ESXi 6.7 U3常见网卡驱动兼容性快查表,方便大家判断自己需要打驱动的网卡是否能找到合适的VIB包。
| 网卡芯片 | 常见型号 | ESXi 6.7 U3官方支持 | 是否需要额外驱动 |
|---|---|---|---|
| Intel I210/I211 | 服务器板载网卡 | 是 | 否 |
| Intel I225-V/I226-V | 较新主板/软路由 | 否 | 是 |
| Intel I350 | 服务器网卡 | 是 | 否 |
| Intel X710/XL710 | 万兆网卡 | 部分 | 可能需要 |
| Realtek RTL8111/8168 | 消费级板载网卡 | 否 | 是 |
| Realtek RTL8125 | 2.5G网卡 | 否 | 是 |
| Broadcom BCM5720 | 服务器网卡 | 是 | 否 |
| Mellanox ConnectX-3/4 | 万兆/25G网卡 | 是 | 否 |
从这份表格里基本可以看出,2020年之后推出的网卡芯片,官方支持的概率都比较低,这类网卡基本都需要封装驱动才能用。
3. 实操过程与核心环节实现
3.1 封装环境的完整搭建
准备一台Windows机器,我这里用的是Windows Server 2022虚拟机,内存分配了8GB,磁盘分配了100GB,CPU给了4核,跑封装完全够用。
第一步,安装VMware PowerCLI。打开PowerShell,执行以下命令:
Set-ExecutionPolicy Bypass -Scope Process -Force Install-Module -Name VMware.PowerCLI -Scope CurrentUser -AllowClobber安装过程可能需要几分钟,取决于网络速度。装完后运行Import-Module VMware.PowerCLI,接着运行Get-Command -Module VMware.PowerCLI确认安装成功。如果你看到一堆cmdlet命令,说明PowerCLI已经就绪。
还需要设置PowerCLI的证书验证策略,不然后面封装可能会被证书问题卡住。在PowerShell里执行:
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Confirm:$false第二步,下载ESXi-Customizer-PS脚本。这个脚本是单文件PowerShell脚本,下载后放到一个工作目录,比如C:\esxi-customize。脚本不需要安装,直接调用就行,但需要注意把脚本路径和参数都写对。
第三步,下载ESXi 6.7 U3官方ISO镜像。注意一定要下载Build 19195723(2021年发布的最终更新版),这是ESXi 6.7的最后一个版本,包含之前所有安全补丁和bug修复。下载地址请认准VMware官方网站,其他地方下载的ISO可能有被修改的风险,动手前务必校验一下SHA256哈希值。
第四步,下载网卡驱动depot包。这一步根据你的网卡型号来选择,比如Intel I225-V网卡可以下载VMware Fling上的Intel igb驱动包,Realtek网卡则下载r8125驱动包。下载完压缩包后记得解压,确保可以看到里面的VIB文件和描述文件。
3.2 ESXi-Customizer-PS核心用法详解
一切准备就绪后,封装的核心命令其实只有一条。我先把最典型的用法放出来:
.\ESXi-Customizer-PS-v2.8.1.ps1 -izmo .\ESXi-6.7.0-20191204001-standard.iso -pkgDir .\drivers -outDir .\output命令各参数的含义有必要详细解释一下。
-izmo参数用来指定需要封装的ESXi官方ISO镜像路径,这个参数名看起来有点奇怪,其实它是i-zip-mount-od的缩写,意思是“挂载镜像并为封装做准备”。我第一次看到这个参数时懵了半天,现在自然是记熟了。
-pkgDir参数用来指定驱动depot包所在的文件夹路径。脚本会扫描这个文件夹下所有的离线depot包,并把里面的VIB包注入到镜像中。你可以把多个驱动包都放在这个目录里,脚本会一次性全部处理。
-outDir参数用来指定最终生成镜像的输出目录。如果没有指定,脚本默认会在工作目录下生成一个名字类似ESXi-6.7.0-20191204001-standard-customized.iso的文件。
执行命令后,脚本会经历这样的流程:首先挂载指定的ISO镜像,然后扫描-pkgDir目录下的depot包,接着将这些包里的VIB包注入到镜像中,最后重新打包生成新的ISO文件。整个过程在我电脑上大概耗时5到10分钟,取决于驱动包大小和硬盘性能。
3.3 常见驱动封装实战案例
我以实际遇到过的三种典型情况为例,演示完整的封装过程。
场景一:Intel I225-V 2.5G网卡
I225-V这个网卡在最近几年的高端主板、迷你主机、软路由上非常常见,ESXi 6.7 U3官方镜像完全不支持这个网卡。VMware Fling站点提供了专门的net-igb驱动包,下载下来解压后,把整个depot文件夹放到drivers目录,然后执行封装命令。
封装完成后,我写了个简单的验证脚本,检查生成的ISO里是否包含了对应驱动:
$isoPath = ".\output\ESXi-6.7.0-20191204001-standard-customized.iso" $image = Get-EsxImage -IsoPath $isoPath $image.VibList | Where-Object {$_.Name -like "*igb*"}如果在输出里能看到类似net-igb的VIB项,说明驱动已经成功封装进镜像。
场景二:Realtek RTL8125 2.5G网卡
RTL8125又是一个大热门,很多中低端主板和软路由都在用。Realtek官方并没有提供规范的ESXi驱动包,社区里比较常见的是第三方编译的r8125驱动VIB包。使用方法和Intel驱动类似,把vib文件或depot目录放到drivers目录,执行封装命令即可。
需要注意,第三方编译的RTL8125驱动包在不同版本ESXi上的兼容性差异很大,我试过有好几个版本在6.7 U3上封装后会出现驱动无法加载的情况。经验是优先选择打包日期较新的VIB包,另外封装后一定要在测试环境验证一次。
场景三:同时封装多个驱动
很多软路由主板上有两个Intel网卡加一个Realtek网卡,这种情况下就需要同时注入多个驱动。解决方法很简单,把多个depot包都放到drivers目录下,脚本会自动识别并全部注入。我一次最多封装过6个驱动包,没有出现冲突或遗漏的情况。
3.4 封装结果验证与安装实测
封装完成后,不能直接拿U盘去装机,一定先做两件事验证。
第一步是在PowerShell里确认驱动是否成功注入ISO。使用前面提到的Get-EsxImage命令,把输出的VibList保存成文件,搜索一下对应的驱动名。如果没有找到对应驱动,说明depot包没有被正确识别,需要检查depot包的格式是否正确。
第二步是把封装好的ISO写入U盘,然后在一台测试机上实际安装一次。这一步是最终的验证手段,也是最容易暴露问题的环节。我用Rufus工具把ISO镜像写入U盘,然后从U盘引导系统,正常情况下应该能顺利看到网卡列表并进入后续安装步骤。
安装完成后,进入ESXi系统,可以通过以下命令确认驱动已经正常加载:
esxcli software vib list | grep i40en lspci | grep -i ethernet如果能看到对应的驱动状态是VMware已安装,或者lspci输出里已经识别到网卡设备,说明整个封装过程彻底成功。
4. 常见问题与排查技巧实录
4.1 驱动封装十大坑位速查表
封装过程中遇到的坑确实不少,我把高频问题整理成速查表,方便你遇到问题时快速排查。
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 脚本报错"无法连接在线仓库" | 网络不通或PowerCLI版本过低 | 确认外网正常,更新PowerCLI到12.0以上 |
| 封装成功后ISO没有包含驱动 | depot包格式不对或未正确识别 | 检查depot包是否包含有效文件夹结构,确认路径正确 |
| 安装时网卡仍然无法识别 | 驱动包与ESXi版本不兼容 | 确认下载驱动版本是for ESXi 6.7的VIB包 |
| 封装时提示VIB包签名无效 | 驱动包未经签名或签名过期 | 在PowerCLI设置中忽略证书检查,或选择签名有效的驱动包 |
| 生成的ISO无法引导 | 输出目录路径包含空格 | 使用不包含空格的输出路径 |
| 安装过程中出现乱码 | 引导方式问题 | 确认U盘引导模式是BIOS或UEFI,与启动方式一致 |
| 驱动封装后系统启动蓝屏 | 驱动冲突或兼容性问题 | 尝试单独封装一个驱动测试,逐一定位冲突驱动 |
| 封装时间异常长 | 磁盘IO瓶颈或内存不足 | 关闭其他程序,确保至少8GB可用内存 |
| 脚本找不到ISO镜像 | 路径错误或ISO文件名不匹配 | 使用绝对路径,确认镜像文件存在 |
| 驱动封装成功但网卡协商速率不对 | 驱动版本过旧 | 使用网卡厂商最新驱动,或到VMware Fling下载最新版驱动 |
4.2 驱动加载失败时的排查思路
如果封装没有问题,但安装后驱动依然不工作,这时候排查思路会稍微复杂一些。我遇到几次这种情况,都是按这个顺序排查的。
先检查驱动在系统里是否存在但没加载,还是根本没有被系统识别。运行lspci | grep -i ethernet如果能看到网卡设备,说明硬件已经被识别,问题在驱动模块本身。再运行esxcli software vib list | grep net,如果驱动不在列表里,说明封装时驱动可能没打进去。
如果驱动在列表里但网卡还是不可用,大概率是驱动与网卡芯片的版本匹配问题。此时需要确认驱动VIB包对应的芯片版本是否和你的网卡一致。打个比方,Intel igb驱动有多个版本,不同版本支持的芯片范围有差异,老版本驱动可能不支持新步进的I225-V芯片。
还有一种可能是网卡虽然被识别了,但固件版本过低。有些网卡芯片在特定固件版本下和驱动存在兼容问题,这时候可以到网卡官网查询是否有固件更新。这种情况比较少见,但确实遇到过一回,更新固件后问题就好了。
4.3 生产环境使用封装镜像的注意事项
如果是生产环境使用,有几个额外的建议值得听听。生产环境追求的是稳定,不是最新,所以封装驱动的版本选择上应该偏保守,尽量使用经过验证、发布较久、社区反馈较好的驱动版本,而不是追逐最新版。
封装好的镜像要妥善保存和记录。我习惯在镜像文件名里加入封装日期和驱动列表,比如ESXi-6.7.0-U3-20240615-igb-r8125.iso,这样半年后再看也能知道这个镜像里装了什么驱动。同时建议把驱动包的原始文件和封装脚本一起存档,方便以后复现同样的封装过程。
生产环境安装完成后,务必在所有需要使用的物理网卡上做一次连通性测试,确保每个网口都能正常工作,而不只是安装时识别到一个网卡就当作成功。我见过有同事封装后只测了一个网口,上线发现另一个网口不通,结果排查半天才发现是驱动版本对应不上,郁闷得不行。
4.4 给新手的几条独家建议
最后再说几条我在实际操作中攒下来的心得,这些都不是能在官方文档里直接看到的内容。
第一,封装过程最好在虚拟机里跑,而不是自己的主力物理机。因为ESXi-Customizer-PS脚本在运行过程中可能会修改系统网络设置、挂载ISO镜像,有一定风险。我习惯在VMware Workstation里装一台Windows虚拟机专门干封装,这样出问题不影响主系统。
第二,驱动depot包最好分类存放,不要所有驱动一股脑放一个文件夹。因为有些驱动之间存在依赖关系,如果脚本在处理时顺序不对,可能导致依赖缺失。我习惯每个网卡型号一个文件夹,用的时候再复制到统一目录。如果你对脚本的运行机制不熟悉,多目录管理能减少很多麻烦。
第三,封装过程中要保持网络连接稳定,不要中断。虽然脚本支持断点续传,但中断后再恢复有时会出现缓存不一致的问题,导致最终镜像异常。我吃过两次亏,一次是网络中断导致脚本反复报错,另一次是笔记本休眠导致封装进程被杀,所以现在每次封装前都会把Windows的休眠功能临时关掉。