本文是我的视频《N5105 PVE UEFI核显直通Windows虚拟机(不完善)》的文字说明版,因为是很久之前做的内容,并且一直没有研究相关问题,所以本方案不一定是目前最合适的。如果有不明白的地方,可参照视频中的操作,如视频与文字版不同,请以文字版为准。
B站:https://www.bilibili.com/video/BV1oM4y1y7wW
这次的方案主要针对ProxmoxVE Windows虚拟机下的核显直通,我在N5105第三版工控机和12代桌面平台实测过,其他机器也可以试试。
本方案可以实现Windows虚拟机下核显驱动后在显示器上显示,视频解码没有问题。
注:本方案在N5105第三版机器上有以下两个问题
1. 看不到虚拟机启动画面
2. 声卡HDMI音频输出不能正常使用
第1个问题只针对Windows虚拟机,Ubuntu虚拟机是可以实现开机画面显示的。另外8~9代的UHD630核显,同样使用UEFI核显直通是可以实现Windows虚拟机的启动画面显示的。
第2个问题在N5105上无论Windows还是Ubuntu虚拟机都存在,但在12100机器上Ubuntu虚拟机却可以正常输出音频。
PVE直通设置
相比之前legacy核显直通方式只有很小的区别。
修改/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
运行命令使grub修改生效
update-grub
修改/etc/modules,添加以下内容(非必需,虚拟机直通时会自动加载相关模块)
vfio vfio_iommu_type1 vfio_pci vfio_virqfd
N5105不需要在pve-blacklist.conf添加核显和声卡驱动模块,但需要增加一个VFIO配置文件。
输入以下命令创建一个配置文件
(此配置文件会导致开机画面无法显示,其他机器可以尝试不添加这个配置文件,如果能正常驱动,那么更完整的UEFI直通方案也会适合你)
echo "options vfio-pci disable_vga=1" > /etc/modprobe.d/vfio.conf
运行命令刷新initramfs并重启PVE,使以上修改生效
update-initramfs -u -k all
Windows虚拟机设置
安装Windows
新建一个Windows虚拟机,BIOS设置为“OVMF”,机型设置为“i440fx”。
在不直通核显和声卡的情况下安装Windows系统。
挂载VirtIO驱动盘安装半虚拟化网卡等必要的驱动,开启远程桌面。
测试远程桌面可以正常连接后,关闭虚拟机。
核显直通设置
通过web页面添加核显、声卡等PCI设备,显示设置为“无”。
从ArchWiki下载vbios_gvt_uefi.rom
https://wiki.archlinux.org/title/Intel_GVT-g#Using_DMA-BUF_with_UEFI/OVMF
将vbios_gvt_uefi.rom通过WinSCP或其他方式放到/usr/share/kvm/目录下
编辑/etc/pve/qemu-server/<VMID>.conf
在直通核显一行后面添加legacy-igd和romfile,如下所示
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=vbios_gvt_uefi.rom
args添加以下内容
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=1 -set device.hostpci0.x-igd-opregion=on
sn:序列号
cmdline下mac为网卡地址,SataPortMap和DiskIdxMap根据需要进行修改
其中SataPortMap为每个SATA控制器下磁盘接口数量
DiskIdxMap每两个数字为SataPortMap对应的SATA控制器的盘位索引,使用从0开始16进制数,例如00代表从第1个盘位开始,10为从第17个盘位开始
如果不清楚自己的机器控制器情况,可以参考GXNAS的这个教程 https://wp.gxnas.com/11876.html
注:如果是一些特殊的带有空盘位的SATA控制器,可能需要先使用虚拟磁盘初始化DSM系统,再直通SATA控制器,并相应修改SataPortMap和DiskIdxMap参数
vid和pid默认与PVE的虚拟U盘匹配
vid: “0x46f4”
pid: “0x0001”
修改完成后使用前面的命令卸载img引导文件
2 comments
个人猜测,可以修改虚拟机bios,将宿主机vbios合并到虚拟机bios里面,可能的方案是若干年前nvidia显卡直通的方法,将nv显卡的vbios合并到虚拟机的bios(或ovmf)里面,猜测B站的大大帅就是这么搞的。
康耐信N6000测试通过,但英特尔最新驱动无法使用,windows update给的31.0.101.1999版本驱动也无法使用,报错误43,换版本30.0.101.1994成功