PVE直通核显搭建虚拟Win10 HTPC避坑指南

在PVE上搭建软路由、NAS等虚拟系统都相对容易,而HTPC却因为核显或显卡的直通问题而相对复杂,本文将详细介绍PVE虚拟环境下,直通给WIN10做HTPC并实现HDMI输出的详细步骤,以及避坑指南。

在PVE上搭建软路由、NAS等虚拟系统都相对容易,而HTPC却因为核显或显卡的直通问题而相对复杂,本文将详细介绍PVE虚拟环境下,直通给WIN10做HTPC并实现HDMI输出的详细步骤,以及避坑指南。

先上成果:左边屏是PVE下直通给WIN10核显HDMI输出的,右边屏PVE控制台看到的虚拟屏。

PVE下直通核显给WIN10做HTPC HDMI输出

一、准备工作

⑴ 一台X86物理机,已经完成PVE虚拟环境的安装配置(版本6.1-7)

⑵ PVE物理机BIOS开启VT-x虚拟化技术

⑶ Win10最新镜像。

⑷ Win10虚拟机驱动包:virtio-win.iso

二、开启PVE核显直通

1、启动内核IOMMU支持

打开PVE节点的shell,输入命令:

1
nano /etc/default/grub

PVE虚拟黑群晖实现硬盘休眠避坑指南教程3

开启IOMMU支持:

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off"

amd CPU修改为:

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off,vesafb:off"

PVE开启硬件直通支持

其中“iommu=pt”不是必须的,PT模式只在必要的时候开启设备的IOMMU转换,可以提高未直通设备PCIe的性能,建议添加。

编辑完文件后按“Ctrl + X” > “Y” > “回车”,确认保存并退出,然后更新一下引导配置:

1
update-grub
2、加载硬件直通相关模块

在PVE的shell中输入:

1
nano /etc/modules

查看modules中是否有这些PVE硬件直通相关的模块,如果没有就添加到文件末尾。

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

PVE加载硬件直通所需的模块

3、添加驱动黑名单

编辑PVE系统的驱动黑名单配置文件:

1
nano /etc/modprobe.d/blacklist.conf

这个文件原来不存在,打开里面是空白的,添加以下内容:

1
2
3
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

这些是PVE系统核显相关的驱动,添加到“blacklist.conf”文件后,PVE系统将不加载核显的驱动,留给虚拟机用。

4、绑定核显到vfio模块

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

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

回显如下:

1
2
00:02.0 0300: 8086:5a85 (rev 0b)
00:0e.0 0403: 8086:5a98 (rev 0b)

其中“8086:5a85”和“8086:5a98”分别就是核显和声卡的供应商ID和设备ID,把它们绑定到vifo模块:

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

注意,这里是华擎J3455-ITX主板的数据,其他主板或CPU核显和声卡的硬件ID会不一样,请根据实际情况添加。

最后更新配置信息并重启PVE主机:

1
2
update-initramfs -u
reboot

重启上来之后检查模块是否正常加载:

1
lsmod | grep vfio

有类似回显说明就是正常的:

1
2
3
4
5
vfio_pci               49152  0
vfio_virqfd 16384 1 vfio_pci
irqbypass 16384 2 vfio_pci,kvm
vfio_iommu_type1 28672 0
vfio 32768 2 vfio_iommu_type1,vfio_pci

三、WIN10虚拟机设置

1、虚拟机环境

创建Win10虚拟机,BIOS用默认SeaBIOS,机器改为q35,硬盘格式用SATA格式不然会找不到硬盘,两个光驱一个挂载WIN10的iso镜像,另一个挂载virtio-win的iso驱动包,Win10虚拟机有个PCI设备的驱动要在里面找。

显卡和声卡先不添加,如果添加了请接上显示器,不然可能造成宿主机死机。

PVE下直通核显的WIN10虚拟机设置

2、安装配置WIN10

⑴ 从WIN10的安装光盘启动虚拟机,在PVE的控制台完成WIN10的安装,安装过程中记得给用户账户设密码,后面远程桌面登录必须要有密码的账户才能登录。

