BLOG
Enjoy when you can, and endure when you must.
PVE 直通核显

最近新入一台 mini 主机,底层系统安装 PVE,通过安装虚拟机来做到软路由、NAS、日常办公 PC 等等 ALL IN ONE。

日常办公 PC 当然由 Win10 担当,并在 PVE 里实现将唯一的核显直通给 Win10,且通过物理显示端口(如 HDMI、DP 等)输出到显示器上。

众所周知,PVE 里做核显的直通还是很麻烦的,在此做个记录与大家分享。

本文仅以自己的硬件情况记录过程和配置,其他情况因缺少硬件和实操经验,就不多说了,以防误导大家。

 

一、环境

  • 核显:UHD Graphics 630
  • PVE 版本:6.1-7
  • 虚拟系统:Win10

 

二、启动硬件直通

在此之前,首先确认 CPU 是支持 VT-D

1. 修改 /etc/default/grub

修改 GRUB_CMDLINE_LINUX_DEFAULT 为:

quiet intel_iommu=on pcie_acs_override=downstream video=efifb:off,vesafb:off

2. 修改 /etc/modules

增加直通相关模块:

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

3. 更新引导

update-grub

4. 修改 /etc/modprobe.d/pve-blacklist.conf

增加驱动黑名单,如该文件没有,则创建。

blacklist nvidiafb
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

5. 绑定核显到 vfio 模块

查看核显以及声卡的供应商和设备 ID:

lspci -n | grep -E "0300|0403"

得到输出:

00:02.0 0300: 8086:3e98 (rev 02)
00:1f.3 0403: 8086:a348 (rev 10)

其中“8086:3e98”和“8086:a348”分别就是核显和声卡的供应商 ID和设备 ID,注意,这里每个人会有不同,请根据自己实际的输出来做接下来的绑定操作。

把它们绑定到 vifo 模块:

echo "options vfio-pci ids=8086:5a85,8086:5a98" > /etc/modprobe.d/vfio.conf

6. 更新配置信息

执行以下命令更新配置信息:

update-initramfs -u

最后重启 PVE 物理机。如果操作成功,重启后,显示器的内容会卡在启动过程中最后显示的两行代码那里。

 

三、创建虚拟机并安装 Win10

1. 创建虚拟机

通过 PVE 的引导来创建虚拟机:

记住 VM ID,之后配置会用到。

OS 选择 Win10。

系统相关选项均先保持默认,即显卡为默认、BIOS 为 SeaBIOS、机器为 i440fx。

之后的几个 TAB 内容按需选择即可。

创建完成虚拟机后,先不要开机。为虚拟机添加 PCI 设备,并选取显卡,不要勾选“主GPU”:

然后,开启虚拟机,正常安装 Win10 并进入系统。

2. 安装驱动

这里主要是安装 VirtIO 和核显驱动,其中 VirtIO 驱动需要自行下载并加载到虚拟机中安装,可在下面的链接中获取:

https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

安装好驱动后,关机。

 

四、设置核显直通,并通过物理显示端口输出

1. 将之前添加的 PCI 显卡从虚拟机的硬件中删除

2. 编辑虚拟机配置文件

进入 PVE 的 Shell 控制台,编辑配置文件:


 

nano /etc/pve/qemu-server/105.conf

其中“105”代表创建虚拟机时分配的 VM ID。增加以下行:

  1. 第一行:args: -device vfio-pci,host=00:02.0,addr=0x18,x-igd-opregion=on
  2. 倒数第二行:vga: std

 

打开虚拟机,此时应该能实现 VNC 和显示器双输出。后面怎么玩,就看大家自己发挥啦。

COMMENTS
LEAVE COMMNT