首先主板bios开启VT-D,SR-IOV,IO-MMU。
部分参考链接:https://blog.vlinyu.com/archives/windows-hyper-v-discrete-device-assignment-dda
一、直通硬盘
打开Hyper-v管理器
Hyper-v设置——增强会话模式策略——允许增强会话模式
之后重启Hyper-v服务,
停止,再启动
打开磁盘管理,让打算直通的硬盘脱机。
脱机之后
选择虚拟机,图中以Win7为例。
windows7下此操作无需关闭虚拟机,其余系统没测试。
设置——SCSI控制器——添加——磁盘驱动器——选择物理硬盘——确定
之后虚拟机Win7中就多了一块直通的硬盘
测试直通效果,新建个文档,保存
Win7中脱机
磁盘驱动器中改成别的
宿主机中打开,原文件都在,没有创建虚拟硬盘文件
硬盘直通完成。
二、直通网卡
微软提供的powershell命令可以检测硬件支持:https://github.com/MicrosoftDocs/Virtualization-Documentation/blob/live/hyperv-tools/DiscreteDeviceAssignment/SurveyDDA.ps1
下载后powershell直接运行脚本,绿色的是可以支持直通、红色的不支持。
这台机器没指望了,换台机器再试,整台机器能直通的设备就两个。。。。。
还是服务器配置合适,一般的消费级硬件真心不行。
本此直通到名为“Win10”的虚拟机
打开设备管理器禁用要直通的网卡
禁用后
右键禁用后的网卡——属性——详细信息——位置路径
复制路径
Powershell中输入以下命令:
#''中的内容为复制的路径
#注意$locationpath为硬件的位置路径
$locationpath = 'PCIROOT(16)#PCI(0200)#PCI(0000)#PCI(0300)#PCI(0001)'
#强行卸载硬件。
Dismount-VMHostAssignableDevice -force -LocationPath $locationpath
#或直接输入硬件位置路径
# Dismount-VMHostAssignableDevice -force -LocationPath #'PCIROOT(16)#PCI(0200)#PCI(0000)#PCI(0300)#PCI(0001)'
#连接到虚拟机,-VmName后的'Win10'为要连接的虚拟机名称
#此操作可能报错,解决方法见下文。
Add-VMAssignableDevice -LocationPath $locationpath -VmName 'Win10'
之后虚拟机中就有了这个网卡
常见错误
Add-VMAssignableDevice : “Win10”无法将资源添加到“Win10”。
无法执行操作。
解决方法:
关闭Win10虚拟机,设置——自动停止操作将默认的“保存虚拟机状态”改为“关闭来宾操作系统”,或“强行关闭虚拟机”(不推荐)
之后Win10系统内便有了直通的网卡
从Win10虚拟机中移除已直通的网卡。
物理机powershell运行以下命令。
若忘记硬件位置路径可用上文提到的脚本——SurveyDDA.ps1扫描出,要花点时间。
#注意$locationpath为硬件的位置路径
$locationpath = 'PCIROOT(16)#PCI(0200)#PCI(0000)#PCI(0300)#PCI(0001)'
#移除网卡
remove-VMAssignableDevice -LocationPath $locationpath -VmName 'Win10'
#连接物理机
Mount-VMHostAssignableDevice -LocationPath $locationpath
#注意-LocationPath前面有空格,复制时总是莫名其妙的消失。会报以下错误
正确的是这样
若不用remove-VMAssignableDevice
命令重新连接物理机此网卡便无法使用
会在设备管理器中显示“已卸载”
三、直通显卡
这次以Win10虚拟机为例
方法一:用开源软件直通
网址:https://github.com/chanket/DDA
最好先把显卡禁用了,注意若没有其他操作方案时不要这么处理。
打开DiscreteDeviceAssigner.exe
右键——添加设备
找到显卡,或者搜索设备,选择设备——如此甚好
确认
添加完成
打开Win10虚拟机,安装驱动
安装成功