欢迎光临散文网 会员登陆 & 注册

2022款幻15折腾Linux KVM虚拟机+显卡穿透+硬盘直通记录

2022-08-12 13:58 作者:怎么取名字这么难额啊  | 我要投稿

人在家里闲的久了总会多少憋出点毛病来,不找事来做总觉得浑身难受。所以最近一段时间我都在Windows和Linux间反复横跳(指Linux搞炸了又回到Windows下用几天,然后再回过头来装Linux),闲得蛋疼了属于是。

但是这一周折腾Linux的过程却异常的顺利,基本没出什么致命的错误。于是就一步步走到KVM+显卡直通这一步了。

读前提示+免责声明:注意标题,这只是个人记录,并非教程。本文只是如实记录了这一周下来我在Linux上安装各种软件+KVM的操作过程。(作为一个存档)并非真正教程。很多软件包的安装也只是针对幻15这个型号。

本人只是Linux入门新手,大部分操作都基于官方wiki+小部分个人摸索,如有错误还请多多指出,在评论区交流。定备份好重要数据。由于Linux更新快,操作内容请以wiki为准。

目录:

1.开头

2.发行版选择

3.安装系统+设置

4.奥创中心的替代品

5.KVM + 显卡直通 + 硬盘直通

6.随时间更新的补充项

  1. 开头

    先说一下机器配置

    CPU:6800HS

    显卡:3060 Laptop

    硬盘:西数 512G+三星 1TB(虚拟机直通单块硬盘需要)

    内存:40G(开虚拟机大内存是刚需)

    网卡:MT7922 无线网卡

  2. 发行版选择

    得益于前几次踩过的坑,直接选择了基于Arch的Manjaro + KDE(因为懒,而且怕Arch配置的时候搞出什么岔子来)。Manjaro对于我来说到目前为止都很稳定,KVM配置也很顺利。Manjaro直接安装在三星的硬盘上,西数的后面用来做直通硬盘给虚拟机。

  3. 安装系统+设置

    安装前先在windows下将显卡模式切换成混合模式,独显直连安装会引发很多后续问题。启动项选择开源驱动,自带的闭源驱动会出问题。

    (另外记得插好网线,默认下无线网卡是暂时用不了的)

    安装进入系统后第一件事情:更新软件+更新内核

可能你看到这篇文章的时候Manjaro官方的安装镜像已经更新了。但是我就因为安装后没有立即更新系统,就遇到了安装浏览器导致glibc损坏的问题,不过还好进命令行模式救回来了。更新完记得重启。

另外在幻15要使用5.17以上的内核(后面的优化软件会用到),我这里直接更新到5.19内核。

更新到最新内核

重启,然后安装专有显卡驱动:

直接一键安装即可

之后再次重启电脑。

(注:有时候会遇到卡在重启界面比较久的情况,耐心等一下就行了)

其他的软件就不用多说了,这里主要是针对这台电脑做出的一些特定软件安装。

补充:要安装base-devel包来准备好基础环境,后面很多地方会用到。

无线网卡问题:mt7922的网卡驱动实际上已经被合并到5.18以及更新的内核里了,但是manjaro下还缺少控制它的工具。所以:

我把这两个工具一装上,就能在右下角看到WiFi了

(注意:该型号的网卡的蓝牙目前还是无解的状态)

音响问题:如果不用外接声卡或者音响的话,你会发现默认状态下音量调节只能调节高音喇叭。

原因出在系统默认配置下,只能控制其中两个喇叭,按照这篇教程就能解决问题:https://wiki.archlinux.org/title/ASUS_Zenbook_UX431

打开HDAJackretask

按照图里面的方法设置,点击Install boot override,然后重启。如果还不解决的话就把两个设置换过来(即Back和LFE互换)

到目前为止,硬件已经差不多安顿完了,想要人脸识别的可以安装Howdy,在这里就不详细的陈述了。接下来才是比较重要的部分

4.奥创中心的替代品

在Windows上有奥创中心可以设置电脑的键盘灯,电脑模式,风扇曲线,切换显卡等。那么在Linux下也有相对应的替代品:asusctl和supergfxctl(两者是同一个项目)

注意,asusctl对于幻15的支持还稍微欠缺,主要是自定义风扇曲线无法使用。

另外,在linux下,AMD CPU的笔记本电脑还不支持英伟达显卡的功率增强,意味着这台电脑的显卡最高只能跑在80瓦的功率。但是个人认为并无大碍,因为BIOS缺陷,导致这台机器的显卡增强模式还不如普通模式,具体情况可以看我前两篇文章。

asus-linux项目官网:https://asus-linux.org/(有问题可以先看官网FAQ)

