简介:面向虚拟化运维与基础设施管理人员的 VMware ESXi 8.0 Update 2 离线 depot 更新包,适用于无互联网环境下的 ESXi 主机批量升级、补丁导入或定制安装镜像场景,已有虚拟化基础的工程师可直接上手。压缩包内共 124 个文件,其中包含 121 个 vib 组件包、2 个 xml 元数据文件及 1 个主 zip 包,整体大小约 587.17 MB。vib 文件覆盖 esx-base、vsan、vsanhealth、clusterstore、infravisor、crx、trx 等核心模块,承载系统基线、存储集群、健康检查等关键功能,可作为 Offline Bundle 直接用于 vSphere Lifecycle Manager 或 esxcli 离线升级,也可解包后按需裁剪组件。需要快速为多台 ESXi 8.0 U2 主机打补丁或构建统一离线源的工程师,可借此简化维护流程。目前已有 848 人学习下载,具备较高的参考价值。
1. 虚拟机 ESXi 离线升级包,为什么我劝你别再赌在线源
晚上十点半,某机房一台 ESXi 7.0U3 报出安全漏洞告警,补丁包 1.2GB,在线下载进度卡在 37% 再没动过——这是做虚拟机 ESXi 运维最熟悉的一幕。VMware-ESXi-8.0U2-22380479-depot.zip 这份离线 depot 包解决的就是这种尴尬:它把 ESXi 8.0 Update 2 的补丁内容完整封在一个压缩包里,你拷到共享存储上的那一刻起,升级不再依赖外网连通性,不再赌厂商 CDN 心情。适合手里有四台以上 ESXi、担心在线升级中途断档,或者环境在隔离网段的人。前提是你要先搞懂 depot 的内部结构和升级路径,否则离线包同样能让你在凌晨两点对着死机的主机发愣。
2. 为什么离线 depot 能救场:在线升级的三个盲区与包内结构
2.1 在线升级渠道的三个现实痛点:下载中断、依赖混乱、回滚看运气
用 vSphere Lifecycle Manager(VLCM)在线扫描补丁时,最常遇到的情况是点击「检查更新」后转圈半小时,最终弹出一行超时错误。原因不复杂:VLCM 默认要连接官方补丁库去拉取元数据,这个连接走的是主机的管理网络。隔离网段、防火墙策略、甚至 DNS 解析慢都会让这条链路易断。
第二个痛点是依赖关系。ESXi 的补丁不是一个大文件替换整个系统,而是由一组 VIB(vSphere Installation Bundle)组成,每个 VIB 有独立的厂商、版本、依赖项。在线升级时系统会实时去解析依赖树,如果某个依赖 VIB 只在特定 depot 里存在,而当前可用的补丁源不完整,解析就会失败。这类报错信息往往长这样:Some required packages are missing,但你并不知道缺的是哪一个。
第三个痛点是回滚路径。在线升级完成后,如果发现问题想回滚,你会发现自己根本没有留存升级前的完整镜像。虽然 ESXi 内置了 bootbank 回滚机制,但前提是上一次升级的 VIB 还保留在旧 bootbank 里。在线方式拉取的 VIB 是临时落盘的,一旦系统在升级后做了清理操作,回滚就可能变成「看运气」。
离线 depot 包把这三个盲区一次堵上:所有 VIB 和元数据在你手里,依赖解析是本地完成的,回滚时也可以从同一个离线包反推旧版本。但使用前提是:你得理解 depot 包内部到底怎么组织。
2.2 depot zip 里到底装了什么:metadata、VIB 与 profile 三者的关系
拿到 VMware-ESXi-8.0U2-22380479-depot.zip 后,别急着解压。先观察它的目录结构,你会发现顶层是metadata文件夹和一部分散落的.vib文件。metadata 里有vmware-depot-index.xml和profiles子目录,这个设计跟 Linux 的 YUM 仓库很像,但又有本质区别。
直接看一张简化的包内结构示意:
VMware-ESXi-8.0U2-22380479-depot.zip ├── metadata/ │ ├── vmware-depot-index.xml # 仓库索引,记录所有 VIB 元数据 │ └── profiles/ │ └── ESXi-8.0U2-22380479-standard.json # 标准 profile 定义 ├── vibs/ │ ├── esx-base.vib │ ├── esx-dvfilter-vswitch.vib │ ├── esx-tcpip-stack.vib │ └── ... # 约百个 VIB,按依赖关系组织 └── VIB_INDEX.jsonvmware-depot-index.xml是一个全局索引,里面记录了每个 VIB 的名称、版本、依赖和校验和。profiles目录下的 JSON 或 XML 文件定义了一个可安装的 profile——你可以把它理解为一组 VIB 的「安装清单」。执行升级命令时,ESXi 的软件栈先读索引,再按依赖顺序逐个校验 VIB,最后把 profile 里的 VIB 写入 bootbank。
这里有一个关键点:VIB 是安装单元,profile 是选择单元。你在命令行里-p ESXi-8.0U2-22380479-standard参数指定的,就是 profile 名称,而实际逐个写入的是 profile 对应的 VIB 集合。离线包之所以比在线稳,是因为这个 profile 选择、依赖排序、VIB 校验的过程全部在本地完成,没有任何一步依赖网络往返。
ESXi 8.0U2 的离线包还有一个特点:它把关键的 async drivers 也一起纳入了索引,比如某些网卡和存储控制器的驱动 VIB。也就是说,如果你的服务器硬件是 8.0U2 发布时期主流的型号,一个 depot 包就够覆盖驱动更新,不需要额外去厂商官网单独拉驱动包。这进一步减少了升级时「图形界面过了、补丁也装了、重启后网卡不识别」的概率。
2.3 离线包的能力边界:它能解决什么,解决不了什么
离线包解决的是安装来源问题,不是环境适配问题。它能保证 VIB 在本地完整可用、依赖在本地可解析,但不会自动判断你的服务器硬件是否在该版本的支持列表里,也不会替你处理 VMFS 版本升级和虚拟机的兼容性问题。
常见的做法是,先用离线包去完成 ESXi 系统的升级,然后再走结果定级流程:核对硬件 HCL、核对虚拟机兼容性版本、核对已安装第三方驱动清单。某公司有一次内部升级,用的是同一个 8.0U2 depot,三台同型号服务器,两台顺利,一台在重启后出现存储链路断开,排查下来那块 HBA 卡虽然在 HCL 列表里,但需要单独的固件更新,ESXi 系统升级解决不了硬件固件版本不匹配的问题。
离线包也解决不了跨大版本升级的所有路径问题。比如从 6.7 直接升到 8.0U2,中间跨越了 7.0,VMFS 版本从 6 到 7,vSphere HA 心跳网络配置也变了。这类升级链路必须在升级前单独做一次「软硬件准备度评审」,depot 包只是最后那一下落地的工具。对已经运行在 7.0U3 或 8.0U1 的主机,直接使用这份离线包是顺畅的;对停在 6.7 的老机器,建议先升 7.0U3、重启验证,再走 8.0U2 这一步。
3. 两种落地方式:VLCM 补丁库与 esxcli 命令行
3.1 方式一:vCenter 里用 VLCM 上传 depot 并附加基线
在有 vCenter 且主机已纳入集群管理的情况下,我一般会优先走 VLCM。原因是它有主机合规性检查、迁移建议、批量操作和报告留痕,这对审计交付比较重要。操作路径是 vCenter Web Client → Lifecycle Manager → Settings → Patch Repository。
上传 depot 时,VLCM 会解析 zip 内的 metadata,把这个离线包注册成一个「补丁库」来源。具体操作时有一个细节容易忽略:VLCM 上传 depot 需要时间取决于 zip 大小和 vCenter 与浏览器之间的网络,这份 8.0U2 的包通常 1.2~1.5GB,你在浏览器里一直挂着页面直到出现上传完成的提示,中间如果切走页面,部分浏览器会中断会话。我一般会上传到 vCenter 的本地目录后,再通过数据存储添加到内容库,避免从本地工作机直传造成的家庭带宽占用。
上传完成后,进入主机或集群的 Update 页面,选择「Attach Baseline」,从已导入的补丁库中选择 ESXi-8.0U2-22380479 对应的补丁基线。接下来是合规性扫描,VLCM 会把当前主机的 build 号与离线包里的 build 号做对比,生成差异报告。这一步就可以直接看到两台主机之间的差距,比如一台 build 是 20513097,另一台是 21203417,补丁基线 22380479,VLCM 会列出各自需要安装的 VIB 数量。
VLCM 方式适合管理节点较多、需要流程审批和审计记录的环境。它的坑主要是第一次使用需要在 vCenter 里安装 VLCM 服务组件,如果你的 vCenter 是嵌入式或外置部署模式不同,上传 depots 的存储位置和空间要求也不一样。外置 vCenter 上 VLCM 状态如果显示 Not Ready,先检查 5480 端口的 VAMI 服务里 storage 分区剩余空间。
3.2 方式二:esxcli software profile install 直接离线安装
没有 vCenter,或者主机不在管理网络内时,esxcli 是唯一可靠的路径。这种场景在单台测试机、内存不足的边缘站点台比较常见。它的核心命令只有一条,但执行前的准备步骤要谨慎。
先把离线包上传到主机可访问的存储位置。data store 或者主机本身的 /tmp 都行,但我建议放在数据存储里,因为 /tmp 默认是一个内存文件系统,1.5GB 的 zip 会吃掉大量系统内存,升级过程中的 esxcli 进程还需要额外内存做 VIB 解包,内存紧张时升级会中途被杀。
然后执行安装命令:
esxcli software profile install -d /vmfs/volumes/datastore1/VMware-ESXi-8.0U2-22380479-depot.zip -p ESXi-8.0U2-22380479-standard安装输出会分两个阶段。第一阶段是依赖检查,屏幕上会滚动一堆Confirming packages的信息,每个 VIB 名称后面跟着版本号和新旧 build 的对比标记。如果看到The following VIBs are not part of the base profile行,意味着这个 VIB 不会随系统 profile 安装,得单独处理。
第二阶段是真正写入,输出行会变成Installing packages,这一步完成后系统会提示需要重启。这里我按习惯不直接执行 reboot,而是先做一次 profile 确认:
esxcli software profile get输出的 Name 行如果是ESXi-8.0U2-22380479-standard,版本行显示 8.0.0,build 行显示 22380479,才算真正装好了。如果显示的是旧 profile,说明刚才的命令并没有生效,多半是-p参数写错了 profile 名。可以用esxcli software sources profile list -d去列出 depot 里所有可用的 profile 名称,逐字核对后再安装。
3.3 两种方式的耗时、适用场景与切换逻辑
VLCM 方式从上传 depot 到完成合规性扫描,大约 20 到 40 分钟,主要耗时在上传和扫描。执行修复阶段,每台主机需要进入维护模式、迁移虚拟机、安装补丁、重启、退出维护模式,单台总耗时约 30 到 50 分钟。esxcli 方式跳过扫描阶段,单台命令执行时间约 10 到 15 分钟,剩下的时间花在重启和验证上。
适用场景上,VLCM 适合批量、需要合规报告的环境;esxcli 适合单台、实验环境、或者 vCenter 自身也需要升级时——vCenter 与服务虚拟机升级时,你手里暂时没有可用的管理平面,这时只能绕过去直接操作 ESXi 宿主机。两种方式可以共用同一个 depot zip,VLCM 的补丁库和 esxcli 的本地路径不冲突,切换的代价只是把 zip 再拷贝一份到对应位置。
参数取舍方面,VLCM 里能选择「仅安装补丁」或「安装补丁后自动升级硬件兼容性」,esxcli 命令里对应的是--no-hardware-warning参数。我不建议在正式环境加这个参数,它会把硬件兼容性检查从报错降级成警告,隐藏掉驱动失配的风险。测试机随便,生产机能不加就不加。
4. 完整升级流程:从 SHA256 校验到重启验收的七个关键步骤
4.1 步骤一:校验包完整性并与当前 build 做差距分析
拿到 VMware-ESXi-8.0U2-22380479-depot.zip 先算哈希。下载站通常会提供 SHA256 校验值,用下面命令核对:
sha256sum VMware-ESXi-8.0U2-22380479-depot.zip输出的 64 位十六进制字符串如果和官网公布的不一致,直接放弃这个文件,别抱侥幸心理。我见过一次校验码对不上的情况,解压后 esxcli 能正常读取索引,但安装到一半就开始报 VIB 校验错误,系统进入一种「旧版本在新 build 边缘」的中间态,恢复起来比直接升级失败要麻烦得多。
校验无误后,确认当前主机的 build 和版本:
vmware -vVMware ESXi 8.0.0 build-20513097对比当前 build 与 22380479 的差距。如果中间隔了不止一个 update 版本,比如从 8.0U1(build 21203417)升到 8.0U2,路径是正常的;如果从 7.0U3 直接跨到 8.0U2,我建议先按前面说的分两步走,因为 7.0 到 8.0 之间涉及引导装载程序格式变更,一步跨越的风险会叠加在 VIB 替换上,出问题时很难归因。
4.2 步骤二:上传 depot 到本地存储并确认分区格式
推荐的放置位置是目标主机可直接访问的 VMFS 数据存储。可以用 vSphere Web Client 的数据存储浏览器上传,也可以 scp 直传:
scp VMware-ESXi-8.0U2-22380479-depot.zip root@<esxi-host-ip>:/vmfs/volumes/datastore1/上传完成后确认文件的可见性和存储剩余空间:
ls -lh /vmfs/volumes/datastore1/VMware-ESXi-8.0U2-22380479-depot.zip df -h /vmfs/volumes/datastore1这里要保证数据存储剩余空间至少 4GB。很多只升过小补丁的人会忽略这个点,depot 包本身 1.5GB,安装时还要解压出临时 VIB 文件和应用补丁的临时空间,加上旧 bootbank 的保留位,空间不足会在安装阶段报Not enough space错误。此时 ESXi 已经开始写 bootbank,中断会很麻烦。
4.3 步骤三:进入维护模式并记录当前 profile
升级前把主机上的虚拟机全部迁移好,然后执行:
vim-cmd hostsvc/maintenance_mode_enter进入维护模式后,唯一的目标是拿到当前 profile 的完整快照,方便回滚时对照。执行:
esxcli software profile get把输出的 Name、Vendor、Creation Time 记到本地笔记里。这一步不要跳过,很多人在升级过程中实际并不知道自己从哪里升上来,回滚时esxcli software profile install -d找不到旧 profile,就是因为没记这一行信息。我习惯把旧 build 号写在服务台工单备注里,和升级时间联在一起,出问题时能精确到分钟回查。
维护模式还有一个副作用容易踩:进入维护模式后,vSphere HA 会对该主机做输入输出控制,部分管理软件会发起存储重新扫描。如果你确认存储链路稳定,这一步没有影响;如果有主机在维护模式下定期执行存储扫描脚本的任务,建议先停掉,否则升级过程会因为存储 IO 抖动而变慢。
4.4 步骤四:执行软件包安装,参数逐个解释
前面铺垫完,真正执行安装只有一条命令。完整版带上两个常用参数:
esxcli software profile install -d /vmfs/volumes/datastore1/VMware-ESXi-8.0U2-22380479-depot.zip -p ESXi-8.0U2-22380479-standard --ok-to-remove参数含义逐个说清楚:
-d指定 depot 文件的路径,本地路径或 HTTP URL 都支持,本地路径优先。-p指定 profile 名,必须与 depot 内 metadata 里声明的名称完全一致,多一个空格都会报Invalid profile specified。--ok-to-remove允许安装过程移除旧的 VIB。不加这个参数,系统检测到旧 VIB 冲突时会中断安装;加上后,移除范围严格限制在旧版本的同名 VIB 内,不会动第三方 VIB。--no-hardware-warning我前面强调过不建议加,这里再重复一次:它会跳过硬件兼容性预检,把这层风险暴露到运行时。
执行后,输出关键行通常分三到四段。先是一段Correlating dependencies的时间,这地儿能看到每个 VIB 依赖解析的进度;接着是Removing old packages,能识别到被替换的旧 VIB;最后是Installing new packages。这三段任何一段报错,别急着换命令,先把完整输出保存下来,搜关键字error、failed、conflict。
安装输出里有一类常见提示值得注意:
VIB ima_qla4xxx_... requires vmkapi_2_2_0_0, but the requirement cannot be satisfied within the image.这说明存储驱动的 VIB 依赖了新版本的内核 API,而当前 image 里没有匹配项。出现这类信息时,先检查服务器有没有加载同厂商的旧驱动 VIB,通常的办法是升级前把旧驱动清理干净,再统一安装新版本驱动,或者直接联系你的服务器厂商确认该型号在 ESXi 8.0U2 下推荐的驱动 VIB 版本。
4.5 步骤五:重启后验证版本与功能
命令执行完成后,系统会提示Reboot Required。到这一步别直接重启,先检查一遍系统日志里有没有安装阶段的余留错误:
esxcli software profile get vmware -v确认 profile 已是 8.0U2、build 22380479 后,再执行重启。重启命令可以直接用:
reboot如果你用 VLCM 方式做的升级,VLCM 会自动处理重启动作,不需要手动执行。重启后验证顺序我固定为四步:先看主机已重新连接 vCenter,再看管理网络地址可达,然后执行esxcli software profile get复核 build,最后检查vmkload_mod -s有没有驱动加载失败。虚拟机的开机验证排在最后,先确认 ESXi 自身稳定,再迁回负载,这是避免「虚拟机开机异常带动 ESXi 主机崩溃」的基本顺序。
四步验证里最容易翻车的是第二步。升级后网卡驱动被替换,管理端口 IP 还在,但链路起不来。esxcli network ip interface list能看到 vmk0 存在,vmkping却不通。这种问题从驱动 VIB 版本差异查起,优先确认esxcli software vib get里网卡驱动的版本号。
5. 避坑:离线升级里最常见的五个翻车点
5.1 现象:升级完成重启后管理网络不通
一次某公司测试环境的 8.0U2 升级,重启后 SSH 能连,Web Client 打不开,再看 ping 管理 IP 能通但端口 443 无响应。折腾半天发现是网卡驱动虽然装上了,但 VIB 里的网卡队列数分配参数被更新为默认值,导致 vmxnet3 模块载入时对 MSI-X 中断的分配异常。
原因:离线包里的驱动 VIB 覆盖了原有版本,配置文件里的高级参数没有被迁移。
解决:重启后先进入直接控制台(DCUI),用 Alt+F1 进入 shell,执行以下命令重置网卡模块并确认参数:
esxcli network firewall unload vmkload_mod -u <nic-driver-name> vmkload_mod <nic-driver-name> esxcli network ip interface list如果链路能恢复,再用esxcli system settings advanced set把原来记录的高级参数逐项写回。从那以后我做升级前会先导出一份网卡高级参数清单,升级后逐项对比,而不是信任 VIB 的默认值。这类问题在 vSwitch 标准交换机配置简单时还好,分布式交换机环境里排查起来更消耗时间。
5.2 现象:第三方 VIB 兼容性报错导致升级中断
报错长这样:
Error: The VIB 'xxxxxx-xxxxx' is not compatible with this image.这是升级中最常见的硬中断原因。你手头有监控软件、备份代理或硬件管理工具装的 VIB,它们的兼容性版本停留在 7.0,ESXi 8.0 的 API 版本对它不认。
原因:第三方 VIB 的作者没有更新到支持 8.0 的版本,或者该 VIB 依赖的内核模块在 8.0 中被移除。
解决:升级前用esxcli software vib list拉出已安装 VIB 清单,逐一核对厂商发布的支持版本。找到不兼容的 VIB 后,在维护模式下先移除:
esxcli software vib remove --vibname=com.vendor.driver.vib移除后重新执行 profile install。升级完成后,再安装兼容 8.0U2 的新版 VIB。这条经验的核心是顺序:先卸载旧 VIB、再升级系统、最后装新 VIB。反过来操作,放在一起安装会一直卡在兼容性检查。
5.3 现象:HCL 硬件兼容性警告被忽略后驱动丢失
有一台老型号服务器,升级前我用了--no-hardware-warning跳过警告,结果升级很顺利,重启后两个存储控制器里有一个不被识别,虚拟机全部变成不可访问状态。
原因:该机型在 ESXi 8.0U2 的 HCL 里标注为已停产,新版本的存储驱动 VIB 没有包含该控制器的硬件 ID,升级过程中这个控制器对应的驱动被判定为不再需要、自动移除。
解决:在生产环境不要加--no-hardware-warning。发现控制器丢失后,回滚到旧 bootbank,然后去服务器厂商的定制镜像页面找对应版本。这里有个替代逻辑:不在 HCL 里的老机型,优先用服务器厂商基于 ESXi 8.0U2 做的定制 ISO,而不是通用 depot 包。定制 ISO 里保留了老硬件的驱动支持,很多运维人员不知道这点,拿着通用 depot 包硬升老机器,驱动丢失不是偶然事件。
5.4 现象:升级完成后 VMFS 数据存储显示需要修复
升级完数据存储状态显示为Needs Attention,里面有虚拟机还能开机,但存储心跳丢失。
原因:ESXi 8.0U2 对 VMFS 文件系统的锁机制做了更新,老版本升级后第一挂载没成功时,卷状态标记异常。
解决:先别动任何虚拟机,执行文件系统一致性检查:
vmfs-tools -p /vmfs/devices/disks/<device-path>确认状态后重新挂载。如果虚拟机处于开机状态,先挂起再重新注册。这个问题的根治办法是升级前把所有虚拟机先关机或迁移到其他主机。维护模式不等于存储安全,只有虚拟机真正迁移走,VMFS 锁才会释放干净。某运维遇到过一次,因为一台虚拟机无法迁移留在本地,升级后整个数据存储卡在一致性检查流程里,最后用了三个小时才恢复。
5.5 现象:重启后引导不了,bootbank 进不去
最严重的翻车场景:升级后重启,服务器卡在 ESXi 引导装载界面,不断重复加载驱动又失败重启,连直接控制台都进不去。
原因:bootbank 分区空间不足,或者旧 profile 没有正确保留,导致引导装载程序在选择启动槽位时找不到有效的 bootbank。
解决:物理到服务器控制口,选择从旧版本启动。ESXi 引导时按 Shift+R 可以进入引导菜单,手动选择上一个 bootbank。如果引导菜单也不可读,说明 bootloader 本身已损坏,需要挂载 ESXi 8.0U2 安装 ISO 进入救援模式,用安装程序自带的命令重建 bootbank。这个场景我在测试环境玩过一次,在主机最多只留一份 bootbank 的空间预算下硬升,才观察到的现象——所以我在生产环境的每台主机上都会保留两个 bootbank 的有效启动位,升级前用esxcli system boot device get确认启动设备正常。
6. 升级后的检查动作:一条命令看出状态,再留一条命令当后悔药
升级完成、虚拟机迁回、集群恢复绿色后,大多数人会直接收工。我习惯多花两分钟执行一次系统级检查,确认补丁和固件层面都落到位了:
esxcli software vib list | grep -i esx-base esxcli system version get localcli system ntp get以上三条分别看核心 VIB 版本、系统版本与时间同步状态,任何一条不对都说明升级过程还有残留问题。VIB 列表里esx-base行版本号应该落在 8.0.2 或类似标识,配合 build 22380479 一起看,如果 build 号对上但 VIB 版本号不对,说明 profile 安装不完整,需要重新执行一次安装。
回滚命令要提前准备好。升级前把旧 build 号记下来,假设升级后运行一周发现严重问题,回滚到旧版本的方式是再次使用 depot 包,不过此时要用旧版本的 depot 或已保存的旧 profile 文件。如果你在升级前执行过esxcli software profile export,回滚会轻松很多:
esxcli software profile export --profile=<old-profile-name> --export-to=/vmfs/volumes/datastore1/old-profile.zip esxcli software profile install -d /vmfs/volumes/datastore1/old-profile.zip --ok-to-remove回滚命令的本质和升级完全一样,只是换了 profile 来源。这也是离线 depot 包的另一层价值:同一个工具链既升也降,提供了一份实打实的后悔药。如果你没有提前导出旧 profile,单纯靠系统自带的 bootbank 回滚,可用性取决于上一次升级是否完整写入。从那以后我每次升级前都强制走一遍profile export,导出的 zip 和 depot 包放在同一个数据存储目录下,标记old-profile-before-upgrade。灰度验证的周期定在两天,确认无异常后再删除旧 profile 备份。
希望这次拆解能让你在下次接到 ESXi 8.0U2 升级任务时少走几趟弯路,离线包本身不复杂,复杂的是你对手头这台机器历史状态的掌握程度,建议把升级时间选在业务低谷期,留足排查余量,祝顺利。
本文还有配套的精品资源,点击获取