Linux 虚拟化实战:KVM/QEMU、libvirt、virt-manager 与嵌套虚拟化

Linux 虚拟化实战:KVM/QEMU 架构原理、硬件虚拟化支持检测、libvirt 与 virsh 管理、virt-manager 图形创建虚拟机、命令行创建 VM、嵌套虚拟化与性能调优。

引言

Linux 原生的虚拟化方案是 KVM + QEMU:KVM 是内核模块(利用 CPU 硬件虚拟化指令),QEMU 是用户态模拟器(提供设备与内存仿真),两者配合实现高性能虚拟机。本文从架构原理讲起:先确认硬件支持与安装,再讲 libvirt 管理栈(virsh 命令行 + virt-manager 图形),演示用 virt-install 从零创建一台虚拟机,最后覆盖快照、迁移、嵌套虚拟化与性能调优,让你在 Linux 上自如开虚拟机。

前置:/linux-process-management/(系统资源)、/linux-performance-tuning/(CPU/内存调优)。容器见 /linux-containers-isolation/,VM 与容器对比在该文第 8 节。


目录


1. KVM/QEMU 架构:内核虚拟化 + 用户态模拟

KVM 与 QEMU 的分工:

宿主机内核:
  KVM 模块 → 直接执行 guest 指令(利用 VT-x/AMD-V 硬件虚拟化)
  → guest 几乎原生速度

用户态:
  QEMU → 模拟设备(网卡/磁盘/显示器)、管理内存
  → 提供「虚拟硬件」

libvirt → 管理 QEMU/KVM 的统一 API(virsh/virt-manager 用它)

为什么 KVM 快:

传统模拟:每条 guest 指令都要翻译 → 极慢
KVM:guest 指令直接在 CPU 上跑(硬件辅助)
    → 只有特权指令需要陷入内核处理 → 接近原生性能
层次职责类比
KVMCPU/内存虚拟化硬件加速器
QEMU设备模拟虚拟硬件供应商
libvirt管理/编排虚拟机管家

心智:KVM 给速度、QEMU 给硬件、libvirt 给管理——三件套合起来才是完整的虚拟化平台。


2. 硬件支持检测与安装

检测 CPU 是否支持虚拟化:

# 确认 VT-x(Intel)或 AMD-V(AMD)
grep -E '(vmx|svm)' /proc/cpuinfo | head -1
# 或
lscpu | grep Virtualization

# 确认 KVM 模块加载
lsmod | grep kvm
ls /dev/kvm        # 存在则 KVM 可用

安装虚拟化组件(Debian/Ubuntu):

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients virtinst virt-manager
sudo systemctl enable --now libvirtd
sudo usermod -aG kvm,libvirt $USER   # 加入组免 sudo

RHEL/CentOS:

sudo dnf install qemu-kvm libvirt virt-install virt-manager
sudo systemctl enable --now libvirtd

验证安装:

virsh version          # libvirt + QEMU 版本
virsh list --all       # 当前虚拟机(应为空)

铁律:没有 /dev/kvm 就没有硬件加速——在云主机/无嵌套虚拟化的环境里 KVM 不可用,只能纯软件模拟(慢)。


3. libvirt 管理栈:virsh 与 virt-manager

libvirt 统一管理入口:

virsh(命令行) + virt-manager(图形) + 云平台 API
        ↓ 都走 libvirt
   QEMU/KVM、Xen、LXC、VMware...

virsh 最常用命令:

virsh list --all                    # 全部虚拟机
virsh start <vm>                    # 启动
virsh shutdown <vm>                 # 优雅关机
virsh destroy <vm>                  # 强制断电
virsh reboot <vm>
virsh suspend <vm> / virsh resume <vm>
virsh autostart <vm>                # 宿主机启动自动起
virsh dominfo <vm>                  # 查看配置信息
virsh vcpuinfo <vm>                 # vCPU 情况
virsh domifaddr <vm>                # 虚拟机 IP
virsh console <vm>                  # 连接串口控制台

virt-manager(图形界面):启动后点「新建虚拟机」,向导式创建——适合新手。

记忆:virsh 是虚拟机的 systemctl——list/start/shutdown/destroy/autostart,一套命令管理所有 VM。


4. 创建第一台虚拟机:virt-install

virt-install 命令行创建 VM(Ubuntu 镜像示例):

# 1. 下载 ISO(或已有镜像)
wget https://releases.ubuntu.com/24.04/ubuntu-24.04-desktop-amd64.iso

# 2. virt-install 创建
sudo virt-install \
  --name ubuntu24 \
  --ram 4096 \
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/ubuntu24.qcow2,size=40,format=qcow2 \
  --os-variant ubuntu24.04 \
  --cdrom /path/to/ubuntu.iso \
  --network network=default \
  --graphics vnc,listen=127.0.0.1,port=-1 \
  --noautoconsole

参数详解:

参数含义
–nameVM 名字
–ram / –vcpus内存/vCPU
–disk path,size磁盘路径与大小(qcow2)
–os-variant系统类型(优化配置)
–cdrom / –location安装源
–network网络(default 桥接 NAT)
–graphics vnc图形控制台(VNC/SPICE)
–noautoconsole不自动连控制台

检查创建:

virsh list --all
virsh domifaddr ubuntu24      # 等装完查 IP

记忆:virt-install 一条命令生成 VM——名字、内存、CPU、磁盘、ISO、网络六要素配齐即可。


5. virsh 常用管理命令

虚拟机生命周期管理:

virsh list --all                 # 列出
virsh start web01                # 启动
virsh shutdown web01             # 优雅关机
virsh destroy web01              # 强制断电(慎用)
virsh undefine web01             # 删除定义(不删磁盘)
virsh undefine web01 --remove-all-storage   # 连磁盘一起删

