做嵌入式开发或者后端运维的同学,大概率遇到过这种场景:手里只有一台 x86 笔记本,却要调试 ARM 板子的程序;或者想在本地快速体验某个 Linux 发行版,又不想装 VMware 这类重型软件。之前我也被这类问题困扰,后来系统梳理了 QEMU 之后,很多麻烦都用一条命令解决了。本文结合近期实战经验,整理一份完整的 QEMU 使用教程,从基础概念、环境安装、全系统模拟、KVM 加速到跨架构运行,尽量把关键配置讲清楚,并附上可直接复制的命令。
QEMU 是一个开源模拟器兼虚拟机监控器,覆盖 x86、ARM、RISC-V、PowerPC、MIPS 等多种架构。它既能用来做纯粹的软件模拟,也能借助 KVM、WHPX、HVF 等硬件虚拟化加速,让虚拟机运行速度接近宿主机。对于学习 Linux、研究操作系统内核、嵌入式交叉开发、体验国产操作系统,QEMU 都是一个非常值得掌握的工具。
1. QEMU 是什么:虚拟化与模拟的区别
1.1 一个工具解决两类需求
很多人刚接触 QEMU 时,容易把“模拟”和“虚拟化”混为一谈。实际上,这两个词描述的是两种不同的能力:
- 模拟(Emulation):用软件模拟一套完整的硬件环境。比如你在 x86 电脑上模拟出一块 ARM 开发板,让 ARM 架构的 Linux 镜像运行起来。这种模式下,CPU 指令由 QEMU 翻译执行,速度会比较慢,但可以解决“架构不同”的问题。
- 虚拟化(Virtualization):通过硬件辅助虚拟化技术,让虚拟机直接运行在宿主机的 CPU 上。比如在 Linux 上通过 KVM 模块运行另一个 Linux 或 Windows 虚拟机。这种模式性能损失很小,接近原生速度。
QEMU 的神奇之处在于,它把这两种需求都集成在一个工具里。只要你有一台普通的 x86 电脑,就可以通过 QEMU 运行 Linux、Windows、国产麒麟系统、FreeBSD 等不同操作系统,甚至可以跨架构运行 ARM 和 RISC-V 的系统镜像。这也是 QEMU 在嵌入式 Linux 开发、内核调试、CI 测试、服务器虚拟化等领域被广泛使用的原因。
1.2 与 VMware、VirtualBox 的差异
很多人用过 VMware Workstation 或者 VirtualBox,它们主要是图形界面的虚拟机软件,使用门槛低,适合桌面用户。QEMU 和它们相比,有几个明显区别:
| 对比项 | QEMU | VMware / VirtualBox |
|---|---|---|
| 开源免费 | 完全开源 | 社区版免费,商业版收费 |
| 命令行 / 图形 | 以命令行为主,也可加图形界面 | 图形界面为主 |
| 跨架构模拟 | 支持 x86 / ARM / RISC-V 等 | 主要支持同架构 x86 |
| 二次开发 | 模块化设计,接口开放 | 二次开发难度较大 |
| 资源占用 | 轻量,便于脚本化 | 相对较重 |
因此,如果你是做嵌入式开发、内核调试,或者希望在服务器上批量创建虚拟机,QEMU 是更合适的选择。如果你只是想在 Windows 桌面里跑一个 Ubuntu 办公使用,VMware 会更友好。两者并不冲突,实际项目中也可以根据场景搭配使用。
2. 环境准备:在 Linux / Windows / macOS 安装 QEMU
QEMU 的安装方式非常灵活,官方提供了各平台的安装包,主流 Linux 发行版的软件源里也都有。下面分别介绍。
2.1 Linux 下安装 QEMU
在 Ubuntu / Debian 系统中,可以直接用 apt 安装。建议按需安装对应架构的 QEMU 包,比安装完整包更清晰:
# 安装 x86 架构模拟器 sudo apt update sudo apt install qemu-system-x86 qemu-system-arm qemu-system-riscv64 qemu-utils如果不想区分架构,也可以安装元包:
sudo apt install qemu-system在 CentOS / RHEL 系列系统中,使用 yum 或 dnf:
# CentOS 7 / 8 sudo yum install qemu-kvm qemu-img # CentOS 9 / RHEL 9 / Rocky Linux sudo dnf install qemu-system-x86 qemu-imgFedora 用户也可以直接使用 dnf 安装 qemu-system-x86 等相关包。安装完成后,可以使用qemu-system-x86_64 --version验证是否成功。
2.2 Windows 下安装 QEMU
Windows 下推荐直接下载 QEMU 官方编译好的安装包,也可以使用 Chocolatey 包管理器:
choco install qemu安装完成后,默认路径一般在C:\Program Files\qemu。为了让命令行直接使用qemu-system-x86_64,需要把这个目录加入系统 PATH 环境变量。
在 Windows 上需要注意,PowerShell 和 CMD 对命令行的反斜杠续行符支持不好,本文示例以 Linux/macOS 的 bash 风格为主。如果你在 Windows 上操作,需要把命令中的\换成^,或者直接写成一行。QEMU 在 Windows 上同样支持 WHPX 加速,这样运行 Windows/Linux 虚拟机时性能也不会太差。
2.3 macOS 下安装 QEMU
macOS 用户如果安装了 Homebrew,安装非常简单:
brew install qemumacOS 上 QEMU 支持 Hypervisor.framework 加速,对应的加速器名称为hvf。在 Apple Silicon(M1/M2/M3)上,QEMU 可以很好地模拟 ARM64 和一些其他架构,也可以虚拟化 macOS 和 Linux,是很多开发者在本机做异构环境测试的首选工具。
2.4 验证安装是否成功
无论哪个平台,验证安装的方式都一样:
qemu-system-x86_64 --version qemu-img --version qemu-system-aarch64 --version正常情况下会输出对应的 QEMU 版本信息。如果提示命令找不到,说明没有安装成功,或者 PATH 没有配置正确。
3. QEMU 核心概念拆解:架构、加速器与磁盘镜像
正式开始使用之前,有必要把 QEMU 的几个核心概念弄清楚。这些概念在实际配置中会反复用到,提前理解能少踩很多坑。
3.1 两种运行模式
QEMU 提供两种运行模式:
系统模式(System Mode):模拟完整的主机硬件环境,包括 CPU、内存、磁盘、网卡、显卡等,可以在这套模拟环境中启动一个完整的操作系统。常用命令为qemu-system-x86_64、qemu-system-aarch64、qemu-system-riscv64等。
用户态模式(User Mode):只模拟 CPU 指令集,不模拟完整硬件,可以直接运行单个可执行文件。例如在 x86 主机上运行一个 ARM 架构的静态编译程序,常用命令为qemu-aarch64、qemu-riscv64等。这种模式适合做交叉编译测试和运行单文件程序,速度比完整系统模拟快很多。
本文重点演示系统模式,因为它的使用范围更广,也更贴近“跑一个操作系统”的场景。
3.2 前端模拟与后端加速
QEMU 的运行性能主要取决于“是否使用硬件加速”。你可能会看到这些加速器名称:
- TCG:QEMU 自带的纯软件动态翻译引擎,不需要宿主机 CPU 支持虚拟化。优点是兼容性最好,缺点是性能差。
- KVM:Linux 内核提供的虚拟化模块,需要 CPU 支持 VT-x/AMD-V。QEMU 配合 KVM 后性能接近原生。
- WHPX:Windows Hypervisor Platform,Windows 10/11 上可用的硬件加速接口。
- HVF:macOS 上的 Hypervisor.framework。
启动 QEMU 时,可以通过-accel参数指定加速器,也可以使用传统写法-enable-kvm。例如:
qemu-system-x86_64 -enable-kvm -m 2048 ...如果没有指定,QEMU 默认使用 TCG 软件模拟。在 x86 宿主机上跑 x86 虚拟机,如果不开 KVM,Windows 或大型 Linux 系统会非常卡。在 ARM 宿主上跑 ARM 虚拟机,同理也要开启 HVF 或 KVM。
3.3 磁盘镜像格式
QEMU 使用磁盘镜像文件来保存虚拟机的硬盘数据。最常用的两种格式:
- raw:原始磁盘镜像,直接对应物理磁盘的字节流,简单高效,但占空间。
- qcow2:QEMU 推荐使用的镜像格式,支持稀疏分配、压缩、快照和加密。创建时指定 20G,实际使用多少才占多少空间。
常用命令如下:
# 创建 20G 的 qcow2 磁盘 qemu-img create -f qcow2 ubuntu.qcow2 20G # 查看镜像信息 qemu-img info ubuntu.qcow2 # 创建虚拟机快照 qemu-img snapshot -c fresh-install ubuntu.qcow2 # 查看快照列表 qemu-img snapshot -l ubuntu.qcow2 # 还原快照 qemu-img snapshot -a fresh-install ubuntu.qcow2推荐的实践是:磁盘镜像文件命名为虚拟机名.qcow2,创建后先做一次“干净系统”快照,方便后续随时还原。
4. 实战:用 QEMU 全系统模拟运行一个 Linux 虚拟机
下面通过一个完整案例,演示如何通过 QEMU 安装并运行一个 x86_64 架构的 Linux 虚拟机。环境以 Ubuntu/Debian 宿主机为例,安装镜像你可以选择 Ubuntu Server、Debian、CentOS Stream 或者其他 Linux 发行版。
4.1 创建磁盘镜像
先创建一个 20G 的 qcow2 磁盘镜像:
qemu-img create -f qcow2 linux-test.qcow2 20G这里使用 qcow2 格式,好处是虚拟磁盘占用的宿主机空间会随着虚拟机内部使用量增长,而不是一次性占用 20G。如果你的发行版镜像比较大,磁盘给到 30G 或 40G 也可以。
4.2 获取系统安装 ISO
从官网下载一个 Linux 发行版的 ISO 安装镜像,例如 Ubuntu Server 或 Debian netinst 镜像。假设下载后的文件名为linux-installer.iso,放在当前目录下。
4.3 启动安装程序
如果宿主机支持 KVM,安装时建议直接开启硬件加速,否则后面安装过程会比较慢。
qemu-system-x86_64 \ -m 2048 \ -smp 2 \ -boot d \ -cdrom linux-installer.iso \ -hda linux-test.qcow2 \ -enable-kvm参数说明:
-m 2048:分配 2GB 内存。-smp 2:分配 2 个 CPU 核心。-boot d:优先从光驱启动。-cdrom linux-installer.iso:把 ISO 挂载为光驱。-hda linux-test.qcow2:使用刚才创建的磁盘镜像作为系统盘。-enable-kvm:开启 KVM 硬件加速。
执行后,QEMU 会弹出一个图形窗口,显示安装程序界面。你按照发行版默认步骤安装即可。需要注意,安装过程中不要选择“整块磁盘加密”等特殊选项,否则首次启动可能增加额外配置步骤。
4.4 从磁盘启动虚拟机
系统安装完成后,再次启动虚拟机时不再需要 ISO 和光驱启动,直接使用磁盘即可:
qemu-system-x86_64 \ -m 2048 \ -smp 2 \ -hda linux-test.qcow2 \ -enable-kvm启动后,画面会进入虚拟机的 GRUB 菜单,然后加载 Linux 系统。登录后,你就在 QEMU 创建的虚拟机里拥有了一个完整的 Linux 环境。
4.5 使用串口控制台
很多服务器和嵌入式开发场景下,没有图形界面,只能通过串口登录系统。QEMU 也能模拟串口设备,并将串口输出重定向到当前终端。
qemu-system-x86_64 \ -m 2048 \ -smp 2 \ -hda linux-test.qcow2 \ -nographic \ -enable-kvm-nographic表示不使用图形窗口,QEMU 会把虚拟机的串口输出转发到当前终端。需要注意的是,Linux 系统默认的 GRUB 和控制台可能并不输出到串口,需要在系统内配置 GRUB 的 console 参数,或者安装时选择串口安装模式。对于 QEMU 纯命令行操作,这一步经常被忽略,建议先在一台测试虚拟机里验证串口配置,再批量使用。
5. 使用 KVM 加速:让虚拟机性能直接起飞
TCG 软件模拟模式下,虚拟机的 CPU 指令全部由 QEMU 翻译执行,安装系统和运行大型软件都会很慢。在生产环境或日常开发中,强烈建议使用 KVM 加速。
5.1 检查 KVM 支持
在 Linux 宿主机上执行以下命令:
ls /dev/kvm如果能输出/dev/kvm,说明 KVM 模块已经加载。如果没有输出,先检查 CPU 虚拟化是否在 BIOS 中开启。
查看 CPU 是否支持硬件虚拟化:
egrep -c '(vmx|svm)' /proc/cpuinfo输出数字大于 0,说明 CPU 支持 VT-x(Intel)或 AMD-V(AMD)。如果数字为 0,说明 BIOS 中没有开启虚拟化功能,需要重启进入 BIOS 设置界面开启 Intel VT-x 或 AMD SVM。
需要注意的是,如果你是在虚拟机里再用 QEMU,比如在 VMware 虚拟机或 WSL2 里使用 QEMU,还需要开启“嵌套虚拟化”,否则/dev/kvm可能不存在,或者 QEMU 无法获得 KVM 权限。WSL2 中运行 QEMU 时如果报错“无法启动,因为此计算机上未启用虚拟化”,多数情况下就是 Windows 的虚拟机平台功能未开启,或者嵌套虚拟化未打开。
5.2 启用 KVM 加速运行
启动参数中加上-enable-kvm即可:
qemu-system-x86_64 \ -m 4096 \ -smp 4 \ -hda linux-test.qcow2 \ -enable-kvm也可以使用更明确的写法:
qemu-system-x86_64 \ -accel kvm \ -m 4096 \ -smp 4 \ -hda linux-test.qcow2开启 KVM 后,虚拟机内部执行的是原生指令,CPU 性能大幅提升。不过要注意,KVM 加速只适用于与宿主机架构相同或兼容的虚拟机。比如在 x86 宿主机上跑 x86 虚拟机,可以开 KVM;但在 x86 宿主机上跑 ARM 虚拟机,KVM 不适用,只能用 TCG 软件模拟。
5.3 Windows 下开启 WHPX 加速
Windows 10/11 上,QEMU 可以通过 WHPX(Windows Hypervisor Platform)加速。使用前需要开启对应的 Windows 功能:
- 打开“控制面板 -> 程序 -> 启用或关闭 Windows 功能”。
- 勾选“虚拟机平台”和“Windows 虚拟机监控程序平台”。
- 重启系统。
然后在 QEMU 启动命令中使用-accel whpx:
qemu-system-x86_64.exe -accel whpx -m 4096 -smp 4 -hda linux-test.qcow2如果提示 WHPX 不可用,可能是 Windows 版本不支持,或者 Hyper-V 功能冲突。在 Windows 上同时使用 VMware/VirtualBox 和 QEMU 时,需要注意 Hyper-V 与第三方虚拟化软件之间的兼容性,这也是不少开发者遇到的经典问题。
6. 跨架构模拟:用 x86 跑 ARM 与 RISC-V
QEMU 最强大的能力之一,就是跨架构模拟。在 x86 宿主机上,可以直接运行 ARM64 或 RISC-V 的 Linux 系统镜像。这对于嵌入式开发、国产芯片适配和学习操作系统内核非常有用。
6.1 为什么需要跨架构模拟
很多场景下,我们手头没有 ARM 开发板,或者 RISC-V 开发板价格高昂、资源紧张。QEMU 可以通过软件模拟出 ARM 或 RISC-V 的处理器和外围设备,直接运行对应的 Linux 发行版或内核镜像。这样既能验证代码是否能编译通过,也能测试内核启动流程、驱动初始化和文件系统挂载。
需要注意的是,跨架构模拟只能使用 TCG 软件模拟,性能远低于原生硬件。因此它适合做功能验证、内核学习和 CI 测试,不适合跑重型负载。
6.2 运行 ARM64 Linux 示例
以 ARM64 的 Ubuntu Cloud 镜像为例,需要准备 UEFI 固件和 ARM64 磁盘镜像。QEMU 启动命令如下:
qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -smp 4 \ -m 2048 \ -bios QEMU_EFI.fd \ -drive file=ubuntu-arm64.qcow2,format=qcow2,if=virtio \ -netdev user,id=net0,hostfwd=tcp::2222-:22 \ -device virtio-net-pci,netdev=net0 \ -nographic参数说明:
-M virt:选择 QEMU 内置的通用虚拟平台,这是 ARM64 模拟最常用的机器类型。-cpu cortex-a53:指定模拟的 CPU 型号。-bios QEMU_EFI.fd:指定 UEFI 固件文件。这个文件可以从发行版软件包或上游固件中获取,不同发行版名称可能不同。-drive file=...,if=virtio:使用 virtio 接口挂载磁盘,性能更好。-nographic:将串口作为主控制台输出。
如果你拿到的镜像不是完整磁盘镜像,而是内核和根文件系统分离的版本,也可以用-kernel和-initrd方式启动:
qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -m 2048 \ -kernel vmlinuz \ -initrd initrd.img \ -append "console=ttyAMA0 root=/dev/vda1 rw" \ -drive file=rootfs.img,format=raw,if=virtio \ -nographicARM64 的串口设备通常是ttyAMA0,如果你的内核使用其他串口名称,需要从内核日志中确认。这块比较容易被忽略,经常有人镜像启动后看不到任何输出,最后发现是 console 参数写错了。
6.3 运行 RISC-V Linux 示例
RISC-V 是近年来非常火的开源指令集架构,QEMU 对它也有完善支持。以 RISC-V 64 位 Linux 为例:
qemu-system-riscv64 \ -M virt \ -m 1024 \ -smp 2 \ -bios fw_payload.elf \ -kernel Image \ -drive file=rootfs.img,format=raw,if=virtio \ -append "console=ttyS0 root=/dev/vda1 rw" \ -nographicRISC-V 架构下,-M virt是常用的虚拟平台,fw_payload.elf是 OpenSBI 固件,负责启动 RISC-V 内核。串口参数通常是ttyS0。如果你使用的是不同发行版提供的固件和内核,启动参数需要相应调整。
6.4 注意事项:CPU、内存与启动参数
跨架构模拟时,有几个容易出问题的点:
- CPU 型号:
-cpu参数决定模拟的 CPU 特性,如果内核或发行版要求较高,建议选择最新支持型号。 - 内存大小:ARM64 和 RISC-V 的发行版对内存要求不同,一般建议至少 1GB,桌面版建议 2GB 以上。
- 串口参数:不同架构的 console 名称不一样,需要确认。
- 显示方式:
-nographic适合服务器版和无头环境;如果镜像自带图形界面,需要去掉-nographic,使用默认的图形窗口。
7. QEMU 网络配置:从用户模式到桥接
网络是虚拟机使用中非常关键的部分。QEMU 默认的网络模式是用户模式(user mode),适合大多数单机测试场景。如果想要让虚拟机被局域网内其他机器访问,则需要配置桥接网络。
7.1 用户模式网络
QEMU 默认会创建一个用户模式网络栈,虚拟机的网卡会自动获得一个虚拟私有 IP,通常是10.0.2.15。这个网络栈并不需要宿主机上有真实的网卡配置,QEMU 内部会负责 NAT 转发。虚拟机访问外网时,流量通过 QEMU 进程转发到宿主机网络。
启动命令中显式配置用户模式网络:
qemu-system-x86_64 \ -m 2048 \ -hda linux-test.qcow2 \ -netdev user,id=net0 \ -device e1000,netdev=net0 \ -enable-kvm在这个模式里:
- 虚拟机 IP 通常为
10.0.2.15。 - 虚拟网关为
10.0.2.2。 - DNS 服务器为
10.0.2.3。
用户模式网络的优点是配置简单,不需要管理员权限,缺点是虚拟机无法被外部主机直接访问,只能主动访问外部。
7.2 端口转发
为了让外部主机可以访问虚拟机内的服务,比如 SSH,可以使用hostfwd参数做端口转发:
qemu-system-x86_64 \ -m 2048 \ -hda linux-test.qcow2 \ -netdev user,id=net0,hostfwd=tcp::2222-:22 \ -device e1000,netdev=net0 \ -enable-kvm启动后,在宿主机上执行:
ssh -p 2222 user@localhost这样就能通过宿主机的 2222 端口,访问虚拟机内的 22 端口。端口映射的格式为hostfwd=tcp:[宿主机IP:]宿主机端口-虚拟机IP:虚拟机端口。如果不指定宿主机 IP,默认绑定到所有网卡。需要注意,暴露端口到公网时一定要小心,避免被恶意扫描。
7.3 桥接网络
如果希望虚拟机拥有一个和宿主机在同一网段的独立 IP,外部主机可以直接访问虚拟机,就需要使用桥接网络。这种模式更适合服务器虚拟化场景。
桥接网络需要预先在宿主机上创建 bridge 和 tap 设备。以 Linux 为例,简要流程如下:
- 创建 bridge
br0,把宿主机物理网卡加入br0。 - 创建 tap 设备
tap0,也加入br0。 - 启动 QEMU 时指定使用
tap0。
QEMU 启动参数:
qemu-system-x86_64 \ -m 2048 \ -hda linux-test.qcow2 \ -netdev tap,id=net0,ifname=tap0,script=no,downscript=no \ -device virtio-net-pci,netdev=net0 \ -enable-kvm桥接网络需要 root 权限,并且在系统重启后需要重新配置网桥和 tap 设备。对于生产环境,更推荐用 libvirt 管理 QEMU 虚拟机,它提供了更方便的网络管理和生命周期管理能力。
8. 常见问题与排查思路
QEMU 使用过程中,新手经常遇到一些问题。下面整理几个高频场景和对应排查思路:
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
启动报错/dev/kvm not found | CPU 虚拟化未开启,或处于嵌套虚拟化环境 | 检查 BIOS 中的 VT-x/AMD-V 设置;在虚拟机软件中启用嵌套虚拟化;暂时用 TCG 模拟 |
| Windows 下启动报错 WHPX 不可用 | Windows 虚拟机监控程序平台未开启 | 控制面板 -> 启用或关闭 Windows 功能 -> 勾选“虚拟机平台”和“Windows 虚拟机监控程序平台”后重启 |
| ARM64 镜像启动后无输出 | UEFI 固件缺失,或 console 参数错误 | 确认-bios参数是否正确;检查内核串口是ttyAMA0还是ttyS0 |
| 虚拟机性能很慢 | 没有开启硬件加速 | 确认宿主机支持并开启 KVM/WHPX/HVF;查看启动日志确认加速器生效 |
| GUI 模式黑屏或无法打开 | 宿主机没有图形环境,或者 DISPLAY 变量未设置 | 无图形环境时改用-nographic;或在宿主机安装桌面环境 |
| WSL2 中使用 QEMU 提示虚拟化未启用 | WSL2 嵌套虚拟化未开启 | 在 Windows 中开启虚拟机平台功能,并在 WSL2 配置中启用嵌套虚拟化 |
| 磁盘镜像越来越大 | 内部删除文件后 qcow2 不会自动收缩 | 在虚拟机内清理文件后,用qemu-img convert转换收缩镜像 |
| 虚拟机无法访问外网 | 用户模式网络 DNS 或网关配置异常 | 确认虚拟机内 IP 是 10.0.2.15,网关 10.0.2.2,DNS 10.0.2.3;或改用桥接网络 |
排查问题时,建议先查看 QEMU 的启动输出。很多错误信息会在启动时直接打印在终端里,比如设备初始化失败、固件加载失败等。配合-d参数或-trace可以输出更详细的调试信息,但日常使用中先看错误行即可定位大部分问题。
9. 最佳实践与工程建议
从“能跑起来”到“稳定好用”,还有一段路要走。这里分享一些 QEMU 的最佳实践,供你在实际项目中参考。
9.1 优先使用 qcow2 格式并开启快照
qcow2 镜像支持写时复制、压缩和快照,非常适合开发调试。在安装完系统、配置好基础环境后,建议立刻做一个快照:
qemu-img snapshot -c base-system linux-test.qcow2之后如果系统被玩坏,可以直接还原:
qemu-img snapshot -a base-system linux-test.qcow2这比重新安装系统快得多,也能节省大量时间。
9.2 使用 virtio 设备提升性能
在同架构 KVM 加速场景下,内存、磁盘和网卡尽量使用 virtio 半虚拟化设备,性能远好于默认的 IDE 设备和 e1000 网卡:
qemu-system-x86_64 \ -m 2048 \ -smp 2 \ -drive file=linux-test.qcow2,format=qcow2,if=virtio \ -netdev user,id=net0,hostfwd=tcp::2222-:22 \ -device virtio-net-pci,netdev=net0 \ -enable-kvm不过要注意,如果镜像内没有安装 virtio 驱动,启动时可能找不到磁盘。Linux 发行版通常内置了 virtio 驱动,Windows 则可能需要单独加载驱动。
9.3 显式配置串口和日志输出
无论是调试内核还是排查启动失败,串口日志都很有价值。建议在启动参数中增加串口输出,并把日志重定向到文件:
qemu-system-x86_64 \ -nographic \ -serial file:serial.log \ ...这样即使 QEMU 崩溃,也能从serial.log中查看虚拟机启动阶段发生了什么。
9.4 统一管理启动脚本
QEMU 参数较多,不建议每次手敲。建议把启动命令写成脚本,放到项目目录中,例如start-vm.sh:
#!/bin/bash qemu-system-x86_64 \ -m 4096 \ -smp 4 \ -drive file=linux-test.qcow2,format=qcow2,if=virtio \ -netdev user,id=net0,hostfwd=tcp::2222-:22 \ -device virtio-net-pci,netdev=net0 \ -enable-kvm \ "$@"以后启动虚拟机只需要执行./start-vm.sh,额外参数也可以追加传递。
9.5 注意生产环境安全
在服务器上使用 QEMU + KVM 时,建议:
- 不随意把端口转发暴露到公网。
- 使用独立网桥和虚拟网络隔离不同业务。
- 定期备份重要磁盘镜像和快照。
- 对虚拟机镜像文件设置合理的文件权限,避免其他用户直接读取。
- 生产环境优先使用 libvirt/virsh 管理虚拟机,而不是零散的手动脚本。
9.6 区分开发环境与生产环境
QEMU 作为一个功能强大的模拟器/虚拟化工具,开发环境和生产环境的使用策略完全不同。开发环境可以灵活使用 TCG 跨架构模拟,做功能验证;生产环境则必须使用 KVM 硬件加速,并通过 libvirt 做生命周期管理、资源限额和故障恢复。两者不要混为一谈。
10. 总结与动手实践建议
如果你刚开始接触 QEMU,建议按下面顺序做几个小实验,逐步熟悉它的运行方式:
- 在 x86 宿主机上安装 QEMU,用
qemu-img创建一个 qcow2 磁盘,安装一个最小化的 Linux 系统。 - 开启 KVM 加速,对比一下同样命令在 TCG 和 KVM 模式下的安装速度差异。
- 使用
-netdev user和端口转发,从宿主机 SSH 登录虚拟机。 - 下载一个 ARM64 或 RISC-V 的 Linux 内核和 rootfs,用
qemu-system-aarch64或qemu-system-riscv64启动,体验跨架构模拟。 - 给磁盘打快照,破坏系统后尝试还原,理解快照的用法。
做完这几个实验,QEMU 的基本使用就会比较熟练了。之后再深入学习 libvirt、云镜像定制、内核调试等内容,就会顺畅很多。
QEMU 是一个值得长期投入学习的工具,尤其是做 Linux 开发、嵌入式开发和虚拟化方向的同学。希望这篇文章能帮你理清思路,快速上手。如果你在实践过程中遇到其他问题,欢迎留言交流,一起讨论排错经验。