在Linux系统上搭建虚拟化环境,KVM是目前最主流的开源方案之一。它利用Linux内核自带的虚拟化模块,配合QEMU进行硬件模拟,再通过libvirt工具集统一管理,能够在一台物理服务器上稳定运行多个隔离的虚拟机。相比纯软件虚拟化,KVM因为直接走CPU硬件辅助虚拟化指令,开销更小,兼容性也更好。

一、环境准备与硬件检测
在开始配置之前,必须确认物理机的CPU支持虚拟化扩展。Intel平台需要VT-x,AMD平台需要AMD-V。如果BIOS中关闭了相关选项,系统层面无论如何都无法启用KVM。可以通过读取/proc/cpuinfo中的标志位来快速判断,也可以使用专门工具检测。
除了CPU支持,还要保证系统内核版本较新,并且已经加载了KVM相关内核模块。不同发行版的软件源中,KVM所需的用户态工具名称略有差异,但核心组件基本一致。下面以常见的Debian系和RHEL系为例,展示检测脚本:
# 检查CPU虚拟化支持 grep -E '(vmx|svm)' /proc/cpuinfo # 若输出中包含vmx(Intel)或svm(AMD)则说明硬件支持 # 检查KVM模块是否已加载 lsmod | grep kvm # 如果未加载,可手动加载 sudo modprobe kvm sudo modprobe kvm_intel # Intel CPU # sudo modprobe kvm_amd # AMD CPU
二、安装KVM与libvirt组件
KVM本身只是内核模块,真正易用离不开QEMU和libvirt。QEMU提供对各类网卡、磁盘、显卡的模拟能力;libvirt则封装了创建、启动、暂停、迁移虚拟机的API,并附带命令行工具virsh和图形工具virt-manager。安装时建议一次性装全,避免后续管理时缺组件。
在Ubuntu或Debian上,可以使用如下命令安装核心套件。其中bridge-utils用于网桥配置,使虚拟机能够接入物理网络:
sudo apt update sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager # 将当前用户加入libvirt组,避免每次使用sudo sudo usermod -aG libvirt $USER newgrp libvirt
在CentOS或Rocky Linux等RHEL系发行版中,命令稍有不同,但组件对应关系一致:
sudo dnf install -y qemu-kvm libvirt virt-manager bridge-utils sudo systemctl enable --now libvirtd
三、配置虚拟网络与存储
libvirt默认会创建一个名为default的NAT网络,虚拟机通过它可访问外网,但外部无法直接访问虚拟机。如果希望虚拟机像物理机一样处于局域网,就需要配置Linux网桥。网桥可以把物理网卡和虚拟网卡接到同一个二层网络,实现桥接上网。
以下示例在Ubuntu下通过netplan配置一个桥接网卡br0,将物理网卡enp3s0加入桥中。配置后虚拟机指定桥接网络即可获得与宿主机同段的IP:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
bridges:
br0:
interfaces: [enp3s0]
dhcp4: yes
存储方面,libvirt使用存储池(storage pool)管理磁盘镜像。默认池路径通常为/var/lib/libvirt/images。可以用virsh命令查看和创建池,也可以直接把qcow2文件放进去作为虚拟机磁盘。qcow2格式支持快照和动态扩容,是推荐的选择。
# 查看现有存储池 virsh pool-list --all # 创建目录类型存储池 virsh pool-define-as mypool dir - - - - /data/kvm_images virsh pool-build mypool virsh pool-start mypool virsh pool-autostart mypool
四、创建并运行虚拟机
当网络和存储就绪后,就能用virt-install命令快速创建虚拟机。该命令会自动调用libvirt接口,指定CPU、内存、磁盘、镜像和网卡类型。下面以桥接模式安装一个Ubuntu Server虚拟机为例:
sudo virt-install --name ubuntu-vm01 --ram 2048 --vcpus 2 --disk path=/data/kvm_images/ubuntu-vm01.qcow2,size=20,format=qcow2 --network bridge=br0,model=virtio --os-type linux --os-variant ubuntu22.04 --cdrom /iso/ubuntu-22.04-live-server-amd64.iso --graphics none --console pty,target_type=serial
如果习惯图形操作,也可以打开virt-manager,通过向导选择ISO、分配资源并指定桥接网络,过程更直观。创建完成后,用virsh list --all能看到虚拟机状态,virsh start 名称可开机,virsh shutdown 名称可关机。
日常维护中,建议开启虚拟机自动启动,并定期用virsh snapshot-create做快照。这样在系统升级或配置变更出错时,能快速回滚到稳定状态,降低运维风险。
五、常见问题与排查思路
最常见的故障是执行virsh命令时报权限不足,一般是因为当前用户不在libvirt组,或libvirtd服务未运行。另一个高频问题是虚拟机无法联网,多数由于网桥未正确绑定物理网卡,或交换机端口限制了MAC学习。
当虚拟机启动慢或卡在BIOS阶段,可检查宿主机是否开启了嵌套虚拟化,以及磁盘镜像格式是否为高效的qcow2。通过top或htop观察qemu-system进程占用,也能判断是否出现资源争抢。掌握这些基础排查手段,基本可以应对中小规模KVM平台的日常运维。