2022款幻15折騰Linux KVM虛擬機(jī)+顯卡穿透+硬盤直通記錄
人在家里閑的久了總會(huì)多少憋出點(diǎn)毛病來,不找事來做總覺得渾身難受。所以最近一段時(shí)間我都在Windows和Linux間反復(fù)橫跳(指Linux搞炸了又回到Windows下用幾天,然后再回過頭來裝Linux),閑得蛋疼了屬于是。
但是這一周折騰Linux的過程卻異常的順利,基本沒出什么致命的錯(cuò)誤。于是就一步步走到KVM+顯卡直通這一步了。
讀前提示+免責(zé)聲明:注意標(biāo)題,這只是個(gè)人記錄,并非教程。本文只是如實(shí)記錄了這一周下來我在Linux上安裝各種軟件+KVM的操作過程。(作為一個(gè)存檔)并非真正教程。很多軟件包的安裝也只是針對(duì)幻15這個(gè)型號(hào)。
本人只是Linux入門新手,大部分操作都基于官方wiki+小部分個(gè)人摸索,如有錯(cuò)誤還請(qǐng)多多指出,在評(píng)論區(qū)交流。定備份好重要數(shù)據(jù)。由于Linux更新快,操作內(nèi)容請(qǐng)以wiki為準(zhǔn)。
目錄:
1.開頭
2.發(fā)行版選擇
3.安裝系統(tǒng)+設(shè)置
4.奧創(chuàng)中心的替代品
5.KVM + 顯卡直通 + 硬盤直通
6.隨時(shí)間更新的補(bǔ)充項(xiàng)
開頭
先說一下機(jī)器配置
CPU:6800HS
顯卡:3060 Laptop
硬盤:西數(shù) 512G+三星 1TB(虛擬機(jī)直通單塊硬盤需要)
內(nèi)存:40G(開虛擬機(jī)大內(nèi)存是剛需)
網(wǎng)卡:MT7922 無線網(wǎng)卡
發(fā)行版選擇
得益于前幾次踩過的坑,直接選擇了基于Arch的Manjaro + KDE(因?yàn)閼校遗翧rch配置的時(shí)候搞出什么岔子來)。Manjaro對(duì)于我來說到目前為止都很穩(wěn)定,KVM配置也很順利。Manjaro直接安裝在三星的硬盤上,西數(shù)的后面用來做直通硬盤給虛擬機(jī)。
安裝系統(tǒng)+設(shè)置
安裝前先在windows下將顯卡模式切換成混合模式,獨(dú)顯直連安裝會(huì)引發(fā)很多后續(xù)問題。啟動(dòng)項(xiàng)選擇開源驅(qū)動(dòng),自帶的閉源驅(qū)動(dòng)會(huì)出問題。
(另外記得插好網(wǎng)線,默認(rèn)下無線網(wǎng)卡是暫時(shí)用不了的)
安裝進(jìn)入系統(tǒng)后第一件事情:更新軟件+更新內(nèi)核
可能你看到這篇文章的時(shí)候Manjaro官方的安裝鏡像已經(jīng)更新了。但是我就因?yàn)榘惭b后沒有立即更新系統(tǒng),就遇到了安裝瀏覽器導(dǎo)致glibc損壞的問題,不過還好進(jìn)命令行模式救回來了。更新完記得重啟。
另外在幻15要使用5.17以上的內(nèi)核(后面的優(yōu)化軟件會(huì)用到),我這里直接更新到5.19內(nèi)核。

重啟,然后安裝專有顯卡驅(qū)動(dòng):

之后再次重啟電腦。
(注:有時(shí)候會(huì)遇到卡在重啟界面比較久的情況,耐心等一下就行了)
其他的軟件就不用多說了,這里主要是針對(duì)這臺(tái)電腦做出的一些特定軟件安裝。
補(bǔ)充:要安裝base-devel包來準(zhǔn)備好基礎(chǔ)環(huán)境,后面很多地方會(huì)用到。
無線網(wǎng)卡問題:mt7922的網(wǎng)卡驅(qū)動(dòng)實(shí)際上已經(jīng)被合并到5.18以及更新的內(nèi)核里了,但是manjaro下還缺少控制它的工具。所以:
我把這兩個(gè)工具一裝上,就能在右下角看到WiFi了

(注意:該型號(hào)的網(wǎng)卡的藍(lán)牙目前還是無解的狀態(tài))
音響問題:如果不用外接聲卡或者音響的話,你會(huì)發(fā)現(xiàn)默認(rèn)狀態(tài)下音量調(diào)節(jié)只能調(diào)節(jié)高音喇叭。
原因出在系統(tǒng)默認(rèn)配置下,只能控制其中兩個(gè)喇叭,按照這篇教程就能解決問題:https://wiki.archlinux.org/title/ASUS_Zenbook_UX431
打開HDAJackretask