asusctl和supergfx:https://gitlab.com/asus-linux

安装:

以下所有的命令都源于官方的readme,请以随时查看并官方的命令为准。

这时候在终端输入asusctl应该能得到以下输出

另外这个工具自带了一个GUI,应该能在设置选项卡里面找到

到现在还差显卡切换的功能没有实现了,所以下一步就是安装supergfxctl。其实和上面的安装过程没什么区别

然后重启,使其生效。重启后在终端输入supergfxctl应该能看到输出

supergfxctl也有GUI可以选,官方的是GENOME桌面扩展,然后有大神自制了KDE桌面的版本:https://gitlab.com/Jhyub/supergfxctl-plasmoid。

另外如果你是用的是Arch系,可以直接通过AUR来进行安装

效果图是作者本人的截图,我就不安装了,因为显卡切换的场景用的比较少。

另外根据supergfx的readme描述,有两种切换模式可以选,一种是无需重启,另一种需要重启。具体的设置方法是编辑GRUB启动命令。

注意后面还有个双引号,我这里因为后面还有指令,没法截取到

当后面的值为1时,切换显卡需要重启。后面的值为0时,只需要注销系统再登录即可。我这里改成1 ,readme中也没有说明1和0会对系统别的部分产生什么影响,我自己两个都设置了一遍也没发现什么区别。所以.......我自己也是被蒙在鼓里。

