外观
第 5 课 Windows 来做客
约 3860 字大约 13 分钟
虚拟化WindowsVirtIOvirt-manager
2026-08-17
里程碑
V4|Windows 11、UEFI/OVMF 固件、vTPM 2.0 与 VirtIO 驱动|理论 2 学时 + 实训 2 学时(180 分钟)

项目目标
在前两课中,你已经能够熟练使用 virt-manager 创建命令行模式的 Ubuntu Server 虚拟机。本课你将为“星舟实训云”交付一台带 GUI 图形桌面的 Windows 11 虚拟机 win01。 通过本课的学习与实训,你将掌握:
- 启动固件与安全芯片原理:理解 Legacy BIOS 与 UEFI/OVMF 固件的区别,掌握虚拟 TPM 2.0(vTPM)与宿主
swtpm进程的作用; - VirtIO 驱动体系:理解为什么 Windows 安装器默认看不到 KVM 虚拟磁盘,掌握
viostor存储驱动与NetKVM网卡驱动的加载机制; - 双 ISO 安装实操:学会使用 virt-manager 配置 Q35 芯片组、UEFI 固件、vTPM 2.0 与双 ISO 光驱,在安装阶段成功加载驱动并完成 Windows 交付。
5.1 启动固件与安全芯片:UEFI 与 vTPM 2.0 原理
在给虚拟机安装 Windows 11 时,系统对虚拟硬件提出了比 Linux 更高的安全要求,其中最关键的就是 UEFI 启动固件 与 TPM 2.0 安全芯片。
1. Legacy BIOS vs UEFI 固件
硬件启动固件是计算机开机后运行的第一段程序,负责初始化硬件并引导操作系统。
| 特性维度 | Legacy BIOS(传统固件) | UEFI 固件(本课选择 OVMF) |
|---|---|---|
| 磁盘分区支持 | 仅支持 MBR 分区(最大支持 2TB 磁盘) | 支持 GPT 分区(支持 >2TB 磁盘与无限主分区) |
| 运行模式 | 16 位实模式(寻址空间极小,启动慢) | 32/64 位保护模式(启动快、支持图形化) |
| 配置存储 | 存储在主板 CMOS 中 | 存储在 NVRAM 变量(.fd 文件)中 |
| 安全机制 | 无防篡改校验 | 支持 Secure Boot(安全启动) |
| Windows 11 兼容 | ✖ 不支持 | ✔ 官方强制要求 |
在 KVM/QEMU 虚拟化环境中,用来为虚拟机提供 UEFI 固件的开源实现叫做 OVMF(Open Virtual Machine Firmware)。OVMF 会在宿主机上生成一个 .fd 存储文件,专门保存该虚拟机的 UEFI 配置与安全启动密钥。
2. vTPM 2.0 与 swtpm 机制
TPM(Trusted Platform Module,受信任平台模块)是一颗专用的硬件安全芯片,用于保管加密密钥、防篡改哈希以及支持 BitLocker 磁盘加密。微软将 TPM 2.0 作为 Windows 11 的强制硬件门槛。
在 KVM 中,虚拟机并没有物理 TPM 芯片,它是如何满足这个要求的?
swtpm(软件 TPM 模拟器):当你在宿主机安装了swtpm包后,libvirt 会在宿主机后台为win01拉起一个独立的swtpm守护进程;- CRB 模型:QEMU 模拟 Q35 主板上的 Command Response Buffer(CRB)硬件接口,将
swtpm提供的 TPM 2.0 能力透传给win01; - 独立安全性:每个虚拟机都有自己专属的模拟 TPM 状态文件,互不干扰,也不会直接读取宿主机的真实硬件密钥。
直观理解这三个核心概念
结合生活常识,我们可以直观理解这三者的对应关系:
swtpm守护进程:相当于在宿主机后台默默运行的一个“小助手程序”,专门替win01假装在主板上焊接了一颗真实的物理加密芯片;- CRB 模型 (Command Response Buffer):相当于宿主机与虚拟机之间建立的一条专用的“安全加密命令传真管道”,用来传送密码校验请求;
- .fd NVRAM 变量文件:相当于虚拟机的“固件档案卡”,里面记录着虚拟主板的 UEFI 启动选项和安全启动密钥。
下面的架构动画展示了从宿主 swtpm 进程到 Windows 11 安全引导的初始化链路:
安全固件拓扑
UEFI 固件与 vTPM 2.0 安全芯片启动链路
观察从宿主机 swtpm 进程、Q35 芯片组、OVMF 固件到 Windows 11 安全引导的硬件初始化全过程。
步骤 1 / 5
步骤 1 / 5 · 1. 宿主 swtpm 进程启动
宿主 swtpm 软件模拟器
运行在宿主机的安全芯片模拟进程在虚拟机启动前,libvirt 会自动拉起 `swtpm` 守护进程。它在宿主侧维护属于 win01 独立的 NVRAM 秘钥与 PCR 寄存器状态。
⚙ 底层配置 / 命令片段 (XML / CLI / PowerShell)点击拓扑节点可切换查看
# 宿主内部由 libvirt 调用的 swtpm 进程
swtpm socket --tpmstate dir=/var/lib/libvirt/swtpm/win01/tpm2 ...🔍
关键排错说明:若虚拟机报错 TPM 连接失败,需检查宿主是否安装了 swtpm 和 swtpm-tools 包。
5.2 为什么 Windows 需要 VirtIO 驱动 ISO
如果在 virt-manager 中为 Windows 虚拟机分配了 VirtIO 磁盘,在安装时常常会遇到“看不到任何可安装磁盘”的情况。这是为什么?
1. 全虚拟化模拟 vs VirtIO 半虚拟化
- 全虚拟化模拟(如 IDE / SATA 硬盘、e1000 网卡):QEMU 完全用软件去模仿老旧物理硬件的行为。优点是 Windows 安装包内置了这些老旧设备的通用驱动,能直接识别;缺点是每次磁盘读写都会产生大量 CPU 损耗,性能很低。
- Virtio 半虚拟化(
viostor存储、NetKVM网卡):专门为虚拟化优化的高效驱动。Windows 安装包默认并没有内置 KVM 团队开发的 VirtIO 驱动程序。
+-----------------------------------------------------------------------------------+
| Windows 安装器 (Setup) |
| |
| [内置驱动库] ---> 包含 IDE / SATA 驱动 ==================> 识别传统模拟硬盘 |
| [未内置驱动] ---> 缺少 VirtIO Block 驱动 ================> 无法识别 VirtIO 64GB 磁盘 |
| |
| [解决方法] ---> 挂载 virtio-win.iso ➔ 手动加载 viostor ➔ 64GB 磁盘成功出现! |
+-----------------------------------------------------------------------------------+2. VirtIO-Win 驱动包拆解
为了让 Windows 能使用 VirtIO 设备,红帽与 KVM 开源社区提供了官方的 VirtIO-Win 驱动 ISO 镜像(virtio-win.iso)。这个 ISO 中包含了以下核心驱动:
| 驱动目录名 | 驱动名称 | 对应虚拟硬件 | 作用阶段 |
|---|---|---|---|
viostor | VirtIO Block Driver | VirtIO 块存储磁盘 | 系统安装阶段(必须加载) |
vioscsi | VirtIO SCSI Driver | VirtIO SCSI 控制器磁盘 | 系统安装阶段(若磁盘选了 SCSI) |
NetKVM | VirtIO Network Driver | VirtIO 虚拟网卡 | 系统安装完成后(开启网络) |
qxldod | QXL/Virtio Display | Virtio 虚拟显卡 | 系统安装完成后(提升图形性能) |
guest-agent | QEMU Guest Agent | 串口管理代理 | 系统安装完成后(支持 guest-ping) |
3. 双 ISO 挂载原理
在安装 win01 时,我们需要在 virt-manager 中同时挂载两个虚拟光驱(CD-ROM):
- 第一光驱:挂载
Windows 11 安装 ISO(用于引导安装程序); - 第二光驱:挂载
virtio-win.iso(用于在安装过程中读取viostor存储驱动)。
下面的动态演示展示了加载 viostor 驱动使磁盘出现的完整过程:
驱动加载交互
Windows 安装器 VirtIO 存储与网卡驱动加载过程
观察为什么 Windows 安装器初始看不到磁盘,以及如何通过加载 virtio-win.iso 驱动使 64GB 磁盘成功出现。
步骤 1 / 5
Windows Setup - [win01 虚拟控制台]
你想将 Windows 安装在哪里? (Where do you want to install Windows?)
⚠️
未找到任何驱动程序。请单击“加载驱动程序”提供有效的存储驱动程序。
(No drives were found. Click Load Driver to provide a mass storage driver.)💿 Windows 11 安装 ISO
等待加载驱动 ISO
💿 virtio-win.iso 驱动盘
步骤 1 / 51. Windows 安装器初始引导
Windows 安装器镜像默认只包含通用 IDE/SATA 驱动,不自带 KVM 的 VirtIO 高性能存储驱动。因此磁盘列表显示为空。
提示:此时并非虚拟机没分配磁盘,而是 Windows 安装程序缺少识别 VirtIO 设备的 viostor 驱动。5.3 创建 win01 虚拟机
1. 虚拟机配置参数表
在打开 virt-manager 之前,先明确本次创建的虚拟机参数:
| 参数名称 | 配置值 | 配置说明与选择理由 |
|---|---|---|
| 虚拟机名称 | win01 | 保持课程统一命名规范 |
| vCPU 核心数 | 2 vCPU | 满足 Windows 11 最低双核要求 |
| 内存容量 | 4096 MiB (4GB) | 满足 Windows 11 最低 4GB 内存要求 |
| 虚拟磁盘 | QCOW2,容量 64 GB,总线 VirtIO | 满足 Windows 11 最低 64GB 存储要求,QCOW2 按需增长 |
| 芯片组 (Chipset) | Q35 | 现代 PCIe 主板架构,支持 UEFI 与 TPM 2.0 |
| 启动固件 | UEFI / OVMF | 必须选择 UEFI 固件(支持 Secure Boot) |
| 安全芯片 | TPM 2.0(Model: CRB,Backend: Emulated) | 开启模拟 TPM 2.0 安全芯片 |
| 虚拟网卡 | default NAT 网络(设备模型 Virtio) | 共享宿主网络连接外网 |
| 存储驱动介质 | 挂载第二个 CD-ROM(文件为 virtio-win.iso) | 用于提供 viostor 与 NetKVM 驱动 |
2. 准备工作:安装软件包与获取 VirtIO ISO
在宿主机终端中执行以下命令,确保宿主系统已安装 UEFI 固件、TPM 模拟器及 VirtIO 驱动镜像:
# 1. 安装 OVMF 固件、swtpm 模拟器与 virtio-win 驱动包
sudo apt update
sudo apt install -y ovmf swtpm swtpm-tools virtio-win镜像文件安装路径与备用下载
- 默认安装路径:安装
virtio-win软件包后,驱动 ISO 会保存在宿主机的/usr/share/virtio-win/virtio-win.iso。 - 备用下载方式:如果你的 Linux 发行版仓库中没有
virtio-win软件包,可在终端直接使用wget下载官方最新构建镜像到本地:# 备用命令:直接下载官方 VirtIO ISO 镜像到当前目录 wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
3. 获取 Windows 11 安装 ISO
请确认宿主机上已准备好 Windows 11 的官方 ISO 镜像文件(如从 微软官网 Windows 11 下载页 获取)。
4. 在 virt-manager 中创建 win01
按照以下步骤完成创建:
- 新建虚拟机:打开
virt-manager,点击“新建虚拟机”,选择“本地安装介质 (ISO)”。 - 选择 Windows ISO:浏览选择准备好的 Windows 11 安装 ISO 镜像。
- 配置 CPU 与内存:内存填
4096MiB,CPU 填2。 - 创建虚拟磁盘:选择自定义存储,容量填
64GB。 - 自定义配置:名称填
win01,勾选 “安装前自定义配置”。 - 配置芯片组与固件:
- 在 Overview 中,将 Machine 选为
Q35; - 将 Firmware 选为
UEFI x86_64(如OVMF_CODE.fd)。
- 在 Overview 中,将 Machine 选为
- 配置磁盘总线:点击“Disk 1”,将 Disk bus 改为 VirtIO。
- 添加 TPM 安全芯片:点击左下角“添加硬件” ➔ 选择
TPM➔ Model 选CRB,Version 选2.0➔ 点击完成。 - 挂载 VirtIO 驱动 ISO:
- 点击“添加硬件” ➔ 选择
Storage➔ Device 选CDROM bus; - 浏览选择宿主机上的
virtio-win.iso文件(选择/usr/share/virtio-win/virtio-win.iso或刚才下载的绝对路径); - 点击完成。
- 点击“添加硬件” ➔ 选择
- 开始安装:点击左上方“开始安装”。
5.4 安装 Windows 并加载 VirtIO 存储驱动
启动虚拟机后,按以下步骤完成 Windows 安装:
- 从光盘引导:看到
Press any key to boot from CD or DVD...时,迅速在窗口内按任意键进入安装程序。 - 进入安装向导:选择语言与输入法,点击“现在安装”。在密钥输入界面选择“我没有产品密钥”,选择对应的系统版本。
- 加载 VirtIO 存储驱动:
- 进入“你想将 Windows 安装在哪里?”页面,此时界面提示 “未找到任何驱动程序”(磁盘列表为空);
- 点击左下角 “加载驱动程序 (Load Driver)” ➔ 点击 “浏览”;
- 在弹出的树状目录中找到挂载的 VirtIO 驱动光盘(通常为
D:或E:盘); - 展开目录路径:
viostor➔w11➔amd64,点击确定; - 列表中出现
Red Hat VirtIO SCSI controller驱动,点击“下一步”。
- 确认 64GB 磁盘出现:驱动加载完成后,界面成功刷出 “驱动器 0 未分配的空间 (64.0 GB)”。点击“下一步”开始安装。
- 完成首次设置:等待文件解压并自动重启,按向导提示完成区域与本地账号配置,进入 Windows 11 桌面。
驱动名称注意事项:为什么选择 viostor 目录后刷出的名称叫 SCSI controller?
很多同学在选中 viostor\w11\amd64 确定后,看到列表中刷出的驱动名字叫 “Red Hat VirtIO SCSI controller”,会怀疑自己是不是选错成了 SCSI 驱动目录。
请放心,这是完全正常的! 这是红帽官方为 VirtIO Block 块存储驱动在 Windows 安装包里注册的标准显示名称。看到它出现说明你选择的目录 100% 正确,直接点击“下一步”即可,千万不要误以为选错而退回重选!
5.5 安装来宾增强驱动与网卡配置
进入 Windows 11 桌面后,你会发现此时网卡驱动尚未安装(无网络连接)。我们需要运行 VirtIO 光盘中的整合安装包。
- 打开 VirtIO 光盘:在 Windows 中打开“此电脑”,找到挂载的
virtio-win光盘驱动器。 - 运行整合安装程序:双击运行光盘根目录下的
virtio-win-guest-tools.exe。 - 完成一键安装:按向导提示勾选所有驱动(包含 NetKVM 网卡驱动、QXL 显卡驱动与 QEMU Guest Agent),点击 Install 完成安装。
- 验证设备与网络:
- 右键“此电脑” ➔ 选择“管理” ➔ 打开“设备管理器”;
- 确认“网络适配器”下显示为
Red Hat VirtIO Ethernet Adapter且无黄感叹号; - 确认系统已成功获取
defaultNAT 网络 IP 并可以正常上网。
5.6 常见问题排错矩阵
在创建和安装 win01 时,若遇到问题请对照下表排查:
| 故障现象 | 可能的原因分析 | 最小排查命令 / 检查方法 | 解决办法 |
|---|---|---|---|
| 提示“这台电脑无法运行 Windows 11” | 未配置 UEFI 固件或未开启 TPM 2.0 | 打开虚拟机硬件详情,检查 Display、Firmware 与 TPM 节点 | 确认 Firmware 选了 UEFI,且添加了 TPM 2.0 (CRB) |
| 安装界面磁盘列表为空 | 磁盘总线设为 VirtIO 但未加载 viostor 驱动 | 检查是否挂载了 virtio-win.iso 并点击“加载驱动程序” | 浏览 VirtIO ISO 的 viostor\w11\amd64 目录加载驱动 |
| 加载驱动时提示找不到兼容驱动 | 选错了驱动目录(如选成了 x86 或其他 OS 目录) | 确认浏览路径是否包含 amd64 架构层级 | 确认选择的是 viostor 目录下的 w11(或对应的 Windows 版本)➔ amd64 子目录 |
| 安装完成后重启又重新进入安装界面 | virt-manager 启动顺序中 CD-ROM 排在第一位 | 在 virt-manager 的 Boot Options 中检查启动顺位 | 关机后在 Boot Options 中将 Virtual Disk 调整为第一启动项,或弹出安装 ISO |
| 进入桌面后没有网络连接 | VirtIO 网卡驱动(NetKVM)未安装 | 打开“设备管理器”检查网络适配器是否有黄色感叹号 | 打开 VirtIO ISO 光盘,运行 virtio-win-guest-tools.exe 完成网卡驱动安装 |
5.7 提交内容
完成本课实训后,请提交以下 4 张包含清晰结果的截图 作为验收证据:
| 截图文件名 | 内容要求 | 核心验收点与命令说明 |
|---|---|---|
01-virt-manager-win01.png | virt-manager 硬件配置详情截图 | 展示 win01 的 2 vCPU/4GB、Q35 芯片组、UEFI 固件与 TPM 2.0 |
02-windows-select-driver.png | Windows 安装器加载驱动截图 | 展示加载 viostor 驱动后成功刷出 64GB 虚拟磁盘的画面 |
03-windows-desktop-tpm.png | Windows 11 桌面与 TPM 检查截图 | 进入桌面后打开 PowerShell 执行 Get-Tpm,显示 TpmPresent: True |
04-win01-host-status.png | 宿主机 virsh 运行状态截图 | 宿主终端执行 virsh list 与 virsh domifaddr win01 正常输出 |
验收命令拆解与说明
virsh list:查询宿主机当前处于运行状态的虚拟机列表,确认win01处于 running 状态;virsh domifaddr win01(Domain Interface Address):查询win01虚拟机的网卡 IP 地址。- 注意:如果在刚完成系统安装、尚未在 Windows 内运行
virtio-win-guest-tools.exe安装NetKVM网卡驱动前执行该命令,界面可能查不到 IP,这是正常现象。安装完网卡驱动并连通网络后,即可成功输出 IP。
- 注意:如果在刚完成系统安装、尚未在 Windows 内运行
本章小结
- UEFI 与 vTPM 2.0 机制:OVMF 为 KVM 提供了标准的 UEFI 固件,
swtpm守护进程通过 CRB 接口为虚拟机提供了独立的模拟 TPM 2.0 芯片,满足了 Windows 11 的安全引导门槛。 - VirtIO 驱动加载:Windows 默认缺乏 VirtIO 驱动,通过挂载
virtio-win.iso并加载viostor驱动,解决了系统安装阶段找不到磁盘的问题;进入桌面后运行virtio-win-guest-tools.exe完成了NetKVM网卡驱动的部署。 - 高性能半虚拟化:相比传统的 IDE/SATA 模拟,使用 VirtIO 驱动能大幅提升 Windows 虚拟机的磁盘读写与网络吞吐性能。
在下一课中,我们将离开图形界面,学习如何使用 virsh 命令行工具与 virt-install 脚本来高效管理虚拟机的全生命周期。
