原来的香港服务器因为硬盘故障,机房换了台机器,需要把虚拟机转移到新的机器上,转移数据搞了一天,今天启动的时候还报错了
error: Failed to start domain 'win10x86'
error: the CPU is incompatible with host CPU: Host CPU does not provide required features: fma, movbe, fsgsbase, bmi1, avx2, smep, bmi2, erms, invpcid
因为旧机器和新机器 cpu硬件不一样了,导致虚拟机出现了启动故障。现在想想如何操作。
遇到 Failed to start domain 'win10x86-103.143.12.239'
以及类似错误提示,如 "Host CPU does not provide required features: fma, movbe, fsgsbase, bmi1, avx2, smep, bmi2, erms, invpcid",通常是因为虚拟机的配置要求使用的 CPU 特性与主机硬件不兼容或被禁用。
解决方案
-
检查主机的 CPU 是否支持这些特性
错误信息中提到的特性,如
fma
、movbe
、avx2
等,表示虚拟机要求的某些 CPU 指令集特性在主机的 CPU 上不可用。你可以通过以下命令检查主机 CPU 是否支持这些特性:lscpu
这将列出主机 CPU 的所有特性,检查是否包含缺少的特性(比如
avx2
、fma
、bmi1
等)。- 如果你的硬件本身不支持这些指令集,那么你将无法运行需要这些特性支持的虚拟机。
- 如果你的硬件支持这些特性,但出于某些原因它们被禁用,你需要检查 BIOS/UEFI 设置。
-
启用虚拟化相关功能(在 BIOS/UEFI 中)
某些 CPU 特性(如
SMEP
、AVX2
、FMA
等)可能被禁用在 BIOS/UEFI 设置中。进入 BIOS 设置,确保启用了以下选项:- Intel VT-x / AMD-V(虚拟化技术)
- Intel EPT / AMD RVI(扩展页表)
- SMEP(Supervisor Mode Execution Prevention) — 在部分 Intel CPU 中启用。
- AVX2 和 FMA — 如果支持,确保启用。
重启主机并进入 BIOS 设置,通常是按
DEL
、F2
或Esc
键(视主板品牌而定)。在 BIOS 中,查找关于 CPU 或虚拟化相关的设置,确保虚拟化功能已启用。 -
检查 KVM 模块是否正确加载
如果主机的 CPU 支持虚拟化,但由于配置或 KVM 模块没有正确加载,可能导致无法启用所需的 CPU 特性。你可以通过以下命令确认 KVM 模块是否已加载:
lsmod | grep kvm
如果没有看到类似
kvm
或kvm_intel
/kvm_amd
的输出,说明 KVM 模块没有加载。你可以尝试手动加载它:sudo modprobe kvm sudo modprobe kvm_intel # 对于 Intel CPU sudo modprobe kvm_amd # 对于 AMD CPU
然后再尝试启动虚拟机。
-
修改虚拟机的 CPU 配置
如果你的主机 CPU 确实不支持这些特性,但你仍然希望启动虚拟机,可以尝试通过修改虚拟机的 XML 配置文件来禁用虚拟机要求的特性。
你可以编辑虚拟机的 XML 配置文件,禁用这些特性。首先,使用
virsh
命令导出虚拟机的配置:virsh dumpxml win10x86-103.143.12.239 > vm_config.xml
然后编辑
vm_config.xml
文件,找到<cpu>
部分,添加或修改mode
和features
标签。例如,禁用特性:<cpu mode='host-passthrough'> <features> <feature name='fma' policy='disable'/> <feature name='movbe' policy='disable'/> <feature name='fsgsbase' policy='disable'/> <feature name='bmi1' policy='disable'/> <feature name='avx2' policy='disable'/> <feature name='smep' policy='disable'/> <feature name='bmi2' policy='disable'/> <feature name='erms' policy='disable'/>
<feature name="svm" policy="disable"/>
<feature name='invpcid' policy='disable'/> </features> </cpu>你可以根据需要禁用不同的 CPU 特性。然后保存并关闭文件。
重新定义虚拟机配置:
virsh define vm_config.xml
然后尝试再次启动虚拟机:
virsh start win10x86-103.143.12.239
这会让虚拟机不依赖于主机的特性,而是在兼容模式下运行。
-
检查虚拟机配置的兼容性
如果你的虚拟机镜像要求的 CPU 特性与主机的硬件不匹配,可以考虑更改虚拟机的 CPU 类型。在
virsh
中,你可以选择一个兼容的 CPU 模型。例如,编辑虚拟机的 XML 配置文件,修改
<cpu>
部分中的model
属性为一个通用的模型(比如qemu64
):<cpu mode='custom' match='none'> <model fallback='allow'>qemu64</model> </cpu>
保存配置并重新启动虚拟机。
总结
- 硬件支持:确保主机 CPU 支持虚拟化所需的特性(如
AVX2
、FMA
等),并确保在 BIOS 中启用了相关设置。 - KVM 模块:确保 KVM 模块已加载,且 CPU 虚拟化特性可用。
- 修改虚拟机配置:如果硬件不支持这些特性,可以在虚拟机配置中禁用或调整 CPU 特性,或者使用更通用的 CPU 模型。
如果这些步骤仍然无法解决问题,或者你需要进一步帮助,请告诉我!