
升级了14代CPU,老的9代CPU想发挥点余热,于是翻出了一些存储设备,组了一台All in One主机。在唯一核显直通直出方面,走了一些弯路。现在把一些收获和感悟记录一下
机型配置主要包括,intel i5-9500T(6核6线程、35W低功耗),带UHD630核显,B360芯片的itx主板,集成I219-V千兆网卡

主要难点:
1、唯一核显:网上大部分资料都是独显+核显,或者唯一独显的,唯一核显的方案比较少
2、核显声卡:集成的声卡与集成网卡捆绑在同一IOMMU设备组上,无法单独直通
3、唯一网卡:介于第2点原因,如果您只有唯一网卡,是不太可能用比较简单的方法实现直通的,(如果您足够专业,相信您也不缺再加一块),所以我的方法是借用主板上的M.2的WIFI接口,加了一个2.5G的Realtek RTL8125B网卡(大约70元),Unraid可以直接识别。不用intel I225-V3或I226的原因有两个,一个是卡高超高,高过原装的屏蔽罩,另一个是断流问题至今仍有发生。在试验阶段,我还用过USB网卡的方案,也能实现。
4、天书代码:网上很多教程只说了要添加代码,原理是什么没有说,容易弄糊涂,毕竟机器硬件千差万别,我的万金油对您来说可能就是卡点,出现问题就很难排查
==============================
用Unraid.USB.Creator制作好U盘系统后,将文件夹“EFI-”改为“EFI”(将-去掉)
否则UEFI启动的机型无法加载
==============================
Unraid系统U盘里面,config文件夹下的go文件
(没有文件名,用记事本就能打开,保存成txt文件,再把扩展名.txt删除,覆盖原文件即可)
添加以下内容:
#!/bin/bash
# Start the Management Utility
/usr/local/sbin/emhttp &
echo 0 > /sys/class/vtconsole/vtcon0/bind
echo 0 > /sys/class/vtconsole/vtcon1/bind
echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind
modprobe i915
chown nobody:users /dev/dri
chmod 0777 /dev/dri/*
(这里大致的作用是开启核显及其硬件解码,如不添加,后需直通HDMI进入Windows后可能会非常卡)
==============================
SETTINGS下面,VM Manager里面:
PCIe ACS override改为Both
(这里的作用是便于iommu将每个设备单独分组)
VFIO allow unsafe interrupts改为Yes

==============================
MAIN下面,修改Flash
Unraid OS里面改为:
kernel /bzimage
append intel_iommu=on iommu=pt vfio_iommu_type1.allow_unsafe_interrupts=1 vfio-pci.ids=8086:3e92,8086:a348,8086:a308,8086:a323,8086:a324,8086:15bc modprobe.blacklist=snd_hda_intel,snd_hda_codec_hdmi video=efifb:off,vesafb:off pcie_acs_override=downstream,multifunction initrd=/bzroot


其中,vfio-pci.ids=8086:3e92,8086:a348,8086:a308,8086:a323,8086:a324,8086:15bc这句需要更具实际需要直通的硬件进行修改,一般包括核显显卡和核显声卡
设备ID可以在TOOLS下面的System Devices里面找到
(这里的作用是,屏蔽掉这几个相关的设备,将显示功能加入黑名单,让Unraid不可用,那么其他的虚拟机就可以直接使用,也就是直通了)
【注意】
有可能出现核显声卡接在南桥芯片上的情况,这时Unraid 会将所有通过南桥芯片的硬件分在同一个组(可能包括网卡,系统管理总线、串行控制总线等)。
这时,如果需要直通核显声卡,必须直通全组的硬件,否则,后需添加声卡的时候,不能选择核显声卡。
如果核显声卡和板载网卡在同一组内,则不能将板载网卡作为Unraid的登录端,否则将板载网卡的ID加入vfio-pci.ids后,Unraid系统自身将无法启动。
这时候,须在启动选择的时候,切换为Unraid OS GUI Mode等其他未经修改的模式,即可成功启动。启动后应及时修改Unraid OS的内容。

==============================
【重启】
==============================
TOOLS下面,System Devices里面:
VGA compatible controller
Audio device
这两项必须勾选,其余同组内有关联总线的设备也会被勾选
==============================
【重启】
==============================
在VMS下添加虚拟机
【经实测,在本机上,主板的CSM开启与否,与虚拟机的模式并无关联,也就是存储UEFI+PCI设备UEFI,存储UEFI+PCI设备Legacy,存储Legacy+PCI设备Legacy,对实现直通直出并无影响。因未测试其他系统,比如10代以上intel或者AMD设备,不敢打包票,至少在我的机子上,以上三种情形均做了测试,使用无异。
另,有博主说OVMF模式一定无法直出HDMI,但我实测可以,而且速度优于SeaBIOS,笔记开始的那张照片就是在OVMF模式下直出HDMI的,流畅输出4K/120Hz高码率视频,显卡和CPU占用率均不高。】
Machine选i440fx
(实测Q35模式下,只能远程登录,HDMI无任何显示)
BIOS选SeaBIOS或OVMF均可
(两种模式在pci设备的虚拟化id上可能会有细微区别,个人主观感受OVMF的流畅度更高一些,原因暂不清楚)
USB Controller选3.0(qemu XHCI)
初始安装时,显卡选Virtual,声卡不选

【注意:务必使用x64的系统,实测Win10 x86无法安装显卡驱动,也无法HDMI直出,但可以远程登录。另,CPU效率极低,开应用等待时间很长,原因暂不清楚。】
==============================
如需直通硬盘
打开控制台,输入命令:
cd /dev/disk/by-id
ls
找到里面ID和为挂载硬盘相同ID的路径记录下来
在Primary vDisk Location里面选Manual,在右侧填入磁盘路径,以/dev/disk/by-id/开头,后面接硬盘ID
如:
/dev/disk/by-id/ata-HFS128G39TND-N210A_ES81N62061050271G
/dev/disk/by-id/ata-Samsung_SSD_860_EVO_M.2_250GB_S413NX0KC02402P
/dev/disk/by-id/nvme-WDC_PC_SN530_SDBPMPZ-512G-1101_21080V801424
/dev/disk/by-id/ata-WDC_WD40PURX-64AKYY0_WD-WX32D918JNL2
磁盘总线选SATA(NVME硬盘也要选SATA,暂未测试是否会限速)
==============================
如虚拟机启动后无显示,可在<os>里面可添加如下内容:
<bootmenu enable='yes'/>
但这条内容也可能会影响启动速度,如无特别需要,不要添加

==============================
安装完系统后,系统更新设为暂停7天(以免网络污染),在设备管理器里打上驱动
如需远程登录,还需设置用户密码(没有密码远程无法登录),并将系统属性-远程-远程协助/远程桌面都打开,记下IP地址或在路由器后台查询
把硬件时间当作UTC(否则Windows内时间显示会不正确)
打开CMD,输入以下内容后回车
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
之后将Windows关机
==============================
进入虚拟机Edit
Graphics Card改为核显
Graphics ROM BIOS填写vBIOS文件
【特别注意:我试过网上搜到的这个万能rom在我的电脑上可行,文件名是vbios_gvt_uefi.rom,如有需要可以在网上搜索下载。恕不能在此提供,因为不适当的vbios有一定几率会导致您的显示器损坏】
Sound Card选择核显声卡

UPDATE后,再次进入虚拟机Edit,右上角FORM VIEW打开,进入代码模式
显卡描述后面添加:
multifunction='on'
即原<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
改为:
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
【注意:如果BIOS选的是SeaBIOS,则要做如下修改;选OVMF的不能修改,否则声卡失效】
核显声卡改为跟显示相同的slot,function改为不同的
即原<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
改为:
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
这个操作的意义是,把核显作为多功能设备(multifunction),并将核显声卡绑定在同设备位置(slot)下,作为不同的功能(function)

【注意:如果BIOS选的是OVMF,会有如下情况;选SeaBIOS一般不会出现】
有的主板设备不支持reset,在虚拟机启动后,日志会有提示
qemu-system-x86_64: vfio: Cannot reset device 0000:00:1f.3, no available reset mechanism.
这种情况并不影响声卡的的实际使用,无视即可
==============================
==============================
可能有用的链接
==============================
授时服务器:
APPs应用商店加速插件:
http://plg.unraid.site:8/plg/UNRAID_Modify.plg
Hotplug USB插件:
https://github.com/dlandon/libvirt.hotplug.usb/raw/master/libvirt.hotplug.usb.plg
中文语言包:
https://raw.githubusercontent.com/unraid/language-templates/master/limetech/lang-zh_CN.xml
发布于 2023-11-04 19:40・IP 属地广东 ,
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权本站发表,未经许可,不得转载。
最新留言