1. 环境准备:搭建离线封装工作流
在开始动手之前,我们需要像搭积木一样准备好所有组件。我遇到过不少朋友因为漏掉某个依赖项,导致整个过程卡壳的情况。为了避免这种尴尬,建议按照以下清单逐项核对:
核心工具:
ESXi-Customizer-PS-v2.6.0.ps1这个PowerShell脚本相当于我们的"魔法棒",它能将驱动和原版镜像融合。官网和GitHub都能下载,但要注意网络环境可能导致下载中断。我习惯用curl -O命令直接拉取,比浏览器下载更稳定。基础镜像:
ESXi670-202210001.zip是VMware官方发布的离线包,相当于操作系统的基础骨架。有个常见误区是误下载成在线安装包,这里务必确认文件名带有"Offline Bundle"字样。建议通过VMware客户门户获取,避免使用第三方来源的镜像。网卡驱动:
Realtek_bootbank_net-r8125_9.007.01-1.vib这个文件就像给ESXi的"心脏搭桥"。GitHub上有多个版本,要认准9.007.01这个版本号。实测发现某些主板对驱动版本极其敏感,比如华擎B560M-HDV就需要这个特定版本。操作系统:Win10环境是必须的,但要注意两点:一是必须使用管理员权限,二是PowerShell版本不能低于5.1。可以用
$PSVersionTable命令查看版本,如果显示4.0可能需要升级.NET Framework。
建议专门创建一个工作目录,比如C:\ESXi_Patch。这个路径要尽量短且不含空格,避免后续脚本处理时出现路径解析问题。我见过有人用中文路径导致脚本报错的案例,这点尤其要注意。
2. 配置PowerShell环境:绕过那些坑
第一次运行PowerCLI时,系统会像过度保护的家长一样各种阻拦。我们需要通过三个关键步骤解除限制:
安装VMware.PowerCLI模块:
Install-Module -Name VMware.PowerCLI -Force -AllowClobber这个命令中的
-Force参数可以强制安装最新版本,避免出现版本冲突。执行时可能会遇到PSGallery仓库信任提示,直接按A全部接受即可。如果遇到网络超时,可以尝试设置代理:[System.Net.WebRequest]::DefaultWebProxy = New-Object System.Net.WebProxy('http://proxy.example.com:8080')修改执行策略:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser这里我推荐用
RemoteSigned而不是Unrestricted,安全性更高。有个实用技巧是临时修改策略,操作完成后恢复默认值:$originalPolicy = Get-ExecutionPolicy Set-ExecutionPolicy RemoteSigned -Scope Process # 执行封装操作... Set-ExecutionPolicy $originalPolicy -Scope Process处理证书错误: 如果遇到SSL证书报错,可以临时关闭验证(仅限测试环境):
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }
建议在每次重大操作前用Get-Module -ListAvailable VMware.*检查模块状态。我遇到过模块加载失败但无报错的情况,这时候需要先Remove-Module再重新导入。
3. 文件目录结构:像乐高一样精准拼接
目录结构看似简单,实则暗藏玄机。根据我的踩坑经验,推荐采用这种树形结构:
ESXi_Patch/ ├── ESXi-Customizer-PS-v2.6.0.ps1 ├── ESXi670-202210001.zip └── drivers/ ├── net-r8125/ │ └── Realtek_bootbank_net-r8125_9.007.01-1.vib └── other_drivers/ # 可选的其他驱动目录这种结构有三大优势:
- 路径清晰:所有文件相对路径固定,避免绝对路径带来的迁移问题
- 扩展性强:后续添加其他驱动时不会破坏原有结构
- 便于排错:当驱动冲突时能快速定位问题源
有个实用技巧是在脚本同级目录创建config.ps1文件,定义全局变量:
$BaseDir = $PSScriptRoot $OfflineBundle = Join-Path $BaseDir "ESXi670-202210001.zip" $DriverDir = Join-Path $BaseDir "drivers\net-r8125"4. 执行驱动封装:见证魔法时刻
来到最关键的封装阶段,这里分享几个实战技巧:
基础命令:
.\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\ESXi670-202210001.zip -pkgDir .\drivers\net-r8125 -outDir .\output -nsc参数说明:
-izip:指定离线包路径-pkgDir:驱动目录-outDir:输出目录(建议单独创建)-nsc:跳过证书检查(适用于内网环境)
高级技巧: 如果想保留多个版本的镜像,可以使用动态命名:
$Timestamp = Get-Date -Format "yyyyMMddHHmmss" $OutputISO = "ESXi6.7U3_RTL8125B_${Timestamp}.iso" .\ESXi-Customizer-PS-v2.6.0.ps1 ... -outFile $OutputISO性能优化: 在资源有限的机器上,可以添加内存限制:
$ProgressPreference = 'SilentlyContinue' Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `".\ESXi-Customizer-PS-v2.6.0.ps1 ...`"" -PriorityClass BelowNormal
封装过程通常需要5-15分钟,期间CPU使用率会明显上升。建议关闭不必要的应用程序,特别是杀毒软件实时监控。
5. 验证与排错:给镜像做"体检"
生成ISO文件后,我们需要进行三重验证:
基础验证:
Get-FileHash .\output\ESXi-6.7.0-20221004001-standard-customized.iso -Algorithm SHA256记录哈希值,确保每次生成的镜像一致。
结构检查: 使用7-Zip查看ISO内部结构,正常应该包含:
EFI/目录boot.cfg文件IMAGES/目录 如果缺少这些关键组件,说明封装过程有问题。
虚拟机测试: 在VMware Workstation中新建虚拟机测试安装:
$VMX = New-VM -Name "ESXi_Test" -MemoryGB 8 -DiskGB 40 -ISO (Resolve-Path .\output\*.iso).Path Start-VM $VMX重点观察:
- 安装过程中是否识别到虚拟网卡
- 安装完成后
esxcli network nic list命令的输出 - 网络连通性测试
常见错误及解决方案:
- 错误1:
Unable to find ImageProfile解决方法:检查离线包是否完整,建议重新下载 - 错误2:
VIB package is corrupted解决方法:用Get-VIBHeader检查驱动文件完整性 - 错误3:
Acceptance level conflict解决方法:添加-acceptanceLevel CommunitySupported参数
6. 进阶技巧:打造全能安装镜像
掌握了基础操作后,可以尝试这些进阶玩法:
多驱动集成:
.\ESXi-Customizer-PS-v2.6.0.ps1 -izip .\ESXi670-202210001.zip -pkgDir @('.\drivers\net-r8125','.\drivers\nvme') -load net55-r8168同时集成多个设备驱动,
-load参数可以保留原有驱动。自定义安装脚本: 在ISO的
ks.cfg中添加预安装脚本:%post --interpreter=busybox esxcli software vib install -v /tmp/extra_drivers/net-r8125.vib --no-sig-check自动化构建: 创建
build.ps1脚本实现一键封装:param( [string]$Version = "6.7.0-20221004001", [string]$OutputDir = ".\output" ) # 自动下载最新驱动 $DriverURL = "https://github.com/realtek/.../net-r8125.vib" Invoke-WebRequest -Uri $DriverURL -OutFile "$DriverDir\latest.vib" # 执行封装 .\ESXi-Customizer-PS-v2.6.0.ps1 -izip "ESXi$($Version).zip" -pkgDir $DriverDir数字签名: 对生成的ISO进行签名:
$Cert = Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert Set-AuthenticodeSignature -FilePath .\output\ESXi-custom.iso -Certificate $Cert
7. 物理机部署实战经验
在真实服务器上部署时,这些经验可能会救你一命:
主板兼容性:
- 华硕B460/B560系列:需要在BIOS中关闭Secure Boot
- 微星Z490系列:建议禁用板载Intel网卡
- 戴尔PowerEdge:可能需要调整PCIe bifurcation设置
安装技巧:
- 使用Rufus写入USB时选择"DD模式"
- 遇到安装卡顿时,添加
nomodeset启动参数 - 对于NVMe存储,添加
ignoreHeadless=TRUE参数
驱动加载验证:
esxcli software vib list | grep r8125 vmkload_mod -l | grep r8125 dmesg | grep -i r8125性能调优:
esxcli system module parameters set -m net-r8125 -p "speed=1000 duplex=full" esxcli network nic set -n vmnic0 -A false -S false
遇到网卡频繁断连时,可以尝试调整中断节流:
ethtool -C vmnic0 rx-usecs 0 tx-usecs 08. 长期维护建议
系统上线后,这些维护技巧能让你高枕无忧:
驱动更新: 创建定期检查脚本:
$LatestDriver = Invoke-RestMethod -Uri "https://api.github.com/repos/realtek/drivers/tags" if($LatestDriver.name -ne (Get-Content .\version.txt)){ # 触发自动构建流程 }备份策略:
vmkfstools --createvirtualdisk 2G --thin /vmfs/volumes/datastore1/driver_backup.vmdk tar -czf /vmfs/volumes/NFS/backup/esxi_config_$(date +%Y%m%d).tgz /etc/vmware /bootbank监控配置: 在vCenter中创建自定义警报:
esxcli system snmp set -c "public" esxcli system snmp set -L "Critical driver issues"回滚方案:
esxcli software vib rollback -d net-r8125 esxcli software profile update -p /tmp/old_profile.zip
建议每季度检查一次驱动更新,特别是在计划进行vCenter升级前。我维护的一个集群就曾因为驱动版本滞后导致vMotion失败,这个教训值得记取。