启动错误
今天启动某个hyper-v虚拟机时,启动失败了,大概的错误信息为:尝试更改“ubuntu_desktop_2204”的状态时应用程序遇到错误。Virtual Pci Express Port (实例 ID 0445948B-C377-4912-AEEB-58A3D45C5694): 无法开机,因为发生了错误“找不到元素。”。找不到即插即用设备实例路径为“PCIP\VEN_10DE&DEV_1C09&SUBSYS_643819DA&REV_A1\4&E5D2217&0&0008”的 PCI Express 设备。
具体错误如下图所示:
原因分析
从报错信息上看,是跟pci相关。突然记得这个虚拟机之前是做过显卡直通的,后来把显卡拔了,所以当虚拟机启动时,就会找不到对应的硬件设备,导致如上图的启动失败。
可通过powershell命令Get--VMAssignableDevice来获取之前直通的设备信息
Get--VMAssignableDevice -VMName "ubuntu_desktop_2204"
如下图所示:
在上图中可以看到,该虚拟机被直通了一个设备。之所以InstanceID和LocationPath变为了空,是因为设备已经被拨掉了。
解决办法
使用Remove-VMAssignableDevice将直通设备移除即可:
Remove-VMAssignableDevice -VMName "ubuntu_desktop_2204"
备注:上述命令会把所有直通的设备都移除掉。其实更好的方式是通过位置路径参数再加以限定,只移除某一个直通设备,如:Remove-VMAssignableDevice -VMName "ubuntu_desktop_2204" -LocationPath "PCIROOT(0)#PCI(0300)#PCI(0000)",但因为这里实际PCI设备被拔导致LocationPath为空,所以这里才直接省略该参数。
设备移除后,虚拟机就成功启动了,如下图所示:
参考
Remove-VMAssignableDevice (Hyper-V) | Microsoft Learn