问题现象
在 AMD CPU
上通过VMWare 虚拟出来的虚拟机中继续通过 qemu 进行嵌套启动虚拟机时报错,报错信息如下:
core@ubuntu20-dev:~$ sudo qemu-system-x86_64 -cpu "host,pmu=off" -enable-kvm
MoTTY X11 proxy: Unsupported authorisation protocol
Unable to init server: Could not connect: Connection refused
qemu-system-x86_64: error: failed to set MSR 0xe1 to 0x0
qemu-system-x86_64: /build/qemu-BQ4hMP/qemu-4.2/target/i386/kvm.c:2691: kvm_buf_set_msrs: Assertion `ret == cpu->kvm_msr_buf->nmsrs' failed.
Aborted
解决方案
- 运行下面命令,创建配置文件
/etc/modprobe.d/qemu-system-x86.conf
。
sudo tee /etc/modprobe.d/qemu-system-x86.conf << EOF
options kvm ignore_msrs=1
EOF
- 重启
sudo reboot
- 尽情玩耍吧~
问题原因
根据网页 https://patchwork.kernel.org/patch/42605/ 中的内容来看,这个配置并没有真正解决问题,只是通过配置这个参数可以使 kvm
忽略相关错误。但这个解决方案对我来说可以接受。
当模块参数
ignore_msrs
设置为1时,未知MSR
读取将返回0,并且MSR
写入将被丢弃。
同时在这两种情况下会向dmesg打印一条消息,以告知用户有关信息。
参考链接: