/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 的进程可以创建虚机并直接访问内存。生产环境要按特权账号管理,不要随手把人加进组。