按照?qǐng)D里面的方法設(shè)置,點(diǎn)擊Install boot override,然后重啟。如果還不解決的話就把兩個(gè)設(shè)置換過來(即Back和LFE互換)
到目前為止,硬件已經(jīng)差不多安頓完了,想要人臉識(shí)別的可以安裝Howdy,在這里就不詳細(xì)的陳述了。接下來才是比較重要的部分
4.奧創(chuàng)中心的替代品
在Windows上有奧創(chuàng)中心可以設(shè)置電腦的鍵盤燈,電腦模式,風(fēng)扇曲線,切換顯卡等。那么在Linux下也有相對(duì)應(yīng)的替代品:asusctl和supergfxctl(兩者是同一個(gè)項(xiàng)目)
注意,asusctl對(duì)于幻15的支持還稍微欠缺,主要是自定義風(fēng)扇曲線無法使用。
另外,在linux下,AMD CPU的筆記本電腦還不支持英偉達(dá)顯卡的功率增強(qiáng),意味著這臺(tái)電腦的顯卡最高只能跑在80瓦的功率。但是個(gè)人認(rèn)為并無大礙,因?yàn)锽IOS缺陷,導(dǎo)致這臺(tái)機(jī)器的顯卡增強(qiáng)模式還不如普通模式,具體情況可以看我前兩篇文章。
asus-linux項(xiàng)目官網(wǎng):https://asus-linux.org/(有問題可以先看官網(wǎng)FAQ)
asusctl和supergfx:https://gitlab.com/asus-linux
安裝:
以下所有的命令都源于官方的readme,請(qǐng)以隨時(shí)查看并官方的命令為準(zhǔn)。
這時(shí)候在終端輸入asusctl應(yīng)該能得到以下輸出

另外這個(gè)工具自帶了一個(gè)GUI,應(yīng)該能在設(shè)置選項(xiàng)卡里面找到

到現(xiàn)在還差顯卡切換的功能沒有實(shí)現(xiàn)了,所以下一步就是安裝supergfxctl。其實(shí)和上面的安裝過程沒什么區(qū)別
然后重啟,使其生效。重啟后在終端輸入supergfxctl應(yīng)該能看到輸出

supergfxctl也有GUI可以選,官方的是GENOME桌面擴(kuò)展,然后有大神自制了KDE桌面的版本:https://gitlab.com/Jhyub/supergfxctl-plasmoid。
另外如果你是用的是Arch系,可以直接通過AUR來進(jìn)行安裝

效果圖是作者本人的截圖,我就不安裝了,因?yàn)轱@卡切換的場(chǎng)景用的比較少。
另外根據(jù)supergfx的readme描述,有兩種切換模式可以選,一種是無需重啟,另一種需要重啟。具體的設(shè)置方法是編輯GRUB啟動(dòng)命令。

當(dāng)后面的值為1時(shí),切換顯卡需要重啟。后面的值為0時(shí),只需要注銷系統(tǒng)再登錄即可。我這里改成1 ,readme中也沒有說明1和0會(huì)對(duì)系統(tǒng)別的部分產(chǎn)生什么影響,我自己兩個(gè)都設(shè)置了一遍也沒發(fā)現(xiàn)什么區(qū)別。所以.......我自己也是被蒙在鼓里。
(谷歌了一下,發(fā)現(xiàn)大家說法各不相同。不過要記住這篇文章只是我在幻15上折騰的一個(gè)記錄,很多操作我只能保證對(duì)這臺(tái)電腦起作用。所以就沒必要糾結(jié)那么多)
無論如何,修改完成之后,重新生成GRUB后重啟(每個(gè)發(fā)行版的指令不同)
到現(xiàn)在,整臺(tái)電腦的使用體檢基本上已經(jīng)到位了。接下來就是難點(diǎn):KVM+顯卡直通虛擬機(jī)
5.KVM + 顯卡直通 + 硬盤直通
先聲明:我對(duì)KVM的理解程度是“專業(yè)級(jí)別的一竅不通”,都是按照各種readme和wiki進(jìn)行的(所以請(qǐng)隨時(shí)參照wiki)。有些操作和命令到底管不管用?我也不懂,但是到最后就是能用(笑)。不過再次:文章只是記錄,不是教程。
前置準(zhǔn)備:第二臺(tái)顯示器,外接一套鍵盤鼠標(biāo)。因?yàn)榈綍r(shí)候這兩者都是虛擬機(jī)獨(dú)占的。
既然我對(duì)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
從上到下流程走一遍之后,應(yīng)該就能在看到虛擬機(jī)管理器了:

