qemu 中文文档 下载 App

KVM 权限问题 /dev/kvm 不存在 / 拒绝访问

错误现象

启动 QEMU 时看到:

qemu-system-x86_64: warning: KVM acceleration can't be used
qemu-system-x86_64: -accel kvm: failed to initialize KVM: Permission denied

或者直接:

ls -la /dev/kvm
# ls: cannot access '/dev/kvm': No such file or directory

四步排查

第一步:/dev/kvm 是否存在

ls -la /dev/kvm

文件不存在 → 原因:BIOS 没开 VT-x/AMD-V,或内核没加载 kvm 模块。跳第二步。

文件存在 → 继续第二步检查权限。

第二步:CPU 是否支持硬件虚拟化

grep -E 'vmx|svm' /proc/cpuinfo

第三步:内核模块是否加载

# 查看 KVM 模块
lsmod | grep kvm

# 手动加载
sudo modprobe kvm
sudo modprobe kvm_intel   # Intel CPU
sudo modprobe kvm_amd     # AMD CPU

加载后再看 /dev/kvm 应该出现了。如果加载时报错:

modprobe: ERROR: could not insert 'kvm_intel': Operation not supported

说明 BIOS 里 VT-x 没开,或 Hyper-V 占用了(Windows + WSL2 场景)。

第四步:权限和组

ls -la /dev/kvm
# crw-rw---- 1 root kvm 10, 232 Jun 15 10:23 /dev/kvm
# 检查当前用户组
groups | grep -o 'kvm'

# 不在 kvm 组就加
sudo usermod -aG kvm $USER

# 重要:注销并重新登录让组生效
newgrp kvm   # 或这个临时生效

一键诊断脚本

#!/bin/bash
echo "=== KVM 诊断 ==="

# CPU
echo -n "CPU 虚拟化支持: "
grep -qE 'vmx|svm' /proc/cpuinfo && echo "✅ $(grep -c vmx /proc/cpuinfo || grep -c svm /proc/cpuinfo) 核心" || echo "❌ 不支持"

# /dev/kvm
echo -n "/dev/kvm 文件: "
[ -e /dev/kvm ] && echo "✅ 存在 ($(ls -la /dev/kvm))" || echo "❌ 不存在"

# 模块
echo -n "KVM 模块: "
lsmod | grep -q kvm && echo "✅ 已加载" || echo "❌ 未加载"

# 用户组
echo -n "当前用户在 kvm 组: "
groups | grep -q kvm && echo "✅ 是" || echo "❌ 否"

# 综合结论
kvm-ok 2>&1

Windows 上的 WHPX 替代

Windows 上没有 KVM,对应功能是 WHPX(Windows Hypervisor Platform)。启用方式:

  1. 控制面板 → 启用 Windows 功能 → 勾选「虚拟机平台」和「Windows Hypervisor Platform」
  2. 重启
  3. QEMU 命令改用 -accel whpx

macOS 上的 HVF

macOS 上不需要 KVM——HVF 内置于系统。直接用 -accel hvf。Apple Silicon Mac 上 HVF 是 ARM64→ARM64 加速;模拟 x86 时只能用 TCG。

容器内 KVM

Docker 容器里默认没有 KVM 权限。需要:

docker run --device=/dev/kvm -it my-qemu-image

或 Kubernetes 里用 device plugin 暴露 KVM 设备。

虚拟化嵌套

虚拟机里再跑虚拟机,需要嵌套虚拟化(Nested Virtualization)。配置:

# KVM 模式下开启嵌套
modprobe kvm_intel nested=1

# 检查是否启用
cat /sys/module/kvm_intel/parameters/nested
# Y = 已启用

然后 Guest 里就能用 -accel kvm 了。

下一步

KVM 搞定了?去 光标不可见 / 黑屏 看看显示相关的问题。