前言

这几天在研究j4125的软路由,想打造一套all in one 的家庭多媒体主机。主要想做软路由+ htpc + nas + 智能网关 + webserver 五合一。 但是 想着win11(htpc载体)虚拟机画面直出通过hdmi到电视。然后直通网卡给软路由 。让2.5g网卡发挥他最大的性能。 刚开始方案用exsi虚拟机做载体,发觉win11核显虽然能直通,但是无法通过hdmi输出。只是装了个op(软路由)用过了一段时间后(这段时间研究pve虚拟机),转pve虚拟机了。后面我会简单说下exsi 和 pve各自的优缺点。现在回归正题。

步骤一 启动内核IOMMU支持

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

nano /etc/default/grub

将GRUB_CMDLINE_LINUX_DEFAULT="quiet"修改为

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"

修改完成之后更新grub

update-grub

加载内核模块

nano /etc/modules

添加以下模块

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

步骤二 添加驱动到PVE黑名单

nano /etc/modprobe.d/blacklist.conf

添加驱动

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

步骤三 查找核显和声卡id

输入命令

lspci

image.png
我的核显和声卡的PCIE ID 为00:02.0 00:0e.0 取前两位数就是00:02 00:0e

步骤四 查询对应硬件ID

lspci -n -s 00:02      #查询显卡  00:02 以上获取的ID
lspci -n -s 00:0e      #查询声卡  00:0e 以上获取的ID

image.png
从以上可以查询到显卡硬件ID为8086:3185 声卡硬件ID为8086:3198

步骤五 填上以上ID,添加直通组。多个设备,ids后面每个设备之间用,隔开

nano /etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:3185,8086:3198

步骤六 添加options防止VM死机

nano /etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1

步骤七 更新内核并重启PVE虚拟机

update-initramfs -u

步骤八 重启完成后,输入命令检查模块是否加载成功

lsmod | grep vfio

image.png
看到以上输出画面说明加载成功 直通前提的步骤到此结束。接下来就是虚拟机的操作了

步骤九 创建Windows11虚拟机

这个过程我简略点。需要注意的地方
image.png

image.png
以上虚拟机建立完成。然后后面的逻辑大致就是先通过控制台安装好win11之后 ,进入系统。安装好核显驱动包(在断网情况下安装)。核显驱动包如果需要的话可在下方留言。
驱动安装完后。关闭win11虚拟机。 回去虚拟机硬件设置的显示选项双击编辑改成无,添加pci设备加入声卡直通。
image.png
image.png
至此直通设置完毕,插上hdmi 接入你的显示器。我这边就不上图了。

pve与 esxi对比

esxi
优点:稳定性自然不用说,商用针对企业,半壁江山是他的。但是直通方面的灵活性比较差。
缺点:如果对直通有高度diy的用户,不推荐这个,否者很难折腾。
pve
优点:灵活,基于debian系统。本身就是一个debian 你可以在里面做任何debian可以做的事情。直通方面的灵活度很高。
缺点: 稳定性相对esxi差点。就令我吐槽的点是虚拟机每次关机有时候会锁死。需要重试很多次。

Q.E.D.


生命在于折腾