PVE 中虚拟机 Windows 11 核显直通
前言
之所以有这么一篇内容,是由于之前购入了一台联想 910 Q 准系统,配齐配件后想当一个学习 All in One 的平台。因为有直通的念头,所以找遍网上的教程,学习了一番,然后再记录下来,分享给大家。
更新源
由于我是新装的 PVE,PVE 7 安装后默认配置的 apt 软件源是官方默认的,国内使用性能不佳,所以先更新一下软件源,这里我替换为了 清华大学 TUNA 协会 提供的国内镜像源,速度是有一个较大的提升。
替换 apt 软件源
更新证书
先更新一下证书,否则可能由于证书不可用导致 https 无法使用,进而无法下载所有软件。
apt install apt-transport-https ca-certificates
由于我是直接在 PVE 的 root
账户上操作的,所以不需要提权,如果你是使用其他账户操作,可能需要先提权后在执行上述命令,以下均默认 root
账户操作。
替换通用软件源
首先替换通用软件源, PVE 是基于 Debian 的 Linux 系统,而 Debian 的软件源配置文件是 /etc/apt/sources.list
,备份后将其中内容修改为以下即可:
先备份,
mv /etc/apt/sources.list /etc/apt/sources.list.bak
新建并编辑,
vim /etc/apt/sources.list
复制下面的内容,并保存。
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free
替换 PVE 软件源
之后替换 PVE 软件源,PVE 镜像默认的 PVE 软件源配置文件是 /etc/apt/sources.list.d/pve-enterprise.list
,备份后将其中内容替换为以下即可:
先备份,
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak
新建并编辑,
vim /etc/apt/sources.list.d/pve-enterprise.list
复制下面的内容,并保存。
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bullseye pve-no-subscription
更新软件
最后更新下,
apt update && apt upgrade -y
PVE 直通核显
配置环境
- PVE 版本:PVE 7.2-7
- 关键软件包版本:pve-qemu-kvm=6.1.1-2
- 虚拟机 Windows 11 版本:zh-cn_windows_11_21 H 2_VOL_x 64
此处参考教程直通了 NVME 固态硬盘,将 pve-qemu-kvm 由 6.2.0-10 降级至 6.1.1-2,因为我后来并未直通硬盘,所以较新版本无任何影响。
硬件平台及 BIOS 设置
因为参考的主要文章是针对 Legacy 启动的,所以本文也是基于此而生。
- M 910 Q 准系统
- Inter I 5 8400 魔改
BIOS 设置
首先确保 VT-D 是启用的状态,然后要开启 CSM 即兼容模块,打开 Legacy 启动。
PVE 直通设置
正式进入正题,这里我参考了多个教程后修改成的我自己的方式,因为有些设置在我的设备中出现了各种各样的问题,所以能看到我这个内容的要学会变通。
开启底层的硬件直通功能
首先进入 PVE 的 shell 界面,编辑 /etc/default/grub
,这里我使用的是 vim
,可能有些比我更小白的朋友输入命令不管用,那就是没安装,可以使用 nano
,大佬就忽略吧。 编辑 /etc/default/grub
vim /etc/default/grub
找到:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off"

此处,
- iommu 开启直通分组
- efifb:off 禁用 efi 启动的显示设备
- vesafb:off 禁用 legacy 启动的显示设备
更新 grub 配置文件
update-grub
加载模块
编辑 /etc/modules
vim /etc/modules
该文件是空白的,直接复制进去即可,具体每个是什么意思,我也暂时没找到解释。
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

禁用 PVE 系统加载显卡驱动
因为 PVE 启动时会尝试加载显卡驱动,为了避免 PVE 占用显卡,需要阻止 PVE 的显卡驱动加载。
添加黑名单
编辑 /etc/modprobe.d/pve-blacklist.conf
vim /etc/modprobe.d/pve-blacklist.conf
添加内容,
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

由于我的平台仅有核显,所以未添加英伟达等黑名单,若是需直通独显,可能还需添加其他相关设备。
查找显卡的设备 ID 并添加直通
查看显卡及声卡设备 ID
lspci -n | grep -E "0300|0403"
其中 0300 代表显卡,0403 代表声卡,如下所示,UHD 630 的硬件 ID 是 8086:3e92
。
00:02.0 0300: 8086:3e92
00:1f.3 0403: 8086:a2f0
添加直通组
找到显卡后记下硬件 ID 编辑 /etc/modprobe.d/vfio.conf
vim /etc/modprobe.d/vfio.conf
添加内容,硬件 ID需注意替换为自己的。
options vfio-pci ids=8086:3e92
添加 options 防止 VM 死机
编辑 /etc/modprobe.d/kvm.conf
vim /etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1
不过好像并无作用,没成功的过程中,我的设备该死机还是会死机。
更新内核并重启 PVE 虚拟机
update-initramfs -u -k all
输入命令检查模块是否加载成功
lsmod | grep vfio
root@bing6:~# lsmod | grep vfio
vfio_pci 16384 0
vfio_pci_core 73728 1 vfio_pci
vfio_virqfd 16384 1 vfio_pci_core
irqbypass 16384 2 vfio_pci_core,kvm
vfio_iommu_type1 40960 0
vfio 45056 2 vfio_pci_core,vfio_iommu_type1
返回成功。
Win 虚拟机设置
新建虚拟机
新建虚拟机,显卡默认,机型默认 i 440 fx ,BIOS 默认 SeaBIOS,开启 Qemu 代理,CPU 开启 NUMA,确认。 转到虚拟机设置的硬件,添加两块 CD/DVD 驱动器,挂载 Windows 系统安装 ISO 镜像,
https://github.com/AveYo/MediaCreationTool.bat
以及 VirtIO 驱动 ISO 镜像
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/
安装系统
开机装系统,安装驱动,关机。
虚拟机参数配置
编辑 /etc/pve/qemu-server/<VMID>.conf
,
vim /etc/pve/qemu-server/<VMID>. conf
首行添加内容,
Args: -set device. Hostpci 0. X-igd-gms=1

此处需尤为注意,首行代码各教程均有不同方案,我试过多个方案,均无法正常直通。
由于本人小白水平,也无法搞清具体代码是什么意思,为什么需这样设置,所以尝试多次才确认此方案在我机器上可正常使用,不代表看到文章的所有人都适用。
添加直通 PCI 设备
转到虚拟机设置的硬件, 添加直通核显 添加直通声卡
添加直通 USB
上述 PCI 设备添加完成后,将显示由默认改为无,改完若 PVE 已经连接显示器,启动虚拟机即可在物理显示器中正常使用。
注意,此时PVE 的控制台,由于更改了显示模式,会导致 VNC 无法连接,暂无解决方法。
最后值得注意的是,虚拟机的睡眠休眠需检查是否关闭。