直接拷贝镜像和配置文件的迁移方式,因宿主环境因素可能有一些报错,我这次迁移就遇到如下问题。
一、启动报错内容
# virsh start vmbase7
error: Failed to start domain vmbase7
error: the CPU is incompatible with host CPU: Host CPU does not provide required features: md-clear, ssbd
二、原因
这是因为两台宿主机的CPU(实际也是从I7 9700下面生成的镜像文件拷贝到I5 7500机器下)类型不一致导致的,解决方法也很简单,直接去掉关于上面的配置
三、处理方式
- 修改配置
# 直接从配置中删掉关于上面报错的两行
# virsh edit vmbase7
......
<feature policy='require' name='md-clear'/>
......
<feature policy='require' name='ssbd'/>
......
- 重新注册并启动虚拟机
# cp /etc/libvirt/qemu/vmbase7.xml /tmp/vmbase7.xml_20210331
# virsh undefine vmbase7 // 执行这个命令配置文件就没了
Domain vmbase7 has been undefined
# virsh define /tmp/vmbase7.xml_20210331
Domain vmbase7 defined from /tmp/vmbase7.xml_20210331
# virsh start vmbase7
四、其他报错
- 报错内容
virsh start mycentos
error: Failed to start domain mycentos
error: the CPU is incompatible with host CPU: Host CPU does not provide required features: fma, x2apic, movbe, aes, fsgsbase, bmi1, avx2, smep, bmi2, erms, invpcid
- 原因也是两台宿主机的CPU类型不一致导致的,解决方法就是将xml文件中的CPU类型改为与当前宿主机一致即可。
# 查看宿主机的CPU类型
# virsh capabilities
<capabilities>
<host>
<uuid>54d8c261-2738-a5df-d9aa-a85e456aa738</uuid>
<cpu>
<arch>x86_64</arch>
<model>Skylake-Client-IBRS</model> // 宿主机当前CPU类型
<vendor>Intel</vendor>
<microcode version='214'/>
<counter name='tsc' frequency='2999995000' scaling='no'/>
<topology sockets='1' cores='8' threads='1'/>
<feature name='ds'/>
......
# 修改虚拟机XML配置
# virsh edit vmbase7
......
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>Skylake-Client-IBRS</model> // 改成跟当前宿主机一样
</cpu>
......
# 重新按上面方式注册启动即可
总结:
一般来说在KVM服务端版本变化不大外,虚拟机迁移后出现启动问题,都可以通过修改配置的方式来处理,在运用上面两个方式处理无效外,可以把目的宿主下的xml配置文件和迁移过来机器的xml文件进行对比,然后以当前宿主机下的虚拟机xml配置文件为基准,修改迁移过来的xml配置文件,修改后尝试重新注册启动。
相关内容参阅