KVM: 启动虚拟机报错 “unsupported machine type“

【问题1】

  • 启动虚拟机报错 unsupported machine type
[root@localhost ~]# virsh start xxx-05
setlocale: No such file or directory
error: Failed to start domain xxx-05
error: internal error: process exited while connecting to monitor: 2021-03-16T05:48:03.459659Z qemu-kvm: -machine virt-rhel7.6.0,accel=kvm,usb=off,dump-guest-core=off,gic-version=3,pflash0=libvirt-pflash0-format,pflash1=libvirt-pflash1-format: unsupported machine type
Use -machine help to list supported machines

【原因】

  • qemu版本升级,而qemu存在qemu--ma、qemu--ev等多个系列,不同系列所支持的machine type并不相同,qemu升级后原本创建的虚机的machine type不被支持。

【解决方法】

  • 使用命令/usr/libexec/qemu-kvm -machine help 查看支持的类型
[root@localhost ~]# /usr/libexec/qemu-kvm -machine help
Supported machines are:
virt                 RHEL 8.2.0 ARM Virtual Machine (alias of virt-rhel8.2.0)
virt-rhel8.2.0       RHEL 8.2.0 ARM Virtual Machine (default)
none                 empty machine
  • 使用virsh edit {vm_name}命令将虚拟机配置中的machine修改为所支持的类型。
    在这里插入图片描述

【问题2】

  • machine类型修改完成后,使用命令virsh start {vm_name}再次启动虚拟机,报以下错误
[root@localhost ~]# virsh start xxx-05
setlocale: No such file or directory
error: Failed to start domain xxx-05
error: internal error: process exited while connecting to monitor: ERROR cluster 501158 refcount=0 reference=1
ERROR cluster 501159 refcount=0 reference=1
ERROR cluster 501160 refcount=0 reference=1
ERROR cluster 501161 refcount=0 reference=1
ERROR cluster 501162 refcount=0 reference=1

【解决方法】

  • 这部分报错只是类似于警告的信息,没有什么其他作用,暂时可以无视,再重新启动就行

【问题3】

  • 再次启动后,报错Cannot allocate memory
[root@localhost ~]# virsh start xxx-05
setlocale: No such file or directory
error: Failed to start domain xxx-05
error: internal error: qemu unexpectedly closed the monitor: 2021-03-16T05:40:53.512455Z qemu-kvm: cannot set up guest memory 'mach-virt.ram': Cannot allocate memory

【原因】

  • 一般是因为分配的内存大于实际的内存。

【解决方法】

  • 执行free -g查看宿主机内存空间;
[root@localhost ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:            510         468          24           2          17           6
Swap:             0           0           0
  • 使用virsh edit {vm_name},修改VM配置xml文件,调整内存为可以分配的内存大小:
<memory unit="GiB">64</memory>

【问题4】

  • 将内存修改成小于宿主机内存空间的数值,但还是启动失败,依旧报Cannot allocate memory

【原因】

  • 使用命令sysctl -a | grep overcommit查看一下主机确保可以分配多少内存
[root@localhost ~]# sysctl -a | grep overcommit
vm.nr_overcommit_hugepages = 0
vm.overcommit_kbytes = 0
vm.overcommit_memory = 0
vm.overcommit_ratio = 50

内核参数overcommit_memory

  • 即内存分配策略,可选值:0、1、2。
  • 0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
  • 1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
  • 2: 表示内核允许分配超过所有物理内存和交换空间总和的内存

【解决方案】

  • 可以看到设置中vm.overcommit_memory为0,所以需要将vm.overcommit_memory设为1。有三种方式修改内核参数,但要有root权限:
    (1)编辑/etc/sysctl.conf,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
    (2)sysctl vm.overcommit_memory=1
    (3)echo 1 > /proc/sys/vm/overcommit_memory

【参考文档】

  1. 升级qemu版本后,启动虚机时提示”unsupported machine
    type”机器类型不支持错误

  2. QEMU-KVM创建VM进行安装时报 Cannot allocate memory 解决方法

  3. Kvm:启动报错:error: internal error: process exited while connecting to
    monitor: 2018-11-12T01:47:14.993371Z qemu-system-x86_64: cannot set
    up guest memory ‘pc.ram’: Cannot allocate memory

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值