QEMU 是什么
QEMU 是提供完整设备模型的开源模拟器:它既能借助 KVM 以接近原生的速度运行同架构系统,也能用纯软件模拟的方式跨架构运行完全不同的指令集。在 KVM 平台上,QEMU 是虚机的执行本体,负责网卡、磁盘、芯片组与显示等设备的呈现。
基本信息
| 定位 | 设备模拟与虚拟机执行容器 |
|---|---|
| 运行模式 | KVM 加速(同架构)或纯软件模拟(跨架构) |
| 设备模型 | 多种主板类型;磁盘总线可选半虚拟化、SCSI、SATA 等 |
| 可执行文件 | 按目标架构命名,如 x86_64 与 aarch64 各自独立 |
| 网络后端 | 用户态网络、桥接、tap 设备等,性能与连通性各有取舍 |
| 常用配套 | qemu-img 处理镜像,libvirt 提供统一管理接口 |
用 QEMU 直接起一台虚机
用 QEMU 直接起一台虚机
qemu-system-x86_64 \
-enable-kvm -cpu host -smp 2 -m 2048 \
-drive file=disk.qcow2,if=virtio \
-netdev user,id=n0 -device virtio-net-pci,netdev=n0 \
-nographic
# -enable-kvm 走硬件加速,缺少权限时会退回纯软件模拟
# -cpu host 让客体继承宿主 CPU 特性,跨代宿主集群应改用统一基线常用参数与作用
| 参数 | 作用 | 常见误用 |
|---|---|---|
| -enable-kvm | 启用硬件加速 | 缺少权限时静默回退,性能下降不易察觉 |
| -cpu host | 透传宿主 CPU 特性 | 跨代宿主集群中导致迁移失败 |
| -m | 分配内存容量 | 超配过多引发宿主内存压力 |
| -smp | 设置 vCPU 数量 | 核数与宿主不匹配时互相争抢 |
| -drive | 挂载磁盘镜像 | 与旧式磁盘参数同时使用造成设备重复 |
| -netdev 与 -device | 组合定义网卡后端与前端 | 后端标识写错导致网卡缺失 |
典型使用场景
- 本地实验:不依赖管理平台直接起虚机验证引导与内核参数
- 跨架构验证:在 x86 主机上模拟 ARM 环境做兼容性测试
- 镜像调试:挂载镜像检查内容或修复引导配置
- 手工排障:绕过管理平台,用最小参数复现问题
判断是否真正走硬件加速,可查看虚机进程的启动参数与宿主内核日志;若缺少设备节点权限或嵌套虚拟化未开启,程序会回落到纯软件模拟,表现是启动慢、CPU 占用高但功能正常,容易被误判为磁盘性能问题。