认识 QEMU:从零看懂虚拟机、镜像与快照(入门第 1 课)
本篇是 SoC 与 QEMU 系列的第 01 篇,写给完全没接触过虚拟机的读者。你不需要先装任何软件,也不需要懂 RISC-V 或 Linux 内核;读完之后,再去看第 02 篇的安装与启动实验,每个名词都会是已经认识的老朋友。已经会用 VMware 或 UTM 的读者,可以直接跳到第四节核对名词表,再从第五节的学习路线里挑自己缺的环节。
本文要回答的问题
- 手头只有一台 Mac,却想运行 RISC-V 架构的程序,没有对应硬件怎么办?
- 「虚拟机」到底虚拟了什么,它和装了双系统的电脑有什么区别?
- QEMU 是什么,它和 VMware、UTM 这些名字是什么关系?
- 文档里反复出现的宿主机、客户机、固件、镜像、快照,分别指什么?
- 零基础入门 QEMU,应该按什么顺序学,每一步解决什么问题?
一、从一个具体的困惑说起
假设你在学 RISC-V 处理器。教材里的程序要跑在 RISC-V 指令集的 CPU 上,而你的 Mac 是 x86 或 ARM 架构,机器码根本对不上。最直接的办法是买一块 RISC-V 开发板,但开发板贵、到货慢,焊错一根线还可能损坏。
换个思路:能不能用软件「假装」出一台 RISC-V 电脑?这个软件在你的 Mac 里划出一个进程,进程内部伪造出 CPU、内存、串口、硬盘控制器这些硬件,再把给 RISC-V 编译的机器码一条条翻译成本机 CPU 能执行的指令。外面看它只是一个普通程序,里面的软件却以为自己跑在真实硬件上。这类软件统称机器模拟器,QEMU 就是其中使用最广的开源一款。
理解这一层,整个系列就没有神秘的东西了:后面所有实验,本质都是在指挥这个「软件假装的电脑」做不同的事——给它插一块硬盘、接一根网线、挂一个调试器。
二、虚拟机是什么:一台被文件描述的电脑
「虚拟机」(Virtual Machine)指的是上面那台被软件模拟出来的完整电脑。它有自己的 CPU 核数、内存容量、磁盘和网卡,但这些东西没有一个是物理实体,全部由宿主机上的一个进程提供。
两个角色要先分清:
- 宿主机(host):你手上真实的电脑和它的操作系统,比如这台运行 macOS 的 Mac。
- 客户机(guest):运行在模拟器里的那台假电脑,以及装在假电脑里的操作系统。
它和「装双系统」有本质区别。双系统是在同一台物理机上装两个操作系统,同一时刻只能进一个,切换要重启;虚拟机里的客户机只是宿主机的一个普通进程,可以同时开几台、随时暂停、杀掉也不影响宿主机。代价是指令要经过翻译,纯模拟模式下性能低于真机——这也是后面讲 KVM 加速时要解决的问题。
QEMU 有两种工作模式,这里先建立印象,细节留给后续文章:全系统模式模拟一整台电脑,能跑完整操作系统;用户态模式只模拟单个 CPU,直接跑一个别的架构的可执行文件,不需要装系统。
三、QEMU 是什么,和 VMware、UTM 什么关系
QEMU 是一个免费开源的机器模拟器,最早由法国程序员 Fabrice Bellard 发起,许可证是 GPL。它有两个常被提起的特点:一是支持的处理器架构极多,x86、ARM、RISC-V、MIPS 等几十种都能模拟;二是跨平台,macOS、Linux、Windows 上都能运行。
你可能听过的另外两个名字,和它不是并列竞争关系:
- VMware / VirtualBox:同样做虚拟机,但主要面向「x86 电脑里再跑一个 x86 系统」,跨架构模拟能力弱。
- UTM:macOS 和 iOS 上流行的图形化虚拟机 App,它的底层模拟引擎就是 QEMU——你在 UTM 界面里点按钮,它替你拼好 QEMU 命令行。学会 QEMU 命令行之后再用 UTM,会清楚每个界面选项实际在改什么。
本系列直接讲 QEMU 命令行,因为报错信息、脚本化实验和自动化测试都发生在这一层;图形界面只是它的包装。
四、六个必知名词:先混个脸熟
下面六个词会贯穿整个系列,先用生活类比建立直觉,后面每篇都会在真实实验里反复见到它们。
| 名词 | 一句话解释 | 生活类比 |
|---|---|---|
| 宿主机 host | 运行模拟器的真实电脑 | 楼房本身 |
| 客户机 guest | 模拟器里的假电脑及其系统 | 楼里的一间出租屋 |
| 机器模型 machine | 假电脑的主板型号,决定有哪些 CPU、总线和外设 | 租房时选的户型 |
| 固件 firmware | 开机后操作系统之前运行的第一段程序,负责把硬件带起来 | 物业交房时预装的水电总控 |
| 磁盘镜像 image | 宿主机上的一个文件,客户机把它当整块硬盘 | 装着整个房间家具的集装箱 |
| 快照 snapshot | 镜像在某一时刻的存档,出问题可以退回 | 游戏存档 |
其中磁盘镜像最容易让新手卡住,单独强调一句:客户机眼里的「硬盘」,在宿主机上只是一个普通文件。这个文件可以复制、压缩、通过网络发给别人,对方用 QEMU 打开就得到一台一模一样的电脑。镜像有不同的文件格式,raw 是裸字节映像,qcow2 是 QEMU 自带的智能格式,支持稀疏占用、快照和压缩——第 03、04、05 篇会把它们逐个拆开实验。
五、一台假电脑是怎么搭起来的
下图把 QEMU 全系统模式的四个层次画在一起,读图时自下而上看:真实硬件在最底层,QEMU 进程夹在中间,客户软件在最上层,它永远只能接触 QEMU 伪造出来的虚拟设备。
图中灰色是真实资源,蓝色是 QEMU 的模拟核心,紫色是开机固件,绿色是最终跑起来的客户软件。关键认知只有一条:客户机发出的每一次硬件访问,都被蓝色这层接住、翻译,再变成宿主机上的普通计算或文件读写;客户机从头到尾不知道自己是假的。所谓「跑通一台虚拟机」,就是让紫色固件顺利完成初始化、把控制权交棒给绿色客户系统的过程。
六、入门学习路线:按序号走,不跳级
本系列的入门段按下面的序号编排,每篇只引入必要的新概念,实验全部可以在一台普通电脑上复现。
这张卡片就是入门段的地图:01 站解决「是什么」,02 站解决「能不能跑」,03 到 05 站解决「硬盘怎么管」。再往后的 monitor 控制台、网络、gdbstub 调试都建立在这条主线之上,建议按序号学习,不要在没见过镜像的情况下去看快照文章,否则容易把内部快照和外部增量链两套机制混在一起。
这一篇在知识体系里的位置
本篇是整条 SoC 与 QEMU 路线的概念入口,不依赖任何实操。下一篇 QEMU 安装与第一个 RISC-V 虚拟平台 把本文的「固件、机器模型」变成屏幕上真实滚动的开机横幅;随后三篇构成镜像管理闭环:qemu-img 用法:创建镜像、两个尺寸与格式互转 讲磁盘镜像的创建与读取,qcow2 快照、扩容缩容与压缩实测 讲镜像的变更维护,qcow2 backing file:增量链与秒级克隆 讲多台虚拟机怎么共享一块基础硬盘。想从原理侧理解 QEMU 为什么「功能对但没有周期精度」,可以对照阅读 QEMU TCG 功能级建模。
总结
虚拟机是用一个进程伪造出的完整电脑,QEMU 是扮演这台假电脑的开源模拟器,跨架构是它的看家本领;宿主机、客户机、机器模型、固件、磁盘镜像、快照六个名词搭起了全套词汇表,其中镜像就是宿主机上的一个文件,qcow2 让这个文件支持稀疏占用、快照与压缩。按 01 概念、02 启动、03 建盘、04 维护、05 克隆的顺序走,零基础也能一步步搭出完整的虚拟平台实验环境。