以PVE做底层,实现虚拟机和实体机共用一套系统文件
实用场景
机器想要做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 | root@amd:~# lsblk |
我这里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 | menuentry "Windows 10" { |
编辑好以后update-grub
更新一下grub,然后重启在grub里选win10看看能不能正常引导,如果提示找不到文件那就说明你的磁盘顺序或者分区写错了,或者是grub里认到的磁盘顺序和系统认到的不一样,在grub里重新lsblk
一下,回去修改正确即可。