mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1603 字
4 分钟
QEMU 使用指南:开源虚拟化与仿真利器

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 update
sudo apt install qemu-system-x86 qemu-utils qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager -y
  • qemu-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 $USER
newgrp kvm

3. 创建虚拟机基础#

3.1 创建磁盘镜像#

QEMU 使用 qemu-img 创建虚拟磁盘文件:

# 创建 20GB 的 qcow2 格式磁盘
qemu-img create -f qcow2 ubuntu.qcow2 20G
  • -f qcow2:指定格式,qcow2 支持快照、压缩,性能较好
  • 也可选择 raw 格式(速度快但占用实际大小)

查看镜像信息:

qemu-img info ubuntu.qcow2

3.2 获取操作系统 ISO#

下载要安装的 ISO 文件,例如 Ubuntu 22.04:

wget https://releases.ubuntu.com/22.04/ubuntu-22.04.5-desktop-amd64.iso

3.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
-smpCPU 核心数-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 kvm

4.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)#

虚拟机与主机同网段,可被局域网其他设备访问。

  1. 在宿主机创建桥接接口(以 Ubuntu 为例):
# 安装 bridge-utils
sudo apt install bridge-utils
# 创建网桥 br0
sudo brctl addbr br0
# 将物理网卡(如 eth0)加入桥接(需先断开网络)
sudo ip link set eth0 down
sudo brctl addif br0 eth0
sudo ip link set eth0 up
# 配置 br0 的 IP(原 eth0 的配置)
sudo dhclient br0
  1. 启动虚拟机
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-managervirsh 创建网络,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.qcow2
qemu-img snapshot -a clean ubuntu.qcow2

7.2 动态迁移(Live Migration)#

支持在不中断服务的情况下将虚拟机迁移到另一台物理机。需共享存储和相同 CPU 特性,使用 virsh migrate 命令。

7.3 设备透传(PCI Passthrough)#

将物理设备(如 GPU、网卡)直接分配给虚拟机,获得近乎原生性能。需要硬件支持 IOMMU。

# 在宿主机配置 IOMMU
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on" # Intel
# GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on" # AMD
sudo update-grub
# 启动虚拟机时添加设备
qemu-system-x86_64 ... -device vfio-pci,host=01:00.0

7.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 管理工具,合理规划资源,定期备份虚拟机磁盘和配置。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

QEMU 使用指南:开源虚拟化与仿真利器
http://blog.mcstarland.top/posts/qemu/
作者
MEMZGBL
发布于
2026-03-25
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00