在安裝完成之后,可以先試著新建并啟動(dòng)一個(gè)虛擬機(jī),遇到什么錯(cuò)誤的話Google一下。
顯卡直通 + 硬盤直通:
先上wiki鏈接:https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF,下面所有操作都是根據(jù)官方wiki來的。
第一步:設(shè)置顯卡模式(supergfx的readme文件提及的操作)
前面已經(jīng)安裝好了supergfxctl,那么就要先將獨(dú)立顯卡調(diào)整到“計(jì)算”模式,確保等下隔離顯卡時(shí)不會(huì)出現(xiàn)問題。
(注:本步驟的“有用性”存疑,需要進(jìn)一步驗(yàn)證。具體原因后面會(huì)寫到)
第二步:開啟IOMMU支持
再次編輯GRUB文件(方法和上面相同,編輯完成后記得重新生成GRUB,重啟)


(注:在寫這篇文章的時(shí)候,上面這行命令對(duì)我失效了,沒有顯示IOMMU啟用,但是在下面的IOMMU分組操作中,IOMMU已經(jīng)被事實(shí)上的啟用了)
第三步:檢查IOMMU分組情況
全部復(fù)制粘貼到終端中,回車運(yùn)行。如果IOMMU被啟用了應(yīng)該能得到以下輸出。

注意IOMMU Group,獨(dú)立顯卡顯卡有兩個(gè)設(shè)備,都在Group 15,而需要直通的硬盤在Group 20.一定要注意該設(shè)備是否獨(dú)占了一個(gè)組,只有這樣才能確保直通成功。
在這臺(tái)筆記本上還不錯(cuò),IOMMU分配符合預(yù)期。那么就把這幾行信息完整的復(fù)制下來(原因是需要末尾的那一串ID)
第四步:開始直通設(shè)備
(注:下面這些步驟相對(duì)官方wiki有改動(dòng),但是會(huì)更加方便一些)
wiki上是通過加載模塊的形式來完成直通,但是我在教程視頻里找到了通過GRUB命令來隔離PCI設(shè)備的方法。從命令上來說,兩者命令其實(shí)并無差別(但是前者會(huì)更加安全一些?)再次,再次打開GRUB文件。

把剛才得到的設(shè)備ID填入,保存并重新生成GRUB文件,但不要重啟,還有一步。
(這里的開機(jī)命令是按序執(zhí)行的,按理說應(yīng)該是“設(shè)置顯卡模式,開啟IOMMU,隔離設(shè)備”,但是設(shè)備最終都會(huì)被隔離出來,那么前面的設(shè)置顯卡模式意義真的存在嗎?希望有人來解答一下)
除此之外還需要加上一層保險(xiǎn),確保隔離是成功的

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

保存退出,重新生成配置信息
到現(xiàn)在為止,設(shè)備隔離應(yīng)該就已經(jīng)完成了,重啟檢驗(yàn)一下效果。如果不出什么問題的話,現(xiàn)在應(yīng)該已經(jīng)變成了AMD的顯卡,而且在磁盤管理中也看不到另一塊硬盤的影子了


第五步:為開啟虛擬機(jī)做好準(zhǔn)備
外接好顯示器到幻15的HDMI口上(C口輸出還沒測(cè)試),接好鼠標(biāo)鍵盤,準(zhǔn)備好windows鏡像(注:如果安裝win11的話,還需要安裝一個(gè)軟件TPM模塊,Google教程有)

按照提示創(chuàng)建好虛擬機(jī),中間的步驟要注意:1.虛擬硬盤不用創(chuàng)建,因?yàn)槭侵蓖╪vme硬盤。2.最后一步勾上“安裝前自定義”
啟動(dòng)固件

固件有好幾種,大部分情況下都是選擇OVMF_CODE,如果要安裝win11的話,要選擇帶“secure”標(biāo)識(shí)的支持安全啟動(dòng)的固件。
CPU設(shè)置

