实用场景

机器想要做All in One,有24h开机需求,同时想要兼顾打游戏,需要吃高性能显卡。

配置介绍

MOBO:ROG Strix X570-E Gaming
CPU:5700X tdp65W
RAM:玖合星舞 3200Mhz 16G x4
GPU:3060 12G
DISK1:M.2 fanxiang S500PRO 256G
DISK2:SATA 拆机 Kingston 120G

这张板子花了900多,而U才700。为什么会选这么贵的板子呢?因为只有这张板子PCI-E给的足够多,而且自带的网卡足足有3个,AX200 WIFI6,i211 1G,8125 2.5G,对于想做软路由的朋友也是非常好的一个选择,不需要再去添加网卡而占用本身就不多的PCI-E,只需要上一个交换机。PCI-E方面,全部4.0,一个x16供显卡使用,一个x8,一个x4和2个x1,重点是x8和的x4物理形态均是x16,上阵列卡、万兆光或者PCI-E固态以及U.2拓展卡是毫无压力的。有一个x1会被显卡挡住有些可惜,不过x1也只能上个双口的网卡好像也没什么影响。

前提

你必须准备2快硬盘,并且主板支持UEFI。

实现方法

准备双系统

首先电脑上正常安装2快硬盘,并且其中第一块盘上正常安装PVE系统,并且做好硬件直通环境。参考安装PVE并开启硬件直通

然后是第二块硬盘。这一步一定要注意

进PE,推荐使用ventoy搭配上微PE工具箱的PE ISO,这样PE和系统ISO可以放在同一块U盘里。使用Diskgenius手动创建EFI分区,然后创建系统主分区。使用Dism++的系统还原功能安装Win10系统,并在弹出选择引导位置的提示时,选择“高级”,指定引导文件写入刚才创建在第二块硬盘的EFI分区中。绝对!!绝对!!绝对不要写到PVE创建在第一块盘的那个1G的EFI分区里!

然后重启,进主板,选对应启动盘进入Win10,正常打好显卡等驱动。

PVE创建虚拟机并做好直通

虚拟机机型选q35,用UEFI,勾上Qemu代理,显示设备选择none。关于虚拟网卡,如果你有第二块网卡,那么可以考虑不添加虚拟网卡,直接把第二块网卡直通,性能损耗小。如果没有,正常添加虚拟网卡即可。不需要添加虚拟磁盘,不要选择TPM原则上也不需要添加EFI磁盘,不过后面开机的时候会弹警告,但没有实际影响,不喜欢看警告就加上,不在意就无所谓。

然后把装了Win10系统的硬盘直通给虚拟机,参考硬盘直通,并且在PVE的虚拟机选项的引导顺序里,勾选上直通的系统盘。

参考PVE直通Nvidia显卡给Windows10,做好显卡直通。

直通你需要的其他设备,包括但不限于:前置或后置USB接口、网卡、声卡、蓝牙。

我自己没有直通单个硬盘,而是把主板的SATA控制器直接直通了,这样所有SATA盘就都给Win10了,而PVE安装在NVME盘里,不受影响。其他的,我是把AX200 WIFI6和8125 2.5G都直通了,主板上的所有USB和前置的2个2.0直通,只给PVE留了前置3.0,声卡也直通了,蓝牙貌似是和AX200捆绑的,不需要单独直通了。

关于直通选项的所有功能,是把整个PCI-E组全部直通,某些情况下会导致各种问题,建议除了显卡和网卡,其他设备都不要勾选该选项

关于直通USB设备,不建议直通任何USB设备,老老实实直通PCI-E设备,因为有些USB设备和PCI-E设备是在一起的,比如我的AX200和蓝牙就在一起,而蓝牙在PVE里显示为USB设备,这时候我把AX200直通并且勾选所有功能,蓝牙也就一起直通了,此时如果同时勾选直通USB设备的蓝牙,会导致系统无法启动,都是我提前踩过的坑!!

直通完成后,你就可以开虚拟机试一下了,没问题的话,显示器直接就可以有输出。如果系统启动不了,F2进入PVE的UEFI看一下,确保第一启动项是你直通过去那块装了Win10系统的盘。

在GRUB中添加Win10引导

做到这里,你可以在主板里正常切换真实和虚拟系统了,但是每次切换都要进主板有点麻烦,这里我们编辑一下grub,把win10引导添加进去,这样主板把PVE设置成第一启动项,需要切换系统直接在grub界面选择就可以了。

首先lsblk一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@amd:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 3.6T 0 disk
├─sda1 8:1 0 16M 0 part
└─sda2 8:2 0 3.6T 0 part
sdb 8:16 0 111.8G 0 disk
├─sdb1 8:17 0 16M 0 part
├─sdb2 8:18 0 100M 0 part
└─sdb3 8:19 0 111.8G 0 part
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 1007K 0 part
├─nvme0n1p2 259:2 0 1G 0 part /boot/efi
└─nvme0n1p3 259:3 0 237.5G 0 part
├─pve-swap 252:0 0 8G 0 lvm [SWAP]
├─pve-root 252:1 0 30G 0 lvm /
└─pve-data 252:2 0 199.5G 0 lvm /mnt/data

我这里sdb是win10,sdb2是win10的efi所在分区,nvme0n1是pve,nvme0n1p2是pve的efi所在分区。

注意sdb,按顺序数是第2块磁盘,以及sdb2

接下来编辑grub文件

1
nano /etc/grub.d/40_custom

写入以下内容。注意这里的hd1,gpt2,是win10的efi文件所在位置。首先hd1是你刚才按顺序数的第几块盘,第一块是hd0,第二块就是hd1,以此类推。gpt2是这块盘的第几个分区,sdb2就是第二个,如果是sdb1,那就写gpt1,跟上面不一样,这个从1开始,上面的从0开始。

1
2
3
4
5
6
menuentry "Windows 10" {
insmod part_gpt
insmod fat
set root='hd1,gpt2'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

编辑好以后update-grub更新一下grub,然后重启在grub里选win10看看能不能正常引导,如果提示找不到文件那就说明你的磁盘顺序或者分区写错了,或者是grub里认到的磁盘顺序和系统认到的不一样,在grub里重新lsblk一下,回去修改正确即可。