kvm在centos 7上需同时满足硬件支持、内核模块加载、libvirtd服务运行及用户权限四层条件,缺一不可;否则virsh list报错或为空、virt-install提示“找不到hypervisor”;典型问题包括bios未启用vt-x/amd-v、kvm-intel模块加载失败、/dev/kvm权限不足、selinux策略未刷新及用户未加入kvm组。

virsh list 就会报错或返回空,virt-install 会卡在“找不到 hypervisor”或“failed to connect to libvirt”。
检查 CPU 是否真正支持并已启用虚拟化
很多用户执行 grep -E '(vmx|svm)' /proc/cpuinfo 有输出就以为万事大吉,但实际可能只是 BIOS 没开——尤其在物理机上装了嵌套虚拟机(比如 VMware Workstation 里跑 CentOS 7),/proc/cpuinfo 仍会显示 vmx,但 KVM 无法加载。
- 必须进 BIOS/UEFI 找到 Intel VT-x 或 AMD-V 选项,设为 Enabled(不是 “Auto” 或 “Disabled”)
- 若宿主机是云服务器或 VMware/VirtualBox 虚拟机,需确认其本身已开启 Intel VT-x/EPT 或 AMD-V/RVI(VirtualBox 叫 “Enable Nested VT-x/AMD-V”,VMware Workstation 叫 “Virtualize Intel VT-x/EPT or AMD-V/RVI”)
-
lscpu | grep Virtualization输出应为Virtualization: VT-x或Virtualization: AMD-V;若显示Virtualization: none,说明内核没识别到,BIOS 一定没开
加载 kvm-intel/kvm-amd 模块前先确认内核兼容性
CentOS 7 默认内核(3.10.x)支持 KVM,但某些定制内核(如带 grsecurity 补丁、或某些 OpenVZ 宿主机)会禁用 kvm 模块。即使 modprobe kvm 成功,modprobe kvm-intel 也可能失败并报 Operation not supported。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
- 运行
lsmod | grep kvm,正常应看到kvm_intel或kvm_amd,且依赖项irqbypass、ip_tables等也已加载 - 若
modprobe kvm-intel报错,先查dmesg | tail -20,常见原因是:CPU 不支持 EPT(Intel)、或内核编译时未启用CONFIG_KVM_INTEL - 不要手动写
/etc/modprobe.d/kvm.conf强制 alias,CentOS 7 的kmod机制会自动选对模块;硬加options kvm-intel nested=1可能导致libvirtd启动失败
libvirtd 启动失败的三个高频原因
systemctl start libvirtd 显示 active (exited) 但实际没起来,或者 virsh list 提示 Failed to connect to the hypervisor,大概率是以下之一:
-
/dev/kvm权限不对:ls -l /dev/kvm应为crw-rw----. 1 root kvm;若属主是root:root,普通用户无法访问,需usermod -aG kvm $USER并重新登录 - SELinux 阻断访问:虽然 CentOS 7 默认是
enforcing,但 KVM 大部分路径(如/var/lib/libvirt/images/)已有策略;若你改过存储路径,restorecon -Rv /your/path比直接setenforce 0更安全 - libvirtd 监听被禁用:检查
/etc/libvirt/libvirtd.conf,确认listen_tls = 0和listen_tcp = 0(默认值),除非你要远程管理,否则不要开 TCP 监听,否则 systemd socket 激活会失败
网络配置别跳过 default 虚拟网络
新手常直接配桥接 br0,却忘了 libvirtd 默认自带一个 NAT 网络 default。它不依赖物理网卡,启动快、调试友好,适合验证 KVM 是否真通了。
- 运行
virsh net-list --all,若default状态是inactive,执行virsh net-start default和virsh net-autostart default - 创建测试 VM 时优先用
--network network=default,而不是--network bridge=br0;等virsh list和virsh console都能用,再折腾桥接 - 桥接配置错误(比如物理网卡
ONBOOT=no却把br0设成ONBOOT=yes)会导致宿主机失联,务必先备份原ifcfg-*文件
kvm 组这三件事叠在一起。单独做每一步都看似成功,合起来就是“一切正常但虚拟机起不来”。










