获取验证码
集群部分主机由ESXi7.0升级至8.0后,跨7.0与8.0主机执行Storage vMotion(存储vMotion)时报错incompatible CPU。很多运维误以为只有在线vMotion才校验CPU功能集,实际上Storage vMotion冷迁移之外也会校验虚拟机CPU掩码。根源来自ESXi8.0更新CPU微码、新增CPU硬件特性,虚拟机CPU功能集在新旧版本主机之间不匹配。本文梳理故障现象、根因、处理步骤、风险点与最佳实践。
有VMware全系列产品官方资源和定制版资源需求的可以移步:
集群混合版本:部分主机ESXi7.0,部分主机升级为ESXi8.0。
同集群做Storage vMotion存储迁移,不改变运行主机,仅迁移磁盘可以正常执行;如果连带改变计算主机(跨主机Storage vMotion),报错incompatible CPU。
纯7.0集群之间迁移全部正常;全部升级到8.0之后故障消失。
新建虚拟机跨新旧主机迁移正常,存量旧虚拟机报错。
冷关机之后执行迁移,部分虚拟机可以成功,开机状态跨主机Storage vMotion直接失败。
ESXi8.0更新CPU微码,CPU硬件特性集合发生变化。升级到8.0的主机暴露了更多新CPU指令集;而7.0主机CPU功能集相对旧。存量虚拟机的CPU掩码保存在VMX文件中,与目标主机CPU功能集不兼容。
跨主机Storage vMotion,虽然主要迁移磁盘,但开机状态迁移依然需要vMotion计算迁移逻辑,会校验CPU兼容性,并非只检查存储。
集群内主机CPU型号虽然相同,但是ESXi版本不同、微代码版本不同,对外呈现的CPU feature集合不一致,造成掩码不匹配。
存量虚拟机创建在ESXi7.0环境,没有开启CPU掩码降级;升级部分主机到8.0后出现版本混合,触发CPU不兼容报错。
开启Enhanced vMotion Compatibility(EVC)模式的集群,如果升级主机后EVC基准没有同步,也会出现该类报错。
重要提醒:修改虚拟机CPU功能级(EVC降级)必须关闭虚拟机电源,开机状态无法修改;EVC基准改动是集群级别,改动会影响全部虚拟机,需要评估业务风险。
第一步:确认集群EVC状态
vCenter选择集群→配置→vSphere EVC,查看当前EVC基准。
混合7.0/8.0集群,如果已经开启EVC,确认EVC基准是否低于等于集群最低CPU能力;升级ESXi8.0不会自动提升EVC基准。
如果集群未开启EVC,同型号CPU在不同ESXi版本微码差异就会出现CPU不兼容报错。
方案一:单台虚拟机降级CPU功能集(针对个别故障虚拟机)
关闭目标虚拟机电源。快照备份虚拟机。
编辑虚拟机设置 → 虚拟机选项 → CPU → 更改CPU兼容性。
选择【降级CPU功能】,选择与ESXi7.0主机相匹配的CPU基准级别。
保存配置,开机后再测试跨主机Storage vMotion。
也可以直接编辑VMX,设置vcpu.hwMask掩码,图形界面优先,不建议手动修改VMX。
方案二:集群开启/下调EVC模式(多台虚拟机批量问题)
集群全部虚拟机关机状态下,修改集群EVC基准,将EVC基准设置为匹配旧版ESXi7.0主机CPU级别。
EVC开启后,集群内所有主机对外统一呈现相同CPU功能集,消除微码、ESXi版本带来的CPU特性差异。
注意:EVC基准只能向下降级,不能向上提升,开启EVC需要全部虚拟机关机;已经开机的虚拟机不会立刻继承新EVC掩码,需要关机再开机。
方案三:规避混合版本,完成集群整体升级
将集群剩余所有ESXi7.0主机全部升级到8.0,集群版本统一后,CPU功能集一致,报错自动消失。
混合版本期间,尽量避免跨主机的Storage vMotion;仅执行不更换计算主机的纯存储迁移。
方案四:冷迁移作为临时应急手段
业务允许的情况下关闭虚拟机电源,执行冷迁移,冷迁移不做实时vMotion校验,可以绕过该报错。
缺点:虚拟机业务会中断,只能做临时应急。
| 故障场景 | 判断依据 | 处理方案 |
|---|---|---|
| 混合7.0/8.0集群,仅存量虚拟机报错 | 新虚拟机迁移正常,旧虚拟机失败 | 关机降级单台虚拟机CPU功能集 |
| 集群大量虚拟机报CPU不兼容 | 多台虚拟机迁移全部失败 | 集群设置EVC基准,全部虚机关机重启生效 |
| 不换主机的Storage vMotion正常,跨主机就失败 | 仅跨计算节点时报错incompatible‑CPU | 属于vMotion CPU校验,不是存储故障,处理CPU掩码 |
| 集群全部升级8.0之后故障消失 | 版本统一后无报错 | 完成整体升级,消除混合版本环境 |
集群滚动升级ESXi,出现7.0与8.0混合版本阶段,提前评估vMotion、跨主机Storage vMotion兼容性风险。
修改虚拟机CPU兼容性、调整集群EVC,都需要关闭虚拟机电源,操作前务必做虚拟机快照。
集群建议规划EVC基准,即便服务器CPU型号完全相同,不同ESXi版本CPU微码更新也会带来功能集差异。
不要在业务高峰期调整EVC;EVC基准一旦下调,后续要调高基准,所有虚拟机同样需要关机重启。
滚动升级期间,优先使用不改变计算主机的纯Storage vMotion,尽量少做跨计算节点的联合迁移。
全部主机升级到8.0完成后,再统一评估是否上调EVC基准,释放新CPU指令集能力。
Q:只是迁移磁盘,Storage vMotion为什么还报CPU不兼容?
A:Storage vMotion分为两种:不更换主机仅迁移磁盘;跨主机Storage vMotion,后者同时包含vMotion计算迁移逻辑,开机状态必须校验CPU兼容性。
Q:EVC已经开启,为什么还报CPU不兼容?
A:EVC修改后,已经开机运行的虚拟机不会自动应用新CPU掩码;必须关机再开机,EVC设置才会对虚拟机生效。
Q:降级CPU功能集,虚拟机性能会不会下降?
A:降级会屏蔽部分高级CPU指令集;普通业务虚拟机感知很小;依赖AVX‑512等高级指令集的业务,性能会受影响。
Q:能不能不关机修复这个问题?
A:不能,CPU掩码、EVC功能集修改都需要虚拟机关机重置vCPU硬件,开机状态无法变更。
总结:ESXi7.0升级8.0后存储vMotion报incompatible CPU,源于新旧ESXi版本CPU微码更新,CPU功能集不一致。跨主机Storage vMotion依然会执行vMotion CPU校验;可以关机降级单台虚拟机CPU功能级,或配置集群EVC基准;临时可使用冷迁移规避;长期建议完成集群整体升级,消除混合版本环境。修改CPU兼容性操作前,务必做好快照备份。