ESXi 8.0封装RTL8168网卡驱动:从原理到镜像一次搞定
如果你手里正好有一台用了Realtek RTL8111/8168网卡的主机,比如不少消费级主板、迷你主机、工控机,想装ESXi 8.0,大概率在安装界面就会卡在“没有可用网卡”这一步。ESXi 8.0官方镜像默认不带RTL8168的驱动,而Realtek这个系列的网卡在桌面和低功耗平台上的占有率又高得离谱,这就形成了一个很尴尬的局面:机器本身完全能跑虚拟化,但安装程序连网卡都不认。
这篇文章就把RTL8168驱动的封装流程完整拆开讲一遍,从为什么要封装、驱动文件去哪找,到Windows和Linux两条封装路线都怎么做,再到写盘安装后的验证,最后附上我踩过的坑和排查思路。适合正在折腾ESXi 8.0安装、或者是批量给工控机部署虚拟化环境的朋友参考。
1. 先搞清楚为什么要封装驱动,而不是绕过去
1.1 ESXi 8.0对网卡支持的逻辑变化
ESXi和普通Linux发行版不一样,它不是一个“装完系统再装驱动”的体系。ESXi内核里能加载什么驱动,基本由安装镜像里带的VIB(vSphere Installation Bundle)决定。VIB可以理解成ESXi的驱动和扩展包,类似Windows下的.inf驱动文件,但管理方式严格得多。
ESXi 8.0相比7.0有一个重要变化:移除了vmklinux兼容层。这意味着大量老旧的、依赖vmklinux的第三方网卡驱动在8.0上直接失效。RTL8168的驱动恰好属于受影响比较大的那一批,所以8.0时代封装驱动比7.0时代更依赖社区维护的native driver版本。
另外一个现实问题是:ESXi安装程序在安装阶段会扫描网卡,如果没有可用网卡,图形安装界面会直接提示“No network adapters detected”,连分区和设置root密码的步骤都走不完。所以这个驱动不是“装完系统再去补”,而是必须在安装镜像阶段就塞进去,让安装程序在启动时就能识别到网卡。
1.2 换网卡 vs 封装驱动的方案对比
遇到ESXi不认网卡,很多人的第一反应是换一张Intel网卡,这确实是最“省事”的路线。Intel的e1000e、igb、ixgbe系列驱动在ESXi里属于官方自带,插上就能用,兼容性几乎不用操心。
但换网卡这条路在某些场景下走不通:
- 迷你主机、NUC、笔记本改装的虚拟化机器,网卡是板载的,根本没有扩展槽。
- 工控机、软路由设备,网口数量是固定的,换卡意味着要改硬件方案。
- 批量部署时,机器已经采购到位,不可能因为驱动问题一台台拆机换网卡。
封装驱动的本质是“不改硬件,只改安装介质”,把ESXi官方ISO里没有的驱动打进去,生成一个新的可引导镜像。这个操作一次做完,之后安装每一台机器都用这个定制镜像,成本和换网卡相比几乎可以忽略。
所以我的观点是:如果是自己家里一台机器折腾,换网卡确实省心;如果是批量部署、硬件不可变、或者你想完全掌握平台定制的流程,封装驱动是绕不开的技能。
1.3 什么情况下你需要学封装而不是找现成ISO
网上其实有人已经做好的“ESXi 8.0集成RTL8168驱动”ISO,直接下载就能用。但我的建议是,如果你打算认真搞虚拟化,这个封装流程还是应该自己走一遍。
原因有三:
第一,第三方整合ISO的来源和完整性无法保证。你并不知道制作者在镜像里塞了什么额外的东西,在安全敏感的环境里,用来源不明的镜像本身就是风险。
第二,驱动版本需要和ESXi版本严格对应。ESXi的补丁版本一直在更新,从8.0到8.0 Update 1、Update 2,内核版本号和驱动API都在变,老的整合ISO可能装不上新的ESXi版本,这时候你自己会封装就能随时重新做一个。
第三,理解封装机制对后续运维有巨大帮助。ESXi的镜像定制不只是网卡驱动一条路,之后可能还要集成RAID驱动、NVMe驱动、第三方管理组件,掌握了VIB封装和镜像配置文件的机制,这些都是同一套思路。
2. 驱动选型和镜像定制的核心逻辑
2.1 RTL8168驱动在ESXi 8.0下的正确选择
RTL8168和RTL8111是Realtek同一系列的不同型号,它们的驱动通常是共用的。在ESXi世界里,这个系列的社区驱动维护者是社区开发者,对应的VIB包通常命名为net55-r8168或类似格式。
选驱动的时候最关键的判断标准是:这个VIB必须是为ESXi 8.0编译的native driver版本,而不是依赖vmklinux的老版本。怎么判断?看VIB包的构建信息,或者直接看发布页面是否明确写了支持ESXi 8.0。装错版本的结果是驱动能装进镜像,但在8.0上加载时报错,白白浪费时间。
驱动版本号和ESXi版本的对应关系大致是这样的:ESXi 8.0初期用的驱动版本可能只有某个版本号,8.0 Update 1之后内核API有调整,驱动也跟着出了新版本。实操中我的做法是:每次做镜像前先去驱动发布页面看一眼最新版本,不要用几个月前的旧包。
2.2 VIB、镜像配置文件和ISO三者之间的关系
很多第一次做封装的同学会被这几个概念搞混,我这里用大白话拆开讲。
VIB是驱动本身,是一个以.vib为后缀的文件,里面包含了驱动二进制、元数据、依赖关系描述。它相当于一颗“药丸”。
镜像配置文件(Image Profile)是ESXi镜像的“配方”,它描述了一个ESXi系统由哪些VIB组成。官方ISO本身对应一个默认的profile,比如ESXi-8.0.0-standard。封装驱动的过程,本质上就是“克隆一个官方profile,往里面加一个额外的VIB,再导出成新ISO”。
ISO是最终的可引导镜像文件。ESXi的ISO和普通Linux的ISO结构不同,它包含了引导加载器、安装程序、以及一个经过压缩的系统镜像,这个系统镜像里打包了profile对应的所有VIB。
所以整个链路是:VIB文件加入Profile,Profile导出为ISO。理解了这个关系,后面操作就不会糊涂。
2.3 两种封装路线:PowerCLI vs ESXi Shell
封装驱动在实操层面有两条主流路线,我分别说一下适用场景。
第一条是Windows下用VMware PowerCLI,通过Add-EsxSoftwareDepot和New-EsxImageProfile这些cmdlet操作。这条路的好处是不需要一台已经装好ESXi的机器作为中转,只要有PowerCLI环境就行,适合从零开始定制镜像的场景。
第二条是Linux下用esxcli命令,但有个前提条件:你得有一台已经能跑起来的ESXi主机(哪怕是临时的),因为esxcli是从运行中的ESXi系统上去操作Image Profile。这条路适合已经有ESXi环境、想顺手做个定制ISO的情况。
我自己的习惯是优先用PowerCLI,因为纯Windows环境就能完成,不依赖任何现有ESXi主机,脚本化也方便。下面重点讲这条路线,Linux的命令行方法也会顺带说明。
3. 实际操作:用PowerCLI封装RTL8168驱动到ESXi 8.0镜像
3.1 准备阶段:工具、文件和环境检查
开始操作前,先把需要的东西列清楚:
- 一台Windows电脑(Windows 10/11均可)
- VMware PowerCLI(安装方法见下文)
- ESXi 8.0官方ISO镜像(从VMware官网下载)
- RTL8168的vib驱动文件(具体获取方式见下文)
- 一个U盘或用于写盘的软件
第一步是安装PowerCLI。打开PowerShell(管理员模式),执行:
Install-Module -Name VMware.PowerCLI -Scope CurrentUser安装完成后执行:
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -ParticipateInCEIP $false这个命令是为了忽略证书校验和关闭CEIP数据收集,避免后续连接vCenter或ESXi时因为证书问题报错。注意这个忽略证书的设置本身只对后续连接操作生效,当前的任务是本地操作,但不设这一步后面有些cmdlet会额外弹提示。
第二步是准备vib文件。RTL8168驱动的vib文件在社区维护者的发布页面可以找到,文件名通常类似net55-r8168-8.xxx.x86_64.vib。下载后先确认文件大小和校验值,避免下载损坏。
第三步是准备ESXi官方ISO。注意:封装驱动的ISO和安装用的ISO是同一个文件,我们操作时会把官方ISO作为depot导入。
3.2 从官方ISO创建软件仓库并添加VIB
核心操作是Add-EsxSoftwareDepot,官方ISO本身就是一个offline depot。我们在PowerShell里执行:
Add-EsxSoftwareDepot -DepotUrl "C:\isos\VMware-ESXi-8.0-xxxxxxx.iso"这个命令会把ISO里面的所有VIB信息读入PowerCLI会话。执行后可以用Get-EsxSoftwareDepot确认是否成功。
然后继续添加VIB文件:
Add-EsxSoftwareDepot -DepotUrl "C:\drivers\net55-r8168-8.xxx.x86_64.vib"注意这里Add-EsxSoftwareDepot既可以接ISO路径也可以接vib文件路径。添加完成后,vib包对应的软件包会进入同一个depot列表里。
这一步经常遇到两个问题:一是ISO路径中有中文或空格导致读取失败,建议工作目录全部用英文路径且不要有空格;二是vib文件本身的数字签名验证失败,如果是来自社区的非官方签名包,后面在创建profile时可能还需要指定强制接受。
3.3 创建自定义镜像配置文件并添加驱动包
现在用Get-EsxImageProfile看一下当前可用的profile:
Get-EsxImageProfile输出里会有一个类似ESXi-8.0.0-standard的profile,这个就是官方的默认配置。我们以它为蓝本克隆一个自定义profile:
New-EsxImageProfile -CloneProfile "ESXi-8.0.0-standard" -Name "ESXi-8.0-rtl8168" -Vendor "homelab"接着把这个profile赋给一个变量,方便后续操作:
$profile = Get-EsxImageProfile -Name "ESXi-8.0-rtl8168"然后添加RTL8168驱动包。软件包名称用Get-EsxSoftwarePackage查一下:
Get-EsxSoftwarePackage -DepotUrl "C:\drivers\net55-r8168-8.xxx.x86_64.vib"记下name字段,然后执行:
Add-EsxSoftwarePackage -ImageProfile $profile -SoftwarePackage "net55-r8168"如果vib包签名有问题,会提示无法添加,可以使用-Force参数忽略签名错误。这里提醒一下:-Force的本质是绕过签名校验,如果vib文件来源不可信,千万别用,否则等同于在系统里放一个未经验证的内核模块。
3.4 验证驱动是否真正进入profile
添加完成后,最好先验证一下,确认驱动没有和现有VIB冲突,以及profile处于可导出状态:
Get-EsxImageProfile -Name "ESXi-8.0-rtl8168" | Export-EsxImageProfile -ExportToIso -FilePath "C:\isos\ESXi-8.0-rtl8168.iso" -Force等待导出完成,ISO文件名不要和官方ISO重名,放到一个单独的文件夹里。导出过程一般2-4分钟,取决于磁盘速度。
导出完成后,建议再把这个ISO作为新depot导入一次,看看里面是否真的有rtl8168驱动:
Add-EsxSoftwareDepot -DepotUrl "C:\isos\ESXi-8.0-rtl8168.iso" Get-EsxSoftwarePackage | Where-Object {$_.Name -like "*r8168*"}如果能看到对应的软件包,说明驱动已经成功打进ISO。
3.5 Linux环境下的备用封装方案
如果你手头没有Windows,或者PowerCLI装不上,可以走Linux + esxcli的路线。前提是你已经有一台ESXi主机在运行,并且ssh已开启。
第一步,把官方ISO和vib文件上传到ESXi主机的datastore或/tmp目录。然后ssh登录ESXi:
esxcli software vib install -d /tmp/net55-r8168-8.xxx.x86_64.vib --no-sig-check这里--no-sig-check同样是对签名校验的绕过,只在驱动本身可信的情况下使用。安装完成后确认:
esxcli software vib list | grep r8168模块加载后是running状态。接着用export方式导出定制ISO:
esxcli software profile export --profile=ESXi-8.0-rtl8168 --export-to-iso=/tmp/ESXi-8.0-rtl8168.iso注意:这个方案的前提是先把驱动在线装到现有ESXi上,然后导出profile。它不如PowerCLI灵活,但胜在不需要额外装PowerCLI环境。
4. 写盘安装和第一次启动验证
4.1 制作ESXi安装U盘的正确姿势
ISO封装好之后,写盘工具的选择直接决定你能不能顺利引导。
Windows下我推荐Rufus或balenaEtcher。两者都支持把ISO以DD模式写入U盘。有一个很多人踩过的坑:用Rufus默认的ISO模式写入ESXi的ISO,会把镜像展开成文件拷贝到U盘,导致U盘无法引导。ESXi的ISO必须用DD镜像模式写入,Rufus里选择“DD Image mode”即可。
Linux下用dd命令直接写盘最稳妥:
sudo dd if=ESXi-8.0-rtl8168.iso of=/dev/sdX bs=4M status=progress这里的/dev/sdX换成你的U盘设备号,写之前用lsblk确认,千万别写错盘。
另外说一句,如果你打算用Ventoy做多引导U盘,ESXi的ISO在Ventoy下启动时极大概率会报错,实测需要按F5切换到grub2模式,依然不稳定。我的建议是直接用Rufus DD模式写一个专用U盘,别在引导这步浪费时间。
4.2 安装过程中的网卡识别验证
用定制U盘启动后,ESXi安装程序会在硬件检测阶段扫一遍网络控制器。如果你能看到网卡被识别出来,安装界面会正常进入后续步骤,而不是卡在“No network adapters detected”的报错页。
RTL8168在ESXi安装界面里的设备名称一般显示为Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller。如果你看到这个名称,说明驱动已经成功加载,可以放心继续安装。
安装过程中选择的网络配置也值得注意:如果机器有多个网口,安装程序会让你选择管理网络使用的vmnic,建议先记下每个网口的物理位置,方便后续配置。
4.3 安装完成后确认驱动和网卡状态
系统装好后,ssh登录到ESXi主机,用以下命令确认驱动状态:
esxcli network nic list这个命令会列出所有被ESXi识别的物理网卡,包括驱动名称、固件版本、链路状态。如果没有问题,你应该能看到vmnic0对应的驱动是r8168。
再查一遍VIB状态:
esxcli software vib list | grep r8168状态应该是active。同时可以用:
esxcli network nic stats get -n vmnic0看网卡收发包是否正常。如果网卡up了但是ping不通外部,检查VLAN配置和Management Network的端口组设置,这属于ESXi网络配置的范畴,和驱动封装本身无关。
5. 封装过程中的常见问题和排查记录
5.1 常见问题速查表
我把实操中遇到的高频问题整理成了表格,方便你对照排查:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 安装界面提示No network adapters detected | 驱动没有真正打进ISO | 重新检查Add-EsxSoftwarePackage是否执行成功,导出后再导入ISO验证 |
| vib添加时报错signature verification failed | 非官方签名驱动,签名校验失败 | 确认vib来源可信后使用-Force参数 |
| 驱动装进ISO但系统启动后网卡不工作 | 驱动版本不兼容ESXi 8.0内核 | 下载最新版native driver,不要用老版本 |
| 导出的ISO无法引导U盘 | 写盘方式用了ISO模式而非DD模式 | 用Rufus的DD Image模式重新写盘 |
| Add-EsxSoftwareDepot报错无法打开ISO | 路径含中文空格或文件损坏 | 用英文路径重新下载官方ISO |
| 封装完成后Profile状态为invalid | VIB之间存在依赖冲突 | 在导出前用Get-EsxImageProfile -ValidityOnly检查 |
| 安装时虽然识别网卡但安装后管理IP不通 | 网卡链路up但MTU/网段配置错误 | 检查Management Network的网络配置和物理交换机端口 |
5.2 关于驱动版本和ESXi补丁版本的匹配陷阱
这里要专门提醒一个隐蔽问题。ESXi 8.0从GA版本到现在经历了多次Update,每个Update版本的kernel API不完全一样。如果你用的vib是在8.0 GA时期编译的,它很可能在8.0 Update 2上加载失败,但失败时机不是安装时,而是安装完成后第一次重启。
重启后会发现自己陷入了一个两难:网卡在安装时能被识别,系统装完了却没了网络连接,管理工具完全连不上。排查时用console登录(如果机器有显示器和键盘)或者用ilo/iDRAC看dmesg,会发现r8168模块报内核版本不匹配的错误。
所以我的建议很直接:下载vib之前先确认你要装的ESXi到底是哪个版本,尽量选择和你目标版本同期的驱动版本。最稳妥的做法是拿到vib后先临时装到测试机上验证一遍,确认重启后网卡正常,再批量使用。别在正式环境上做这个验证。
5.3 签名校验、强制安装与安全性的个人看法
关于-Force和--no-sig-check这两个参数,我多说几句。ESXi对VIB的签名机制是为了保证系统完整性,第三方社区驱动往往没有VMware官方的签名,所以在封装时必须跳过签名校验,这是真实需求。
但这也意味着你抛弃了VMware的信任链。一个合理的安全流程是:确认vib文件的来源(最好从社区维护者的官方发布页下载)、校验哈希值、有条件的话先在隔离网络测试驱动行为。批量部署环境里,这个驱动会随镜像分发到所有机器,等于你用自己的信任背书替代了官方签名,一旦出了问题,所有机器都会受影响。
我自己在做这个操作时,会保留下载时的校验信息,并且在封装记录里注明vib的版本和来源。这不是什么官方流程,纯粹是长期运维养成的习惯:镜像定制这件事,后期排查问题时最缺的就是“当初这个文件是从哪来的”这种信息。
6. 批量部署时的一些额外建议
如果你的场景是多台相同配置的机器批量安装,那封装一次ISO只是一个开始,后面这些细节会让整个部署过程顺利很多。
6.1 配置好安装脚本和kickstart
ESXi支持使用ks.cfg脚本文件实现无人值守安装。把网卡驱动封装好的ISO和kickstart结合起来,可以实现插上U盘、开机、等待、自动完成安装的全流程,不需要一台台手动点安装选项。
kickstart脚本里可以指定网络配置、存储分区、root密码(建议用加密后的哈希)、启用SSH等。思路是:ISO保证驱动识别,ks文件保证安装参数一致,两者配合,一百台机器的部署效率能提升好几个量级。
6.2 驱动封装和版本管理的常态化
我建议把封装这件事做成一个可持续的流程,而不是一次性操作。具体来说,就是建立一个自己的驱动和ISO归档目录,每个文件都包含版本信息和构建日期。每次ESXi发布新的Update,重新打一次包,然后把新ISO存好。这样当你要重装机器时,永远不会面临“手上的老镜像装不了最新版本”的尴尬。
VMware的升级周期是比较规律,对应驱动的更新频率也会跟上来。你不需要每次升级都立刻跟上,但至少以季度为单位去检查一下驱动是否有安全更新或兼容性修复,这是一个投入产出比很高的习惯。
6.3 最后的个人实践经验
在我自己折腾ESXi封装的经历里,最深的体会是:所有步骤都顺利的时候,这个操作大概只要十几分钟;但一旦出了问题,排查的难度会成倍上升。所以我的建议是,尽量在第一次就把验证步骤做到位,尤其是导出ISO后重新导入验证这一步,不要跳过。
另外一个小技巧:封装好的ISO可以在虚拟机里先测试一遍。VMware Workstation支持把ISO作为安装介质启动虚拟机,虽然虚拟机里未必需要RTL8168驱动,但至少能验证ISO的引导和安装流程没有问题。等ISO的引导和安装流程通过了,再拿到物理机上用,这样可以把“写U盘方案错误”和“ISO本身损坏”这两类问题分离开。
封装驱动的本质,其实和给Linux内核编模块、给Windows做驱动集成是一回事。掌握一次,后面遇到其他网卡、其他驱动的定制需求,思路都是通用的。希望这个教程能让你少走一些弯路。