PVE 安装 Windows 11 虚拟机

本文最后更新于 2025年9月7日 中午

本文只是一个记录,直通核显部分并未成功

环境

PVE 9.0
内核版本 6.14.8-2-pve
CPU: AMD R9

下载 ISO

Win11

VirtIO 驱动程序是 kvm/Linux 的半虚拟化驱动程序,允许直接(半虚拟化)访问设备和外围设备,而不是速度较慢的模拟设备和外围设备。[1]

VirtIO Drivers

下载完成后上传到 PVE 的 ISO 库:local(pve)/ISO镜像

创建虚拟机

常规 操作系统 系统

默认只有系统盘可以选,要选择其他硬盘得先在 PVE 中挂载,参考 PVE 挂载硬盘 硬盘

CPU 选择 1 插槽,4 核心,因为 Win11 家庭版只支持 1 个插槽[2] CPU

Ballooning 允许动态调整内存大小 内存 网络

安装 Windows 11

启动虚拟机,打开控制台,按照提示安装 Windows 11

磁盘驱动 网卡驱动

进入系统后,安装 VirtIO 驱动(virtio-win-gt-x64)和 PVE Guest Tools(virtio-win-guest-tools)

关闭虚拟机,因为系统保存在 SSD 上,可以在选项中打开[3] guest trim

核显直通

1. BIOS 开启

  • SVM(Secure Virtual Machine)
  • IOMMU(Input-Output Memory Management Unit)
  • Above 4G Decoding

2. 编辑 GRUB 配置

在 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT 中加:

1
iommu=pt # GRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt"
更新 GRUB:
1
update-grub

很多教程都加了 amd_iommu=on 但我加上后 warning 无法识别 on,似乎不再需要这项配置(此 warning 未尝试复现)。后来加上也并没有成功直通

3. 启用 VFIO

在 /etc/modules 中添加:

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

4. 找到核显 PCI 设备 ID

1
2
root@pve:~# lspci -D -nnk | grep -i vga
0000:0c:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Granite Ridge [Radeon Graphics] [1002:13c0] (rev c5)
  • D: 显示设备的 完整 PCI 域号
  • nn: 显示厂商ID和设备ID
1
2
3
4
# /etc/modprobe.d/vfio.conf
options vfio-pci ids=1002:13c0
options vfio-pci disable_idle_d3=1 # 禁止显卡进入 PCIe 的 D3 冗余(idle D3)低功耗状态
options kvm ignore_msrs=1 # 防止死机

5. 开机时加载 VFIO 所需的核心内核模块

1
2
3
4
5
# /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

6. 禁用 amdgpu 驱动

1
2
# /etc/modprobe.d/blacklist-amdgpu.conf
blacklist amdgpu

可能需要禁用其他驱动,如 radeon,取决于显卡型号

7. 更新 initramfs

1
2
3
4
5
root@pve:~# update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-6.14.8-2-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.

8. 重启 PVE

1
reboot

9. 验证 IOMMU 是否启用

1
2
3
4
5
6
7
root@pve:~# dmesg | grep -e IOMMU -e AMD-Vi
[ 0.138173] AMD-Vi: Using global IVHD EFR:0x246577efa2254afa, EFR2:0x0
[ 0.338141] pci 0000:00:00.2: AMD-Vi: IOMMU performance counters supported
[ 0.338775] AMD-Vi: Extended features (0x246577efa2254afa, 0x0): PPR NX GT [5] IA GA PC GA_vAPIC
[ 0.338778] AMD-Vi: Interrupt remapping enabled
[ 0.532132] AMD-Vi: Virtual APIC enabled
[ 0.532231] perf/amd_iommu: Detected AMD IOMMU #0 (2 banks, 4 counters/bank).

10. 验证 PCI 设备是否被 vfio-pci 驱动

1
2
3
4
5
root@pve:~# lspci -nnk -d 1002:13c0
0c:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Granite Ridge [Radeon Graphics] [1002:13c0] (rev c5)
Subsystem: ASUSTeK Computer Inc. Device [1043:8877]
Kernel driver in use: vfio-pci
Kernel modules: amdgpu

11. 添加直通设备

在虚拟机的硬件选项中添加 PCI 设备,选择刚才的核显 PCI 域号 添加直通设备

先不要选主 GPU,否则可能无法远程桌面

也不要选 所有功能,因为 AMD 核显可能会把整个 IOMMU 组都绑走,导致无法使用 USB 设备和网络

PCI-Express 勾不勾选尚不明确

12. 安装 AMD 驱动

在 AMD 官网下载最新的 Windows 驱动,安装后重启虚拟机

未添加核显前,AMD 驱动安装程序可能无法安装,添加核显后,我这里可以安装,不清楚是不是代表直通成功了

13. 把显示改成无

把 硬件/显示 改成 无,这样理论上就可以通过远程桌面连接虚拟机了(但我没有成功)

其他尝试

添加 vBios

尝试跟着文章[4]添加 vBios,

提取 vBios 选择 2 Video Onboard -> X Extract

[5]的提取方法不一样,还没尝试

问题

下面是两个启动时遇到的问题

1
2
3
4
error writing '1' to '/sys/bus/pci/devices/0000:0c:00.0/reset': Inappropriate ioctl for device
failed to reset PCI device '0000:0c:00.0', but trying to continue as not all devices need a reset
swtpm_setup: Not overwriting existing state file.
TASK OK

[6] 提出grub 配置增加 pcie_port_pm=off ,但我这没用

如果直通炸了

如果 AMD 的核显不小心把整个 IOMMU 组都绑走,可能会面临机器连不上网,USB 设备无法使用等问题,导致即无法使用 WebUI,也无法 SSH 连接,更无法通过控制台操作。

可以通过 Live CD 进入 PVE,如 Debian Live,挂载 PVE 的根目录,修改配置

1. 查看 PVE 根目录

1
lsblk

2. 挂载根目录

1
2
sudo mkdir mnt/pve
sudo mount /dev/pve/root mnt/pve

3. 进入系统

1
sudo chroot /mnt/pve

参考


PVE 安装 Windows 11 虚拟机
https://term-inator.github.io/2025/08/09/pve-install-win11/
作者
Sicong Chen
发布于
2025年8月9日
更新于
2025年9月7日
许可协议