KVM能否用只看kvm-ok是否输出“KVM acceleration can be used”;需依次确认CPU硬件支持(egrep '(vmx|svm)' /proc/cpuinfo)、BIOS启用虚拟化、内核模块加载、/dev/kvm权限正确、用户属kvm和libvirt组、SELinux布尔值开启、服务已启用。

KVM 能不能用,不看装了什么包,只看 kvm-ok 输出是否包含 “KVM acceleration can be used” —— 其他步骤全是为了让它输出这句话。
检查 CPU 是否真正支持并启用虚拟化
很多人卡在第一步,以为 egrep -c '(vmx|svm)' /proc/cpuinfo 返回非零就万事大吉,其实不是。
- 如果返回 0:CPU 硬件不支持,或 BIOS/UEFI 完全关闭虚拟化(常见于某些笔记本或旧服务器)
- 如果返回 >0,但
dmesg | grep -i kvm显示KVM: disabled by bios:BIOS 里开了开关,但可能藏在二级菜单(如 Lenovo 的 “Security → Virtualization”,Dell 的 “Processor Settings → Intel VT-x”) - Intel CPU 必须看到
vmx,AMD CPU 必须看到svm;flags行里混着一堆字段,别只扫一眼就跳过
加载模块后验证 /dev/kvm 权限和组归属
模块加载成功 ≠ KVM 可用。很多环境 lsmod | grep kvm 有输出,但 virt-install 启动时直接报 Permission denied on '/dev/kvm',根源就在设备节点权限不对。
-
ls -l /dev/kvm必须显示属组为kvm,且权限含rw(如crw-rw----或更宽) - 当前用户必须同时在
kvm和libvirt组里:groups命令输出中得有这两个词;缺一个就得补:sudo usermod -aG kvm,libvirt $USER - CentOS/RHEL 启用 SELinux 时,
virt_use_kvm布尔值必须为 1:sudo setsebool -P virt_use_kvm 1,否则qemu-system-x86_64进程被策略拦住
不同发行版安装命令不能混用
Ubuntu/Debian 和 RHEL/CentOS/Fedora 的包管理逻辑完全不同,抄错命令会导致 virsh list 报 Failed to connect to the hypervisor 或根本找不到命令。
- Ubuntu 20.04+:
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils(virt-manager可选,纯命令行可不装) - RHEL/CentOS 8+:
sudo dnf install @virtualization(注意是@virtualization组,不是单个包名) - RHEL/CentOS 7:
sudo yum groupinstall "Virtualization"(引号不能丢,groupinstall是关键) - 装完必须启动服务:
sudo systemctl enable --now libvirtd;仅start不enable,重启后服务就掉线
用 virt-install 创建虚机时的关键参数
命令行创建虚机最常踩的坑是网络不通、启动失败或性能差,问题往往出在几个默认行为上。
- 不指定
--network会走默认 NAT(virbr0),虚拟机能上网,但宿主机无法主动连它;要双向通信,必须桥接:--network bridge=br0,model=virtio -
model=virtio很重要:不用它,网卡和磁盘都是 emulated(rtl8139、ide),I/O 性能极差;加了它才能启用半虚拟化驱动 - 最小可用命令示例:
sudo virt-install --name test --ram 1024 --vcpus 1 --disk size=5 --cdrom /path/to/ubuntu-22.04.iso --os-variant ubuntu22.04 --graphics none --import -
--import表示不安装系统,直接启动已存在的镜像;--cdrom才触发安装流程;别漏掉--os-variant,否则 libvirt 可能选错 CPU 特性集,导致 guest kernel panic
真正难的不是敲对哪条命令,而是当 virt-install 报错时,能快速判断是 BIOS 层、内核层、权限层、SELinux 层还是网络配置层的问题——每一层都有对应验证点,漏掉任意一个,KVM 就只是“看起来装好了”。


















