QEMU 完全指南:开源虚拟化与仿真利器
在虚拟化领域,QEMU 以其开源的特性、强大的硬件仿真能力和灵活的配置方式,成为开发者、测试人员及虚拟化爱好者的首选工具。无论是运行不同架构的操作系统(如 ARM 程序在 x86 机器上),还是搭建轻量级虚拟机进行开发测试,QEMU 都能胜任。
本文将带你从零开始,在 Ubuntu 上全面掌握 QEMU,涵盖安装、虚拟机创建、网络配置、KVM 加速以及高级用法,助你开启虚拟化之旅。
1. QEMU 是什么?
QEMU(Quick EMUlator)是一款开源的通用机器模拟器和虚拟化软件。它可以模拟完整的计算机系统(CPU、内存、外设等),让用户在一个操作系统上运行另一个操作系统或程序,且支持多种硬件架构(x86、ARM、MIPS、RISC-V 等)。
1.1 QEMU 与 KVM 的关系
- QEMU 本身:纯软件模拟,速度较慢,但支持跨架构。
- KVM(Kernel-based Virtual Machine):Linux 内核模块,利用 CPU 硬件虚拟化技术(Intel VT-x / AMD-V)加速,使虚拟机接近原生性能。
- 组合使用:QEMU 负责提供设备模拟,KVM 负责 CPU 和内存加速,二者结合实现高性能虚拟化。在 Linux 下,通常使用
qemu-system-*命令配合 KVM 加速。
2. 安装 QEMU
2.1 安装 QEMU 完整包
在 Ubuntu 上,推荐安装完整的 QEMU 套件:
sudo apt updatesudo apt install qemu-system-x86 qemu-utils qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager -yqemu-system-x86:x86 架构的系统模拟器qemu-utils:磁盘工具(如qemu-img)qemu-kvm:KVM 支持libvirt-daemon-system:libvirt 守护进程,便于管理virt-manager:图形化管理工具(可选)
2.2 验证 KVM 是否可用
# 检查硬件虚拟化支持egrep -c '(vmx|svm)' /proc/cpuinfo # 输出大于0表示支持
# 检查 KVM 模块是否加载lsmod | grep kvm
# 查看 KVM 状态kvm-ok如果输出 INFO: /dev/kvm exists,则 KVM 可用。
2.3 将用户加入 kvm 组(可选)
sudo usermod -aG kvm $USERnewgrp kvm3. 创建虚拟机基础
3.1 创建磁盘镜像
QEMU 使用 qemu-img 创建虚拟磁盘文件:
# 创建 20GB 的 qcow2 格式磁盘qemu-img create -f qcow2 ubuntu.qcow2 20G-f qcow2:指定格式,qcow2 支持快照、压缩,性能较好- 也可选择
raw格式(速度快但占用实际大小)
查看镜像信息:
qemu-img info ubuntu.qcow23.2 获取操作系统 ISO
下载要安装的 ISO 文件,例如 Ubuntu 22.04:
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.5-desktop-amd64.iso3.3 启动安装程序
使用 qemu-system-x86_64 启动虚拟机并挂载 ISO:
qemu-system-x86_64 \ -m 2048 \ # 内存 2GB -smp 2 \ # CPU 核心数 -drive file=ubuntu.qcow2,if=virtio \ # 磁盘驱动使用 virtio -cdrom ubuntu-22.04.5-desktop-amd64.iso \ -boot d \ # 从光盘启动 -vga virtio \ # 显卡驱动 -display sdl # 显示输出(或 gtk, spice)按提示完成操作系统安装。安装完成后,下次启动时移除 -cdrom 和 -boot d。
4. 基本启动参数
4.1 常用参数
| 参数 | 说明 | 示例 |
|---|---|---|
-m | 内存大小(MB) | -m 4096 |
-smp | CPU 核心数 | -smp 4 |
-drive | 磁盘驱动 | -drive file=disk.qcow2,if=virtio |
-netdev | 网络设备 | -netdev user,id=net0 |
-device | 设备添加 | -device virtio-net-pci,netdev=net0 |
-vga | 显卡类型 | -vga virtio |
-display | 显示后端 | -display gtk |
-accel | 加速器 | -accel kvm(启用 KVM) |
4.2 启用 KVM 加速
加上 -accel kvm 参数:
qemu-system-x86_64 -m 2048 -smp 2 -drive file=ubuntu.qcow2,if=virtio -accel kvm4.3 无图形界面启动(串口控制台)
适合服务器虚拟机:
qemu-system-x86_64 -m 1024 -smp 1 -drive file=server.qcow2,if=virtio -nographic -serial mon:stdio-nographic 禁用图形输出,将控制台重定向到终端。
5. 网络配置
5.1 用户模式网络(User-mode)
默认网络,虚拟机可访问外网(通过 NAT),但主机无法直接访问虚拟机。
qemu-system-x86_64 ... -netdev user,id=net0 -device virtio-net-pci,netdev=net0虚拟机 IP 通常为 10.0.2.15,主机通过 10.0.2.2 访问。
端口转发:将主机端口映射到虚拟机端口:
-netdev user,id=net0,hostfwd=tcp::2222-:22主机 SSH 连接到虚拟机:ssh -p 2222 user@localhost
5.2 桥接网络(Bridge)
虚拟机与主机同网段,可被局域网其他设备访问。
- 在宿主机创建桥接接口(以 Ubuntu 为例):
# 安装 bridge-utilssudo apt install bridge-utils
# 创建网桥 br0sudo brctl addbr br0
# 将物理网卡(如 eth0)加入桥接(需先断开网络)sudo ip link set eth0 downsudo brctl addif br0 eth0sudo ip link set eth0 up
# 配置 br0 的 IP(原 eth0 的配置)sudo dhclient br0- 启动虚拟机:
qemu-system-x86_64 ... \ -netdev tap,id=net0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown \ -device virtio-net-pci,netdev=net0需要编写脚本配置 tap 设备。更简单的方法是使用 libvirt 管理网络。
5.3 使用 libvirt 简化网络
安装 libvirt 后,可通过 virt-manager 或 virsh 创建网络,QEMU 命令行会自动配置。
6. 使用 virt-manager 图形化管理
virt-manager 是图形化虚拟机管理工具,底层使用 libvirt 调用 QEMU/KVM。
sudo virt-manager点击“新建虚拟机”,选择 ISO 或现有磁盘,配置资源后即可创建。对于不熟悉命令行的用户,virt-manager 提供了更直观的操作界面。
7. 高级特性
7.1 快照(Snapshots)
qcow2 镜像支持快照:
# 创建快照virsh snapshot-create-as --domain ubuntu --name clean
# 列出快照virsh snapshot-list ubuntu
# 恢复快照virsh snapshot-revert ubuntu clean使用 qemu 命令行也可创建快照:
qemu-img snapshot -c clean ubuntu.qcow2qemu-img snapshot -a clean ubuntu.qcow27.2 动态迁移(Live Migration)
支持在不中断服务的情况下将虚拟机迁移到另一台物理机。需共享存储和相同 CPU 特性,使用 virsh migrate 命令。
7.3 设备透传(PCI Passthrough)
将物理设备(如 GPU、网卡)直接分配给虚拟机,获得近乎原生性能。需要硬件支持 IOMMU。
# 在宿主机配置 IOMMUsudo nano /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on" # Intel# GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on" # AMDsudo update-grub
# 启动虚拟机时添加设备qemu-system-x86_64 ... -device vfio-pci,host=01:00.07.4 跨架构仿真
QEMU 支持模拟不同架构,例如在 x86 上运行 ARM 系统:
qemu-system-aarch64 -M virt -cpu cortex-a57 -m 2048 -drive file=arm64.qcow2,if=virtio -cdrom ubuntu-arm64.iso需要安装对应的 qemu-system-arm 包。
8. 性能优化
- 启用 KVM:
-accel kvm - 使用 virtio 驱动:磁盘和网卡使用
virtio设备,性能最佳。 - 分配足够的 CPU 和内存:避免过度分配。
- CPU 固定(pin):将 vCPU 绑定到物理 CPU 核心。
- 使用大页内存:
-mem-prealloc -mem-path /dev/hugepages
9. 常见问题与解决
| 问题 | 解决方法 |
|---|---|
| KVM 不可用 | 检查 CPU 是否支持虚拟化,BIOS 是否开启,且已加载 kvm 模块 |
| 虚拟机无网络 | 使用用户模式 NAT 时检查端口转发;桥接模式需正确配置网桥 |
| 图形界面卡顿 | 启用 virtio 显卡,或使用 -vga qxl 配合 SPICE 协议 |
| 无法访问主机上的文件 | 使用 9p 共享文件系统:-virtfs local,path=/host/share,mount_tag=share |
| 性能低下 | 确保启用 KVM 加速,使用 virtio 驱动,避免使用模拟设备(如 rtl8139) |
10. 总结
QEMU 作为开源虚拟化的基石,结合 KVM 后可提供高性能、高灵活性的虚拟化解决方案。本文从安装到高级特性,全面介绍了 QEMU 在 Ubuntu 上的使用方法。无论你是开发人员、系统管理员,还是虚拟化爱好者,掌握 QEMU 都将为你打开一扇通往强大虚拟化世界的大门。
进一步学习资源:
温馨提示:在生产环境中使用虚拟化时,建议结合 libvirt 管理工具,合理规划资源,定期备份虚拟机磁盘和配置。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时









