多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

ESXi 6.7 U3网卡驱动封装:从原理到实操的完整指南

ESXi 6.7 U3网卡驱动封装:从原理到实操的完整指南 先说结论如果你手里正在用的或者准备入手的服务器/工控机/软路由用的是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。配置上不需要太高但内存建议至少8GBCPU双核就够了。必备软件包括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 RTL81252.5G网卡否是Broadcom BCM5720服务器网卡是否Mellanox ConnectX-3/4万兆/25G网卡是否从这份表格里基本可以看出2020年之后推出的网卡芯片官方支持的概率都比较低这类网卡基本都需要封装驱动才能用。3. 实操过程与核心环节实现3.1 封装环境的完整搭建准备一台Windows机器我这里用的是Windows Server 2022虚拟机内存分配了8GB磁盘分配了100GBCPU给了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 191957232021年发布的最终更新版这是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的休眠功能临时关掉。
返回列表