我也有类似情况,核显UHD630,在首次更改libvirt时,把如下内容加入到了win11的虚拟机,
root@fnOS-device:~# virsh edit konu9fau
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'> <source> <address uuid='2df97709-7f76-4ebc-80d0-6359c8bf0d51'/> </source> </hostdev>
而且首次进入win11是在控制台里进入的,登录后显卡能在device mananger里看到,驱动也自动安装了。显示器设置能看到两个设备(1个是UHD630,1个是虚拟的),物理显示器没有Windows画面。
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='off'> <source> <address uuid='2df97709-7f76-4ebc-80d0-6359c8bf0d51'/> </source> <address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/> </hostdev>
重启飞牛和虚拟机后,控制台进入虚拟机win11会卡在windows启动画面,只能用远程桌面(用的是Microsoft Remote Desktop),用vlc随便播放一个视频,几秒之后飞牛崩溃,必须硬启动。检查了虚拟机配置 (virsh edit konu9fau)发现hostdev多了一些内容,即使手动删除多出来的内容,保存退出后再编辑依然存在。
所以我的疑问是,按楼主教程开启了GVT-g后,核显应该是直通给特定虚拟机了,那么虚拟机的显示输出就应该出现在物理显示器上,对吗?但是我的win11在显示器中没有输出,还是显示的飞牛启动后系统登录画面。
--------------------更新:
通过和deepseek一番讨论,得出了以下结论:
1. 我对GVT-g的理解是错误的。首先,我们需要明确GVT-g(Intel Graphics Virtualization Technology)的工作原理:- GVT-g是一种中介直通(mediated passthrough)技术,它允许将一块物理GPU分割成多个虚拟GPU(vGPU),供多个虚拟机同时使用。 - 与完全直通(如VFIO)不同,GVT-g下宿主系统(飞牛OS)仍然可以使用核显进行显示输出,同时虚拟机也可以使用分配到的vGPU。
因此,在GVT-g模式下,虚拟机的图形输出并不会直接接管物理显示器的输出,而是需要通过其他方式显示,比如: - 通过虚拟显示设备(如Spice、VNC)在宿主机的窗口系统中显示。 - 通过虚拟机的远程桌面(如Windows的RDP)显示。 - 或者,如果虚拟机系统支持,可以将虚拟机的显示输出定向到宿主机的某个显示端口(但这不是GVT-g的默认行为)。
所以,你的理解有偏差:在GVT-g模式下,虚拟机的显示输出并不会自动出现在物理显示器上。物理显示器仍然由宿主机的显示管理器控制(即飞牛OS的图形界面或终端)。
2. VLC播放导致系统崩溃的问题。在系统日志里发现这样一个错误: [ 5.770795] i915 0000:00:02.0: Direct firmware load for i915/gvt/vid_0x8086_did_0x3e92_rid_0x00.golden_hw_state failed with error -2
这个错误表示系统尝试加载一个固件文件(golden_hw_state)但失败了。这个文件是GVT-g用来初始化虚拟GPU的。虽然这个错误可能不会导致功能完全失效,但可能会引起不稳定。
经此一役,发现GVT-g并不是我要寻找的方案,还是回到物理机+功放+投影仪来播放4K了。 也许我的经历能对也有类似需求的兄弟有所帮助,并在此感谢 @陪玩 大佬的攻略。 祝各位好运!
|