尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Win10下用ESXi-Customizer定制ESXi镜像,解决网卡不识别问题

Win10下用ESXi-Customizer定制ESXi镜像,解决网卡不识别问题 简介ESXi-Customizer 是 VMware ESXi 安装镜像个性化定制的常用工具可将驱动、补丁直接集成进 ISO适用于虚拟化运维工程师、IT 管理员以及需要批量部署 ESXi 的团队。压缩包内提供可在 Windows 10 下直接运行的定制版工具共 32 个文件约 3.03MB内含主程序 cmd 脚本、exe 可执行组件、dll 运行库、au3 辅助脚本及配置文件同时附有 README、CHANGES 等文本材料便于了解定制流程和参数含义。已有 2058 人学习下载。借助它可完成驱动集成、更新补丁注入、ISO 合并等典型操作尤其适合在官方镜像基础上集成网卡、阵列卡等驱动以匹配物理服务器也能用于离线封装定制好的 ESXi 安装包减少部署阶段的手工干预。1. 为什么折腾ESXi镜像一张网卡逼疯装机人如果你手里有一台闲置服务器、工控机或者魔改过的旧台式机想装个ESXi当虚拟化底座大概率会卡在同一个地方——安装界面走到一半网卡认不出来安装器直接罢工。更气人的是ESXi官方镜像里只内置了特定厂商的驱动家用网卡、Realtek、部分Intel低端型号往往不在支持列表里。我最早玩ESXi 6.7时一块Intel I219-V网卡就把我卡了两天最后靠定制镜像才装上。所谓定制就是把网卡、硬盘控制器等驱动以vib格式提前塞进ESXi安装镜像里装系统时驱动已经就位安装自然顺利。而ESXi-Customizer就是干这个活儿的工具它本质是VMware PowerCLI的图形化封装通过脚本把社区驱动vib注入到官方ISO中重新打包成一个新的可引导镜像。过去这工具在Windows老系统上跑得欢到了Win10身上问题就来了.NET环境冲突、PowerShell执行策略拦截、PowerCLI模块加载崩溃一个接一个。网上很多教程还停留在Win7时代照着抄十有八九跑不起来。这篇文章就把我在Win10下用ESXi-Customizer定制的完整过程、踩过的坑、校验方法一次讲清楚。2. Win10环境下的运行准备JDK、PowerCLI、执行策略三大件2.1 先确认你的Win10缺了什么ESXi-Customizer有两个大版本一个是老牌的GUI版本一个是后来社区维护的PowerShell脚本版。不管哪个在Win10上都绕不开三样东西Java运行环境、VMware PowerCLI、PowerShell执行策略。我实测过缺了任何一个工具要么闪退要么报错报得莫名其妙。老GUI版本是esxi-customizer-v2.8.1它依赖Java环境来做ISO重新打包。Win10如果只装了JRE 8问题不大但如果之前装过更高版本JDK有时反而会因为JAVA_HOME环境变量没配好导致启动失败。另外PowerCLI必须装对应ESXi版本的模块比如定ESXi 6.7就装PowerCLI 6.5.0定7.0就装10.x以上版本新旧混装很容易出现Get-EsxImageProfile都跑不了的情况。注意PowerCLI的安装方式在Win10上推荐走PowerShell Gallery别去官网手动下安装包。后者依赖的组件版本经常和Win10自带的Windows PowerShell 5.1打架装完一堆红字错误。2.2 PowerShell执行策略是最容易被忽略的拦路虎Win10默认的PowerShell执行策略是Restricted说白了就是不让跑任何未签名的脚本。ESXi-Customizer的PowerShell版通常叫esxi-customizer-v2.ps1属于未签名脚本直接运行会被一棒子打死。很多人在命令行里敲.\esxi-customizer-v2.ps1系统弹出一行无法加载因为在此系统上禁止运行脚本人就懵了。解决办法是管理员权限打开PowerShell执行Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force这个命令的意思是本机写的脚本可以跑从网上下载的脚本必须经过签名才能跑。设置完用Get-ExecutionPolicy验证一下返回RemoteSigned就对了。如果不改执行策略后面无论你脚本参数填得多对都白搭。2.3 Java环境变量和PowerCLI的连带坑装完JDK后Win10里如果环境变量没配好ESXi-Customizer的GUI版本会在启动时弹出一个小黑窗然后立刻消失像什么都没发生一样。我排查了很久才发现是JAVA_HOME指向了不存在的路径。建议在系统环境变量里新建JAVA_HOME C:\Program Files\Java\jre1.8.0_281然后在Path里加上%JAVA_HOME%\bin。如果你同时装了多个Java版本注意让JAVA_HOME指向8版本ESXi-Customizer的老代码对高版本JDK有些兼容性问题倒不是说完全跑不了但部分按钮会失灵。PowerCLI安装也有讲究。老GUI版工具本质是调用PowerCLI的cmdlet所以PowerCLI版本必须匹配你定制的ESXi版本。装错版本后工具界面里选择ESXi版本的下拉框可能显示正常但点Run之后日志会直接报错。我建了个简单的对照表方便排查目标ESXi版本推荐PowerCLI版本推荐Java版本备注ESXi 6.5PowerCLI 6.5.0JRE 8老版本兼容性最好ESXi 6.7PowerCLI 6.5.0或10.xJRE 810.x需注意脚本兼容ESXi 7.0PowerCLI 12.xJRE 8官方已建议弃用GUI工具ESXi 8.0不推荐用此工具不推荐建议用Image Builder如果你要定制的目标是ESXi 8.0我建议你直接放弃ESXi-Customizer官方在7.0时代就不再维护这个工具了8.0的新驱动格式和离线包机制变化很大老工具塞不进去。真要定制8.0用VMware官方的Image Builder配合PowerCLI更靠谱虽然学习曲线陡一点但至少不会把镜像搞坏。3. 定制ISO的操作细节GUI弹窗和命令行两种路径3.1 GUI版本的基本操作流程工具启动后界面逻辑相当直白。第一行让你选择官方ESXi ISO第二行填写驱动目录或指定vib文件第三行选择输出路径。我一般把网卡驱动下载后解压到一个文件夹里比如D:\drivers\net48然后在工具里选这个文件夹它会自动扫描其中所有vib并集成进去。需要注意工具默认勾选了定制后删除旧驱动这个选项慎用。有一次我不小心勾着它定制镜像结果装完系统后发现某些热插拔存储设备不识别了排查半天才意识到是镜像里被清理掉了相关驱动。建议保持默认不勾选让工具把新驱动加进去旧驱动保留哪怕有冗余也比丢了强。点击Run之后工具会启动PowerCLI环境这时候能看到一堆命令快速滚动类似于Add-EsxSoftwareDepot C:\offline-bundle\Net55-r8168.zip New-EsxImageProfile -CloneProfile ESXi-6.7.0-20181002001-standard -Name ESXi-6.7-custom Add-EsxSoftwarePackage -ImageProfile ESXi-6.7-custom -SoftwarePackage net-r8168 Export-EsxImageProfile -ImageProfile ESXi-6.7-custom -ExportToIso -FilePath D:\ESXi-6.7-custom.iso整个定制过程大概持续五到十分钟取决于ISO大小和电脑性能。日志里如果每一行都正常返回最后会生成一个新的ISO文件路径就是你指定的输出位置。3.2 命令行版本更适合排错和自动化GUI版本方便归方便但有个致命弱点——它把PowerCLI的完整输出吞掉了一大半一旦定制失败错误原因只能看到一个笼统的弹窗没法定位问题。所以我后来更倾向于直接用PowerShell脚本版。命令行版叫esxi-customizer-v2.ps1使用方法很直接.\esxi-customizer-v2.ps1 -isoFile D:\VMware-VMvisor-Installer-6.7.0.iso -vibDir D:\drivers -outDir D:\custom参数含义分别是官方ISO路径、驱动目录、输出目录。脚本会自动调用PowerCLI完成注入和打包并把详细日志显示在控制台里任何一步出错都能看到具体命令的错误信息。这个模式在排查vib兼容性时特别好用。另外命令行版还支持直接用vib文件而不是整个目录.\esxi-customizer-v2.ps1 -isoFile D:\VMware-VMvisor-Installer-6.7.0.iso -vibFile D:\drivers\net-r8168.vib -outDir D:\custom如果你的驱动只有一个文件这样指定更干净也避免工具扫描目录时把不相关的vib一起塞进去。3.3 驱动vib的获取与匹配规则驱动来源这里多啰嗦几句。ESXi的驱动不是Windows那种exe安装包而是后缀为.vib的文件本质上是一个压缩包里面包含了驱动模块和元数据。社区驱动大多来自各大网卡厂商的官网支持页面或者一些第三方驱动仓库。匹配规则只有一个核心vib必须对应你目标ESXi版本的内核。ESXi 6.7的内核版本和7.0不一样驱动自然也不通用。我见过有人拿着6.5的网卡vib去定7.0的镜像定制过程完全不报错但装系统时驱动加载失败卡在同样的位置等于白忙活。下载vib后建议先用压缩软件如7-Zip打开看一眼内部结构确认里面有没有vmware-esx-drivers-net之类的路径如果看起来结构不像vib那八成是下错了文件。还有一种方法是在PowerShell里直接读取vib元数据Get-Content D:\drivers\net-r8168.vib -TotalCount 5如果是有效的vib头部会有类似# vSphere Installation Bundle的标识一眼就能认出来。4. 装机时的校验与排错怎么确认驱动真的进去了4.1 定制完先别急着装验证一下很多人的习惯是定制完ISO直接写U盘装到一半才发现驱动没被识别回头又从头折腾。实际上验证驱动是否成功集成进镜像只需要一个ISO查看工具即可。用7-Zip打开定制后的ISO进入vendor目录展开tboot目录下的mboot.c32等文件比较麻烦更直接的办法是搜索ISO内部是否包含你注入的vib文件名。比如你注入了net-r8168.vib在ISO里搜索r8168就能定位到集成位置。能搜到名字说明打包成功搜不到说明注入过程静默失败了后续装机自然白搭。还有一种更底层的方式在安装ESXi的引导界面按ShiftO取决于版本有的按ShiftF进入引导参数编辑加入-v参数进入详细日志模式系统启动时会打出完整的驱动加载日志。如果你的网卡驱动没有列在里面说明镜像确实没带上这时候只能回头重新定制没有捷径。4.2 U盘写入时的常见翻车现场定制好的ISO写U盘我见到的翻车类型主要是两类。一类是用了老旧的写入工具导致U盘无法引导或者引导后出现No bootable device报错。另一类是写完后U盘在别的电脑上正常但在目标服务器上死活引导不了——这通常是U盘格式和UEFI/BIOS启动模式不匹配。我推荐的做法是直接用Rufus写入模式选择DD镜像方式不是ISO镜像方式。ESXi的ISO本质上不是普通ISO标准结构它混合了UEFI和BIOS引导逻辑Rufus的DD模式能原样写入整个镜像文件保证引导区完整。选错模式虽然也能写入但有时会丢失引导信息。写入完成后建议在目标机器上先用UEFI方式启动试试如果UEFI模式起不来再改用Legacy BIOS模式。我遇到过一些主板UEFI模式下死活不认定制ISO的引导切换到Legacy后一切正常。这种问题属于主板固件兼容性和定制本身无关。4.3 装完系统后驱动是否真正加载成功系统装好后进入ESXi管理界面在网络菜单下能看到物理网卡列表如果网卡的型号、固件版本正常显示说明驱动加载OK。如果显示未知或者整个网卡列表为空有两种可能一是驱动虽然集成了但版本和网卡硬件不匹配二是驱动被ESXi识别为第三方未签名模块需要在引导选项里开启允许加载第三方模块。从ESXi 6.5开始如果检测到未签名的vib模块系统默认会拒绝加载。解决方法是在引导参数中追加autoPartitionOSDataSize8000 allowLegacyCPUtrue然后加一行vmbootallowUnknownVibs实际上ESXi 6.7以上的版本如果vib是未签名状态安装时就会有明显的警告提示并有VIB状态显示为Acceptance Level: CommunitySupported这种vib必须通过以下命令强制标记为可接受esxcli software acceptance set --levelCommunitySupported如果进入系统后网卡不工作执行esxcli network nic list看看驱动模块的状态再用vmkload_mod -l | grep r8168检查模块是否已经加载。能查到模块加载记录但网卡状态是down那就是配置文件的问题和定制无关了。5. 定制镜像的边界与后续维护什么时候不该用5.1 别把ESXi-Customizer当成万能药这工具能解决网卡不认的问题不假但它不是万能的。首先它只做软件打包解决不了硬件本身不兼容的问题。如果你的网卡芯片太新厂商根本没有发布对应ESXi版本的vib驱动那再怎么定制也是白搭。其次ESXi官方向来对非白名单硬件有诸多限制比如某些CPU型号、特定的RAID控制器即使网卡驱动搞定了其他硬件也可能成为新的拦路虎。我遇到过一台HP的Gen8服务器网卡驱动定制得很顺利但装完系统后ESXi始终识别不了板载的B320i RAID控制器导致无法创建虚拟机存储。这种问题属于RAID控制器驱动缺失和网卡驱动是两个独立的东西需要单独找对应的vib来注入ESXi-Customizer本身不会自动帮你补齐所有驱动。5.2 定制镜像的后续维护思路定制完的ISO不等于一劳永逸。ESXi的补丁更新、驱动版本升级都需要重新定制。我通常的做法是保留一份官方原版ISO作为基准每次需要更新时在官方最新镜像基础上重新跑一次定制流程而不是直接修改上一次的定制ISO。这样做的好处是避免旧版驱动残留带来的未知问题。如果你的定制需求比较频繁可以尝试使用esxi-customizer-v2.ps1配合批处理脚本把常用驱动目录、输出目录写死以后只需双击运行就能完成一次标准化定制。我个人的做法是在Windows计划任务里挂了一个任务每个月检查一次官方是否有新版本ISO放出有的话自动下载并执行定制脚本整个流程已经半自动化了。5.3 从ESXi-Customizer迁移到Image Builder如果你要维护多台不同年代的服务器或者需要同时管理多个ESXi版本我的建议是在合适的时间点从ESXi-Customizer迁移到VMware官方Image Builder。两者的核心逻辑一致都是把vib注入到镜像配置文件中并重新打包但Image Builder提供了更精细的控制能力比如可以精确指定驱动版本的增减、设置镜像接受级别、生成带自定义驱动的离线depot包等等。迁移成本不大因为命令行的思路和esxi-customizer-v2.ps1很像核心命令就是Add-EsxSoftwareDepot -DepotUrl https://host/vmware-esxi-7.0.zip New-EsxImageProfile -CloneProfile ESXi-7.0-standard -Name ESXi-7.0-custom Add-EsxSoftwarePackage -ImageProfile ESXi-7.0-custom -SoftwarePackage net-r8168 Export-EsxImageProfile -ImageProfile ESXi-7.0-custom -ExportToIso -FilePath D:\ESXi-7.0-custom.iso这套命令用熟了之后你会发现它比GUI工具更好用尤其适合在脚本里做自动化。不过就我个人的经验如果你的环境还是老ESXi版本6.5/6.7继续用ESXi-Customizer没有任何问题工具虽然不再维护但稳定性和兼容性都经过了大量实战检验没必要为了新而新。6. 最后再分享一个实际使用的细节整个定制流程中最容易让人忽略但影响最大的其实是vib驱动的来源。很多朋友从网上下载驱动解压后发现里面既有vib文件又有一些说明文档就随便选一个vib塞进去了。实际上很多驱动的发布包里包含多个vib文件比如一个用于安装环境的、一个用于运行时加载的、还有用于特定硬件的细分版本。如果选错定制时打包不报错装系统时才出问题。我的做法是下载驱动后先用7-Zip把vib文件解压出来看看里面payload文件夹下有没有对应网卡型号的模块文件。以Realtek的r8168为例它的vib里会包含r8168相关的.ko文件也就是内核模块。看到这个文件名和你的网卡硬件吻合再放心注入。还有一点定制ISO完成后最好在虚拟机里先做一次验证比如用Workstation或VirtualBox挂载这个ISO安装一个临时的ESXi实例确认网卡驱动能正常识别后再拿到真实服务器上操作。比起反过来在物理机上失败后反复折腾虚拟机里的成本低得多逻辑完全一致只是少了真实硬件加载部分。虚拟机里都起不来的话物理机上大概率也是白搭。这个验证步骤虽小但能帮你省下大半天时间。本文还有配套的精品资源点击获取
返回列表