在這里把套接字(Socket)設(shè)置成1,然后設(shè)置核心數(shù),每個(gè)核心的線程數(shù)。
這里如果忘記改的話,舉個(gè)例子:我在創(chuàng)建向?qū)Ю锩嬖O(shè)置了12線程,但是他默認(rèn)的結(jié)構(gòu)是“12個(gè)插槽,插了12個(gè)單核的CPU”,然后windows又不支持那么多CPU,導(dǎo)致進(jìn)系統(tǒng)一看只有兩個(gè)線程還死慢。
另外由于I和A家的CPU線程分布各有不同,想要獲得最高性能有可能需要手動(dòng)將線程與核心綁定,但是在這里AMD的默認(rèn)分布性能已經(jīng)足夠好了,就不折騰那么多。
關(guān)于CPU拓補(bǔ)結(jié)構(gòu),在wiki的PCI-Passthrough教程文章下面有詳細(xì)介紹。
PCI和USB設(shè)備
努力了這么久就是為了這一刻。點(diǎn)擊左下角添加硬件,添加PCI主機(jī)設(shè)備。分別添加顯卡和硬盤(特別是注意顯卡要穿透兩個(gè))



然后就是USB鍵盤鼠標(biāo)。在終端下面
然后通過拔插設(shè)備來判斷對(duì)應(yīng)的USB設(shè)備(在這里就是外接的USB鍵盤鼠標(biāo)),加進(jìn)虛擬機(jī)


另外還有一個(gè)設(shè)置,關(guān)掉內(nèi)置的虛擬顯卡。

不選None的話,到時(shí)候Host也會(huì)顯示畫面,外接顯示器也會(huì)顯示畫面,然后你的鼠標(biāo)還沒辦法在兩個(gè)屏幕直接橫穿。
引導(dǎo)項(xiàng):
這里可以等下再設(shè)置,不算大問題,但是提前設(shè)置就方便一些

上面的SATA設(shè)備是我們的系統(tǒng)安裝鏡像,等到系統(tǒng)安裝完成以后可以取消引導(dǎo)或者刪除他。然后下面的就是我們的nvme硬盤。
TPM:對(duì)win11有效,在添加硬件一欄可添加一個(gè)軟件TPM模塊(前面安裝過了的話)
開機(jī)
接上顯示器(激動(dòng)的心顫抖的手,期待奇跡的發(fā)生)開啟虛擬機(jī)
如果一切都沒問題的話,第二個(gè)顯示器應(yīng)該就會(huì)有輸出,并提示按下任意鍵進(jìn)行CD/DVD引導(dǎo)。接下來就和正常安裝windows沒啥區(qū)別了。
另外這個(gè)時(shí)候,你外接的USB鍵鼠就應(yīng)該是被虛擬機(jī)獨(dú)占的狀態(tài)。


性能實(shí)測(cè)
既然都是直通運(yùn)行,那么性能自然不會(huì)很差了,這里就不做太多測(cè)試。
但是可以安裝VirtIO驅(qū)動(dòng)來提高網(wǎng)卡的性能

補(bǔ)充:如果想把顯卡換回給Linux?hmmmmm,這個(gè)我沒想過。不過按照道理,應(yīng)該把GRUB和mkinitcpio里的改動(dòng)刪掉,然后重新生成就好了。
6.隨時(shí)間補(bǔ)充的部分
2022年8月14號(hào):
不懂為什么莫名其妙把linux的電池電量顯示搞崩了,可能是因?yàn)閮?nèi)核讀取到了錯(cuò)誤的電池信息,無論何時(shí)都顯示“已連接電源但功率不足”。解決方法:直接把內(nèi)核降級(jí)到5.18后恢復(fù)正常,另外其他功能未損壞。
把顯卡換回到linux下,實(shí)際上只用把GRUB里面顯卡的id給刪掉就好了,mkinitcpio不用動(dòng)也行,我就把GRUB的設(shè)置復(fù)制兩行,需要的時(shí)候注釋掉其中一行再生成GRUB就行。
2022年8月21號(hào):
還是花點(diǎn)錢換掉了聯(lián)發(fā)科的網(wǎng)卡,換成AX210。結(jié)果相當(dāng)Amazing啊,使用體驗(yàn)直線上升。
說來也沒啥毛病,畢竟iwd原本就是intel的(逃)
對(duì)了,KVM直通以后可以考慮用HDMI欺騙器+Looking Glass的方案來實(shí)現(xiàn)一個(gè)顯示屏使用。
另外Looking Glass支持鍵鼠、文字剪切板在虛擬和實(shí)體機(jī)中無縫切換。這樣就可以不用單獨(dú)直通USB鍵鼠了。
感謝閱讀,有什么問題或者錯(cuò)誤可以在評(píng)論區(qū)提出來。以上的操作僅保證在本人的的硬件和軟件條件下生效。
2022年9月22號(hào):
Linux5.19.9內(nèi)核添加了電池電量顯示bug的修復(fù)。