首页/云/云平台与虚拟化速查//dev/kvm 设备与权限
虚拟化基础63 条

/dev/kvm 设备与权限

/dev/kvm 是 KVM 暴露给用户态的字符设备,QEMU 通过 ioctl 创建 vCPU 并执行客户机代码;用户或容器需要相应权限才能使用,否则会退回软件模拟。

云平台与虚拟化速查云更新于 2026-10-13

/dev/kvm 是什么

/dev/kvm 是 KVM 暴露给用户态的字符设备(主设备号 10,次设备号 232):QEMU 通过 ioctl 在它上面创建 vCPU、映射内存并执行客户机代码。没有它,QEMU 只能退回 TCG 软件模拟,性能差一个数量级;在容器里跑虚机时,它同样是必须映射进去的设备。

基本信息

设备类型字符设备(主设备号 10,次设备号 232)
典型权限crw-rw---- root kvm
检查方式ls -l /dev/kvm,或直接判断当前用户是否可写
容器使用映射 --device /dev/kvm 并把进程加入 kvm 组
缺失后果QEMU 退回软件模拟,虚机性能显著下降
前置条件宿主 CPU 支持虚拟化,且已在 BIOS / UEFI 中开启

典型使用场景

  • 给运维账号授权以便运行 virsh 与 virt-install
  • 在容器内运行 KVM 虚机(嵌套或特权容器方案)
  • 排查“虚机起得来但性能极差”是否退回了软件模拟
  • 自动化测试环境批量创建与销毁虚机
  • 检查宿主是否具备硬件虚拟化能力

授权与验证

授权与验证
sudo usermod -aG kvm $USER                    # 加入 kvm 组(需重新登录生效)
ls -l /dev/kvm                               # 看属主、属组与权限位
[ -w /dev/kvm ] && echo 'kvm writable' || echo 'no permission'   # 直接判断可写性
sudo setfacl -m u:$USER:rw /dev/kvm          # 临时授权方案之一
lsmod | grep kvm                             # 确认 kvm 与 kvm_intel / kvm_amd 已加载
qemu-system-x86_64 -enable-kvm -m 1024 -nographic disk.img   # 设备不可用时此命令直接报错

排查清单

现象原因处理
权限被拒当前用户不在 kvm 组加入组并重新登录
找不到设备模块未加载或 CPU 虚拟化未开启检查内核模块与固件设置
容器内不可用未映射设备或权限不足映射 /dev/kvm 并补齐权限
能启动但很慢退回了软件模拟确认 -enable-kvm 与设备可用
KVM 依赖 CPU 的虚拟化指令集(Intel VT-x / AMD-V),且要在 BIOS 或 UEFI 中开启;在虚拟机里再跑 KVM,还需要宿主开启嵌套虚拟化。
kvm 组的权限接近特权:能打开 /dev/kvm 的进程可以创建虚机并直接访问内存。生产环境要按特权账号管理,不要随手把人加进组。

易错点

  • 把设备映射进容器但忘了补充权限组,进程仍打不开 /dev/kvm
  • 在 WSL2 里寻找 /dev/kvm:该平台默认未提供该能力,需改用其他方案
  • 把普通用户直接加进 kvm 组当常规操作,忽略了它接近 root 的实际权限
  • 虚机性能差就怀疑磁盘,实际是启动参数没带 -enable-kvm 走了软件模拟
  • 设备节点权限被运维脚本重建后覆盖,原本可用的服务第二天集体报错

数据来源与参考

  • Linux 内核文档 Documentation/virt/kvm/api.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