在 CentOS 上安装和配置 QEMU-KVM 虚拟机环境,通常分为以下几个关键步骤。以下操作以 CentOS 7/8 为例(若为 CentOS Stream 9 或 RHEL 系列,命令基本一致,但包名可能略有差异):
✅ 一、检查 CPU 是否支持虚拟化
# 查看 Intel VT-x 或 AMD-V 是否开启
grep -E '(vmx|svm)' /proc/cpuinfo
- 若有输出,说明 CPU 支持虚拟化;
- 若无输出,请进入 BIOS/UEFI 开启 Intel VT-x 或 AMD-V 功能。
💡 提示:部分云服务器(如阿里云、腾讯云、AWS 等)默认未启用 KVM 虚拟化,需确认实例类型是否支持(例如阿里云的
ecs.g6等通用型实例通常支持)。
✅ 二、安装 KVM 及相关工具
1. 安装 QEMU-KVM 及管理工具
sudo yum install -y qemu-kvm libvirt libvirt-daemon-config-network
libvirt-daemon-kvm virt-manager bridge-utils guestfs-tools
⚠️ 注意:
libvirt-daemon-config-network用于自动创建virbr0网桥(可选但推荐);virt-manager是图形化管理工具(若仅需命令行,可省略);bridge-utils用于手动配置网桥网络(高级用法)。
2. 启动并启用 libvirtd 服务
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd
确认状态为 active (running)。
✅ 三、配置用户权限(避免 sudo 频繁使用)
将当前用户加入 libvirt 和 kvm 组:
sudo usermod -aG libvirt,kvm $USER
🔐 修改后需重新登录(或执行
newgrp kvm && newgrp libvirt)使组生效。
验证:
groups | grep -E 'libvirt|kvm'
✅ 四、验证 KVM 是否正常工作
# 检查内核模块是否加载
lsmod | grep kvm
# 测试 libvirt 连接
virsh list --all
# 查看可用后端
virsh capabilities | grep -A 5 '<arch name="x86_64">'
若 virsh list --all 返回空列表但无报错,说明环境已就绪。
✅ 五、创建示例虚拟机(CLI 方式)
1. 准备 ISO 镜像(以 CentOS 9 Stream 为例)
# 下载 ISO(示例地址,请替换为官方源)
wget https://mirror.centos.org/centos/9-stream/BaseOS/x86_64/os/images/pxeboot/vmlinuz
wget https://mirror.centos.org/centos/9-stream/BaseOS/x86_64/os/images/pxeboot/initrd.img
# 更推荐使用完整 ISO:
wget https://mirrors.aliyun.com/centos/9-stream/ISOs/x86_64/CentOS-Stream-9-GenericCloud-latest.x86_64.iso
将 ISO 放入 /var/lib/libvirt/images/ 或自定义目录。
2. 使用 virt-install 创建 VM
sudo virt-install
--name centos9-test
--ram 2048
--vcpus 2
--disk path=/var/lib/libvirt/images/centos9-test.qcow2,size=20,format=qcow2
--cdrom /path/to/CentOS-Stream-9-GenericCloud-latest.x86_64.iso
--network network=default
--graphics vnc,listen=0.0.0.0
--os-variant centos9.0
📌 参数说明:
--network network=default:使用 libvirt 默认的 NAT 网络(virbr0);--graphics vnc:启用 VNC 远程访问(需配合防火墙规则);--os-variant:帮助 libvirt 优化性能(非必需,但推荐)。
3. 启动并查看 VM
sudo virsh start centos9-test
sudo virsh list --all
通过 VNC 连接(如使用 virt-viewer 或 noVNC)进行安装。
✅ 六、网络配置建议(进阶)
方案 A:默认 NAT(简单,适合单机测试)
- 已启用:
virbr0网桥 + DHCP; - 无需额外配置,VM 可上网。
方案 B:桥接模式(需宿主机有物理网卡)
# 编辑网桥配置(CentOS 7/8 使用 NetworkManager 或 ifcfg)
# 示例:创建 br0 绑定 eth0
sudo nmcli connection add type bridge con-name br0 ifname br0
sudo nmcli connection add type bridge-slave master br0 slave-type bridge ifname eth0
sudo nmcli connection up br0
然后在 virt-install 中使用:
--network bridge=br0,model=virtio
✅ 七、安全与优化建议
| 项目 | 建议 |
|---|---|
| 防火墙 | 开放 VNC 端口(5900+)仅对内网:firewall-cmd --add-port=5900/tcp --permanent |
| SELinux | 生产环境建议保持 enforcing,但需确保 VM 磁盘路径正确标记:chcon -R -t virt_image_t /var/lib/libvirt/images/ |
| 性能优化 | 使用 virtio 驱动(磁盘/网络),启用 KSM/KVM 内存合并(高级) |
| 备份 | 定期用 virsh dumpxml + qemu-img snapshot 做快照备份 |
✅ 八、常用 virsh 命令速查
virsh list --all # 列出所有 VM
virsh start <name> # 启动
virsh shutdown <name> # 优雅关机
virsh destroy <name> # 强制停止
virsh undefine <name> # 删除定义(保留磁盘)
virsh domblklist <name> # 查看磁盘
virsh console <name> # 进入控制台
virsh screenshot <name> file.png # 截图
❗ 常见问题排查
| 问题 | 解决方案 |
|---|---|
error: Failed to connect socket |
检查 libvirtd 是否运行;重启:systemctl restart libvirtd |
Permission denied |
确认用户已在 libvirt 和 kvm 组;重新登录 |
KVM not available |
检查 BIOS 虚拟化开关;云服务器需确认实例类型支持 |
| 网络不通 | 检查 virbr0 状态:ip addr show virbr0;尝试 virsh net-start default |
需要我提供:
- 自动化部署脚本(Ansible/YAML)?
- 使用 Docker + KVM 的混合方案?
- 图形化管理界面(Cockpit + WebVNC)配置指南?
欢迎告诉我你的具体场景(开发测试 / 生产部署 / 多租户隔离等),我可进一步定制方案。
PHPWP博客