很早以前就想在家里的 PVE 虚拟平台上安装 Windows 操作系统,并且直通显卡,直接连接显示器使用。
因为不想浪费时间,以及不是那么刚需的原因,最终也就不了了之了。但是最近在这个需求变得强烈起来,因为我上班了,总是背着我的 ITX 小主机上下班也不是很方便,所以重新审视如何利用家里的 PVE 解决在家用电脑的需求。
机器配置:
项目 | 明细 |
---|---|
CPU | Intel(R) Core(TM) i5-4590(4 核 4 线程 @3.30GHz) |
内存 | 16GB 1600 DDR3(4GB*4) |
芯片组 | Q87 芯片组 支持 VT-d |
固态硬盘 | Samsung 850EVO 120GB |
机械硬盘 | 西部数据 4TB 蓝盘(直通给了 NAS) |
板载网卡 | Intel 1000Mbps 以太网卡 |
拓展网卡 | Intel i350-T2 千兆以太网卡 |
机箱及主板 | Dell Optiplex 9020SFF 准系统 |
目前运行虚拟机:
- MikroTik Router OS:作为主路由拨号上网、流控
- OpwenWrt:作为旁路由实现增强功能
- DSM:黑群晖 NAS
- CentOS:作为学习用机,部署自己写的项目
- Windows10:即将安装,作为备用机
正题:PVE 安装 Window10 并且直通核显
本篇教程只适用于 Intel 平台核显的直通,其他情况可以酌情参考。
PVE 环境配置
首先确认主板是否支持 VT-d 技术,可以直接进 BIOS 查看有无此设置项,或者到 Intel 官网查找芯片组的产品规范书进行确认。如果支持,需要先打开 VT-d 功能,如果不支持,下面的内容就不用看了。
1. 开启 iommu
打开 grub 文件:
vim /etc/default/grub
找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为:GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"
修改完成之后更新 grub:
update-grub
2. 加载相应的内核模块
打开 modules 文件:
vim /etc/modules
在文件末尾添加以下模块:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
3. 将显卡加入 PVE 的黑名单
打开 blacklist.conf 文件:
vim /etc/modprobe.d/blacklist.conf
在文件末尾添加以下内容:
radeon
nouveau
nvidia
nvidiafb
amdgpu
snd_hda_intel
snd_hda_codec_hdmi
i915
保存文件并更新内核:
update-initramfs -u
4. 将显卡加入直通组
查看显卡的 id:
lspci
VGA 开头的就是我的核显,其中 00:02 是代表组名,00:02.0 是代表 00:02 组的第一个设备。
通过组名查找 id:
lspci -n -s 00:02
8086:0412 是厂商 ID: 设备 ID,如果显卡带有声卡,这里会显示两个设备,一个显卡,一个声卡。我这显卡没有声卡,所以只有一个设备。
记住显卡的 id,添加到直通组:
vim /etc/modprobe.d/vfio.conf
在文件末尾添加以下内容:
options vfio-pci ids=8086:0412
如果有多个设备,ids 后面每个设备之间用,
隔开。
还需要添加 options 防止 VM 死机,打开 kvm.conf:
vim /etc/modprobe.d/kvm.conf
在文件末尾添加如下内容:
options kvm ignore_msrs=1
5. 重启 PVE
这一步很重要,单独写出来。
6. 开始直通
首先创建一个虚拟机,名称自定义;
使用光盘镜像的方式安装系统,类别选择 Microsoft Windows,版本选择 10/2016/2019;
机器类型选择 q35;
硬盘视情况而定,如果有空白硬盘可以选择直通给 windows 使用,这样效率最高,我这边没有空闲的硬盘了,所以只能虚拟一块 50GB 磁盘先用着,轻度使用应该是足够的;如果你是 SSD 可以勾选 SSD 仿真,这样可以提高效率;
CPU 核心数视情况而定,一定要启用 NUMA,CPU 类别选择 host;
内存视情况而定,内存和最小内存一定要一致;
网络这里选择 VirtIO 半虚拟化,效率比较高;
确认无误后点击确定,接下来在虚拟机的硬件中添加 PCI 设备,添加我们要直通的显卡;
勾选主 GPU 和 PCI-Express;
最后启动虚拟机,按照正常安装 Windows 的流程操作一遍,驱动需要下载 windows 着用的 kvm 驱动,地址:https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/;下载 ISO 文件通过虚拟光驱的方式使用,不懂可以问度娘呀。
所有驱动,包括显卡的驱动都装好之后,此时连接显示器应该是没有输出的,而且在设备管理器中,会提示该设备有问题,已被停止,所以接下来要解决这个问题。
将虚拟机关机,在硬件中删除刚刚直通的 PCI 设备,打开虚拟机的配置文件:
# 100换成具体的虚拟机ID
vim /etc/pve/qemu-server/100.conf
在第一行添加如下内容:
args: -device vfio-pci,host=00:02.0,addr=0x18,x-vga=on,x-igd-opregion=on
将显示改为无:
连接好显示器,重新打开虚拟机,不出意外你将看到熟悉的 Windows10 界面。
7. 直通 USB 用于连接键盘鼠标
这一步比较简单,接上键盘鼠标之后,选择添加 USB 设备,使用 USB3 视情况勾选:
8. 直通声卡
声卡问题暂时没有解决,什么时候解决了来更新。
目前通过直通 USB 设备使用 USB 外置声卡来曲线救国。
2020-09-21 更新:
之所以直通不了,是因为我在 BIOS 把声卡给禁用了!重新开启之后就好了。
总结
真的挺折腾的,所以之前那么多次想弄,最后也都放弃了,不得不说是明智之举。
网上这方面的教程太少了,和我的情况一样的更是几乎没有,我也是查了很多资料,相互印证才在我的环境上成功的,所以写出来,能给大家多一个参考也是极好的
。