资源调整(在线/离线):

virsh setvcpus web01 8 --live --config      # 加 vCPU(热加)
virsh setmem web01 8G --live --config       # 加内存(热加)

磁盘管理:

# 磁盘格式转换
qemu-img convert -O qcow2 disk.raw disk.qcow2
# 查看磁盘信息
qemu-img info /var/lib/libvirt/images/web01.qcow2

控制台访问:

virsh console web01        # 串口控制台(配了 serial 才可用)

记忆:virsh 三块——生命周期(start/shutdown/destroy)、资源(vcpus/mem 热调)、磁盘(qemu-img)——日常运维全够。


6. 快照与克隆

快照(恢复点):

# 创建快照
virsh snapshot-create-as web01 snap-before-upgrade "before system upgrade"
# 列出快照
virsh snapshot-list web01
# 恢复快照
virsh snapshot-revert web01 snap-before-upgrade
# 删除快照
virsh snapshot-delete web01 snap-before-upgrade

克隆(复制虚拟机):

# 克隆(需先关闭源 VM)
virt-clone --original web01 --name web02 --auto-clone
# --auto-clone 自动处理磁盘路径

快照 vs 克隆:

维度快照克隆
目的恢复点/回滚复制出新 VM
关系依赖原盘独立
场景升级前存档批量部署

记忆:升级/高危操作前先打快照,部署多台时用克隆——快照保回滚、克隆保复制。


7. 虚拟机迁移:静态与动态

静态迁移(关机迁移):拷贝磁盘 + 定义到目标主机。

动态迁移(在线迁移,零停机):

# 同一宿主机组/共享存储下
virsh migrate --live --p2p web01 qemu+ssh://target-host/system
# --live:不中断服务
# --p2p:对等直连,不走管理节点

迁移前提:

1. 共享存储(NFS/iSCSI)或镜像磁盘
2. 目标主机同架构(CPU 兼容)
3. 网络互通 + SSH 信任
迁移类型停机场景
静态有简单/跨机房
动态无维护窗口零停机

记忆:动态迁移靠共享存储 + CPU 兼容——在线把 VM 从宿主机 A 挪到 B,业务无感知。


8. 嵌套虚拟化与 GPU 直通

嵌套虚拟化(VM 里再跑 KVM)——测试/开发常用:

# 宿主机确认嵌套虚拟化(Intel)
cat /sys/module/kvm_intel/parameters/nested
# 启用(写到 /etc/modprobe.d/kvm.conf)
options kvm_intel nested=1
# 生效后 VM 里才能再用 KVM(见第 2 节检测)

GPU 直通(VFIO,游戏/GPU 计算):

把物理 GPU 直接给 VM 用:
1. 确认 CPU 支持 IOMMU(intel_iommu=on)
2. 绑定 GPU 到 vfio-pci 驱动
3. virt-install 里加 --hostdev <pci-address>
技术用途复杂度
嵌套虚拟化VM 里测虚拟化低
GPU 直通图形/计算高

记忆:嵌套虚拟化开一个内核参数即可;GPU 直通要 IOMMU + VFIO——前者改配置、后者动硬件,难度不同量级。


9. 性能调优与常见问题

性能调优:

手段说明
直通网卡(virtio)virtio 网卡比模拟 e1000 快
直通磁盘(virtio-blk)同样 virtio 更快
CPU 亲和virsh vcpupin 绑核
大页内存减少 TLB miss
关闭无用设备精简 QEMU 设备模拟

常见问题:

问题原因解法
无 /dev/kvm无硬件虚拟化开嵌套/换真机
VM 起不来磁盘路径/权限查 qemu-img、libvirt 日志
网卡不通网络配置virsh net-list 检查默认网络
性能慢设备模拟换 virtio 设备
磁盘占满qcow2 增长qemu-img info + trim
迁移失败CPU 不兼容检查 host-passthrough

日志查看:

journalctl -u libvirtd -f        # libvirt 日志
tail /var/log/libvirt/qemu/<vm>.log   # 单 VM 日志

记忆:KVM 性能关键是「设备直通」——virtio 网卡/磁盘、绑核、大页,三招吃透虚拟机性能。


10. 速查表

需求做法
检测虚拟化`grep -E ‘(vmx
装平台qemu-kvm + libvirt + virt-install
建 VMvirt-install --name web01 ...
启动/关机virsh start/shutdown web01
快照snapshot-create-as / snapshot-revert
克隆virt-clone --original A --name B
动态迁移virsh migrate --live --p2p
热加资源setvcpus/setmem --live
嵌套虚拟化kvm_intel nested=1
GPU 直通IOMMU + VFIO + –hostdev
加速virtio 设备 + 绑核 + 大页

一句话记忆:KVM 给硬件加速、QEMU 模拟设备、libvirt 统一管理;virt-install 建机、virsh 管生命周期、快照保回滚、克隆复制、动态迁移零停机;嵌套虚拟化开参数、GPU 直通上 VFIO;性能靠 virtio 直通 + 绑核 + 大页——Linux 虚拟化一条链全在这。


延伸阅读

  • /linux-containers-isolation/ — 容器 vs VM 对比
  • /linux-performance-tuning/ — CPU/内存调优
  • /linux-filesystem-disk/ — 磁盘与存储
  • [[infra]] — 云与虚拟化基础设施
  • [[os]] — 操作系统原理

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「linux」更多文章

  1. Linux 高级文件系统:XFS、Btrfs、ZFS 与存储进阶
  2. Linux 高可用与负载均衡:HAProxy、Keepalived 与集群方案
  3. Linux 防火墙与 nftables:规则集、链、NAT 与网络安全防护