⑵ 启用Win10客户机的远程桌面(RDP

Win10怎么启用远程桌面

⑶ 把Win10的客户机的网络改成专用,方便连接远程桌面,。

Win10的网络配置改成专用才能被其他电脑发现

**3、*UPT模式*直通核显

适用于英特尔五代(Broadwell)及以后的CPU,直通的核显为第二显卡,虚拟vga为主显卡,因为虚拟显卡的存在有一定性能损失,推荐性能较好的机器使用。

⑴ 直通核显

打开虚拟机配置文件(“100”为虚拟机ID):

1
nano /etc/pve/qemu-server/100.conf

加上这两行:

1
2
args: -device vfio-pci,host=00:02.0,addr=0x18,x-igd-opregion=on
vga: std

其中“00:02.0”为核显的IOMMU分组信息(“lspci”命令可以查看),请根据实际情况更改。

⑵ 安装驱动

给PVE物理机接上屏幕,启动虚拟机,在PVE的控制台安装直通的核显和其他设备的驱动。

“PCI设备”的驱动在virtio-win驱动包里面,从挂载的虚拟光驱搜索就能找到,安装过程才知道这个设备叫“VirtIO Balloon Driver”,我试了几次,有些时候安装完这个驱动屏幕就亮了,但是核显还不能被调用。

PVE安装Win10虚拟机PCI设备的驱动

核显的驱动自动搜索就能找到:

PVE远程桌面安装Win10虚拟机直通核显的驱动程序

核显安装过程还是可能会出现死机,可以尝试:

  • 安装完“VirtIO Balloon Driver”PCI设备的驱动后正常关闭虚拟机再启动安装核显驱动
  • 先去掉“x-igd-opregion=on”参数,在核显不输出画面的情况下安装驱动,安装完再加上
  • 在主板BIOS把共享显存调到最大,提高虚拟机的CPU内存等配置
  • 远程桌面连接安装核显驱动
  • 试下这个配置:
1
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

下面这张图是华擎(ASRock)Z390M-ITX/ac主板核显直通成功截到的,可以看到UHD630核显被成功识别了。

PVE直通核显WIN10成功识别-HMID输出

⑶ 输出设置

UPT核显直通模式因为主显卡是虚拟显卡,很多程序默认先调用虚拟显卡而且改不了,所以会有一定性能损失。

如果设置双屏扩展或者复制显示,程序默认都不会调用的核显;如果设置成仅在物理显示器显示,分辨率又调不了。

可行性比较高的是在设备管理器里面禁用虚拟显卡,双屏复制显示,这种情况分辨率可调,程序(包括Kodi)能默认调用核显,不过因为双屏的存在还是有性能损失。

4、***Legacy模式**直通核显*

适用于英特尔二代(Sandy Bridge)及以后的CPU,直通的核显为主显卡占用addr=0x02通道,所以不能添加虚拟显卡,这种模式实测成功率比较低,不过性能损失较小,推荐尝试。

⑴ 直通核显

机器类型改成”i440fx”,如果你之前试过UPT模式,删除核显直通配置,先成功启动一次Win10客户机系统。

打开虚拟机配置文件(“100”为虚拟机ID):

1
nano /etc/pve/qemu-server/100.conf

加上这两行:

1
2
args: -device vfio-pci,host=00:02.0,addr=0x02
vga: none

⑵ 安装驱动

给PVE物理机接上屏幕,启动虚拟机,在网络邻居里面找到Win10客户机,用远程桌面进行连接。

[使用远程桌面连接Win10

驱动安装过程和UPT模式一样,还是先安装PCI设备的驱动再安装直通核显的驱动,成功率比较随缘,各种死机花屏蓝屏,假如你成功了那么恭喜你,后续运行会很稳定。

四、其他问题

1、加上“pcie_acs_override=downstream”尝试拆分IOMMU分组:

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt video=efifb:off,vesafb:off pcie_acs_override=downstream"

不一定有用,碰碰运气吧。

2、N卡和A卡的驱动黑名单:

1
2
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf

如果是N卡还需要加入下面的配置到kvm.conf(PVE官方稳定说可以避免死机):

1
echo "options kvm ignore_msrs=1" >> /etc/modprobe.d/kvm.conf

3、romfile选项

romfile是核显直通的另一个参数,它不是必须的,某些主板无法直通第一个PCI(e)插槽上的GPU显卡,才需要用到romfile选项,详情可以参考:PVE核显直通实现HDMI输出搭建LibreELEC KODI HTPC

五、总结

本教程详细介绍了PVE虚拟环境下直通核显给Win10虚拟机,并实现核显HDMI输出做HTPC的详细步骤和避坑指南,难点主要在PVE的核显直通设置和Win10客户机核显驱动的安装,一般情况下SeaBIOS引导的Win10客户机如果直通的核显驱动安装成功都会有HDMI输出,而OVMF(UEFI)引导的Win10客户机核显驱动安装简单但是大多数情况下只能解码没有输出。

用Win10虚拟机搭建HTPC大部分人用起来会比较顺手,但是如果机器性能比较一般的话就可以考虑Ubuntu方案、LireElec方案或者直接在PVE环境安装KODI