(谷歌了一下,发现大家说法各不相同。不过要记住这篇文章只是我在幻15上折腾的一个记录,很多操作我只能保证对这台电脑起作用。所以就没必要纠结那么多

无论如何,修改完成之后,重新生成GRUB后重启(每个发行版的指令不同)

到现在,整台电脑的使用体检基本上已经到位了。接下来就是难点:KVM+显卡直通虚拟机

5.KVM + 显卡直通 + 硬盘直通

先声明:我对KVM的理解程度是“专业级别的一窍不通”,都是按照各种readme和wiki进行的(所以请随时参照wiki)。有些操作和命令到底管不管用?我也不懂,但是到最后就是能用(笑)。不过再次:文章只是记录,不是教程。

前置准备:第二台显示器,外接一套键盘鼠标。因为到时候这两者都是虚拟机独占的。

既然我对KVM不精通,那还是直接端上wiki链接罢

KVM:https://wiki.archlinux.org/title/KVM

QEMU:https://wiki.archlinux.org/title/QEMU

Virt-Manager:https://wiki.archlinux.org/title/Virt-Manager

从上到下流程走一遍之后,应该就能在看到虚拟机管理器了:

在安装完成之后,可以先试着新建并启动一个虚拟机,遇到什么错误的话Google一下。

显卡直通 + 硬盘直通:

先上wiki链接:https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF,下面所有操作都是根据官方wiki来的。

第一步:设置显卡模式(supergfx的readme文件提及的操作)

前面已经安装好了supergfxctl,那么就要先将独立显卡调整到“计算”模式,确保等下隔离显卡时不会出现问题。

注:本步骤的“有用性”存疑,需要进一步验证。具体原因后面会写到

第二步:开启IOMMU支持

再次编辑GRUB文件(方法和上面相同,编辑完成后记得重新生成GRUB,重启

(注:在写这篇文章的时候,上面这行命令对我失效了,没有显示IOMMU启用,但是在下面的IOMMU分组操作中,IOMMU已经被事实上的启用了)

第三步:检查IOMMU分组情况

全部复制粘贴到终端中,回车运行。如果IOMMU被启用了应该能得到以下输出。

注意IOMMU Group,独立显卡显卡有两个设备,都在Group 15,而需要直通的硬盘在Group 20.一定要注意该设备是否独占了一个组,只有这样才能确保直通成功。

在这台笔记本上还不错,IOMMU分配符合预期。那么就把这几行信息完整的复制下来(原因是需要末尾的那一串ID)

第四步:开始直通设备

(注:下面这些步骤相对官方wiki有改动,但是会更加方便一些)

wiki上是通过加载模块的形式来完成直通,但是我在教程视频里找到了通过GRUB命令来隔离PCI设备的方法。从命令上来说,两者命令其实并无差别(但是前者会更加安全一些?)再次,再次打开GRUB文件。

前两个ID是显卡的,后面那个是硬盘

把刚才得到的设备ID填入,保存并重新生成GRUB文件,但不要重启,还有一步。

这里的开机命令是按序执行的,按理说应该是“设置显卡模式,开启IOMMU,隔离设备”,但是设备最终都会被隔离出来,那么前面的设置显卡模式意义真的存在吗?希望有人来解答一下

除此之外还需要加上一层保险,确保隔离是成功的

打开文件,在MODULES后按顺序填入以下命令。

保存退出,重新生成配置信息

到现在为止,设备隔离应该就已经完成了,重启检验一下效果。如果不出什么问题的话,现在应该已经变成了AMD的显卡,而且在磁盘管理中也看不到另一块硬盘的影子了

系统运行在CPU的集显
另一块Nvme硬盘已经被成功隔离,这里只能看到运行系统的这块



第五步:为开启虚拟机做好准备

外接好显示器到幻15的HDMI口上(C口输出还没测试),接好鼠标键盘,准备好windows镜像(注:如果安装win11的话,还需要安装一个软件TPM模块,Google教程有)

按照提示创建好虚拟机,中间的步骤要注意:1.虚拟硬盘不用创建,因为是直通nvme硬盘。2.最后一步勾上“安装前自定义”

启动固件

我之前已经创建过了,所以这里没法选

固件有好几种,大部分情况下都是选择OVMF_CODE,如果要安装win11的话,要选择带“secure”标识的支持安全启动的固件。

CPU设置

在这里把套接字(Socket)设置成1,然后设置核心数,每个核心的线程数。

这里如果忘记改的话,举个例子:我在创建向导里面设置了12线程,但是他默认的结构是“12个插槽,插了12个单核的CPU”,然后windows又不支持那么多CPU,导致进系统一看只有两个线程还死慢。

另外由于I和A家的CPU线程分布各有不同,想要获得最高性能有可能需要手动将线程与核心绑定,但是在这里AMD的默认分布性能已经足够好了,就不折腾那么多。

关于CPU拓补结构,在wiki的PCI-Passthrough教程文章下面有详细介绍。

PCI和USB设备

努力了这么久就是为了这一刻。点击左下角添加硬件,添加PCI主机设备。分别添加显卡和硬盘(特别是注意显卡要穿透两个)

显卡本体
显卡的声音设备
nvme硬盘

然后就是USB键盘鼠标。在终端下面

然后通过拔插设备来判断对应的USB设备(在这里就是外接的USB键盘鼠标),加进虚拟机

鼠标
键盘

另外还有一个设置,关掉内置的虚拟显卡。

不选None的话,到时候Host也会显示画面,外接显示器也会显示画面,然后你的鼠标还没办法在两个屏幕直接横穿。

引导项:

这里可以等下再设置,不算大问题,但是提前设置就方便一些

上面的SATA设备是我们的系统安装镜像,等到系统安装完成以后可以取消引导或者删除他。然后下面的就是我们的nvme硬盘。

TPM:对win11有效,在添加硬件一栏可添加一个软件TPM模块(前面安装过了的话)

开机

接上显示器(激动的心颤抖的手,期待奇迹的发生)开启虚拟机

如果一切都没问题的话,第二个显示器应该就会有输出,并提示按下任意键进行CD/DVD引导。接下来就和正常安装windows没啥区别了。

另外这个时候,你外接的USB键鼠就应该是被虚拟机独占的状态。


性能实测

既然都是直通运行,那么性能自然不会很差了,这里就不做太多测试。

但是可以安装VirtIO驱动来提高网卡的性能

最后效果

补充:如果想把显卡换回给Linux?hmmmmm,这个我没想过。不过按照道理,应该把GRUB和mkinitcpio里的改动删掉,然后重新生成就好了。

6.随时间补充的部分

2022年8月14号:

不懂为什么莫名其妙把linux的电池电量显示搞崩了,可能是因为内核读取到了错误的电池信息,无论何时都显示“已连接电源但功率不足”。解决方法:直接把内核降级到5.18后恢复正常,另外其他功能未损坏。

把显卡换回到linux下,实际上只用把GRUB里面显卡的id给删掉就好了,mkinitcpio不用动也行,我就把GRUB的设置复制两行,需要的时候注释掉其中一行再生成GRUB就行。


2022年8月21号:

还是花点钱换掉了联发科的网卡,换成AX210。结果相当Amazing啊,使用体验直线上升。

说来也没啥毛病,毕竟iwd原本就是intel的(逃)

对了,KVM直通以后可以考虑用HDMI欺骗器+Looking Glass的方案来实现一个显示屏使用。

另外Looking Glass支持键鼠、文字剪切板在虚拟和实体机中无缝切换。这样就可以不用单独直通USB键鼠了。

感谢阅读,有什么问题或者错误可以在评论区提出来。以上的操作仅保证在本人的的硬件和软件条件下生效。

2022年9月22号:

Linux5.19.9内核添加了电池电量显示bug的修复。

2022款幻15折腾Linux KVM虚拟机+显卡穿透+硬盘直通记录的评论 (共 条)

分享到微博请遵守国家法律