news 2026/9/7 9:42:35

QEMU 完整使用教程:虚拟化、KVM 加速与跨架构模拟实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QEMU 完整使用教程:虚拟化、KVM 加速与跨架构模拟实战

做嵌入式开发或者后端运维的同学,大概率遇到过这种场景:手里只有一台 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 和它们相比,有几个明显区别:

对比项QEMUVMware / 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-img

Fedora 用户也可以直接使用 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 qemu

macOS 上 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_64qemu-system-aarch64qemu-system-riscv64等。

用户态模式(User Mode):只模拟 CPU 指令集,不模拟完整硬件,可以直接运行单个可执行文件。例如在 x86 主机上运行一个 ARM 架构的静态编译程序,常用命令为qemu-aarch64qemu-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 功能:

  1. 打开“控制面板 -> 程序 -> 启用或关闭 Windows 功能”。
  2. 勾选“虚拟机平台”和“Windows 虚拟机监控程序平台”。
  3. 重启系统。

然后在 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 \ -nographic

ARM64 的串口设备通常是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" \ -nographic

RISC-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 为例,简要流程如下:

  1. 创建 bridgebr0,把宿主机物理网卡加入br0
  2. 创建 tap 设备tap0,也加入br0
  3. 启动 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 foundCPU 虚拟化未开启,或处于嵌套虚拟化环境检查 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,建议按下面顺序做几个小实验,逐步熟悉它的运行方式:

  1. 在 x86 宿主机上安装 QEMU,用qemu-img创建一个 qcow2 磁盘,安装一个最小化的 Linux 系统。
  2. 开启 KVM 加速,对比一下同样命令在 TCG 和 KVM 模式下的安装速度差异。
  3. 使用-netdev user和端口转发,从宿主机 SSH 登录虚拟机。
  4. 下载一个 ARM64 或 RISC-V 的 Linux 内核和 rootfs,用qemu-system-aarch64qemu-system-riscv64启动,体验跨架构模拟。
  5. 给磁盘打快照,破坏系统后尝试还原,理解快照的用法。

做完这几个实验,QEMU 的基本使用就会比较熟练了。之后再深入学习 libvirt、云镜像定制、内核调试等内容,就会顺畅很多。

QEMU 是一个值得长期投入学习的工具,尤其是做 Linux 开发、嵌入式开发和虚拟化方向的同学。希望这篇文章能帮你理清思路,快速上手。如果你在实践过程中遇到其他问题,欢迎留言交流,一起讨论排错经验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 9:42:05

LLC 谐振电源深度解析(三):Lr、Lm、Cr 到底怎么分工?

🔥 LLC 谐振电源深度解析(三):Lr、Lm、Cr 到底怎么分工? ——为什么普通电源怕漏感,LLC 却能把漏感“变废为宝”? 前两篇我们已经把 LLC 最重要的两件事串起来了: 第一篇:为什么需要谐振? 第二篇:ZVS 到底是怎么实现的? 现在开始碰 LLC 真正的核心参数: �…

作者头像 李华
网站建设 2026/9/7 9:42:13

AI自动化测试零基础入门:Python+Playwright+pytest实战

AI自动化测试是最近几年测试领域讨论最多的话题之一,但“热门”和“容易入门”并不是同一回事。很多零基础同学看到招聘要求里写“熟悉自动化测试、了解AI工具”,立刻去刷了一堆框架教学,结果仍然不会写用例,更不知道怎么处理元素…

作者头像 李华
网站建设 2026/9/7 9:40:32

给 AI Agent 装上海马体:记忆系统的工程化设计全解

你有没有想过一个问题:为什么每次打开 ChatGPT,它都像第一次见到你一样?为什么你跟一个 AI 助手说了一百遍“代码里别用中文变量名”,它下次照样给你写出 用户列表 []? 答案很简单——大语言模型本身是无状态的。每一…

作者头像 李华
网站建设 2026/9/6 6:06:49

llama.cpp 本地部署大模型:编译、量化与推理实战指南

最近在给一个内部项目做私有化部署时,需要把大模型跑在离线环境里。试过几个方案,最终在 llama.cpp 上把流程彻底跑通了:模型下载、格式转换、量化、CPU/GPU 推理、API 服务全部打通。整个过程踩了不少坑,包括编译选项、显存控制、…

作者头像 李华
网站建设 2026/9/6 1:02:18

小波相干性分析:MATLAB实现与参数调优实战

简介:本资源是一套基于Matlab实现的小波相干性(Wavelet Coherence)分析完整代码包,面向本科及硕士阶段的信号处理、地球物理、气候时序分析等方向的学习者与科研人员,用于量化两组非平稳时间序列在时频域内的协同变化特…

作者头像 李华