PVE虛擬機(jī)核顯直通及返回宿主機(jī)顯示
時間:2023-06-25 15:18:01 | 來源:網(wǎng)站運(yùn)營
時間:2023-06-25 15:18:01 來源:網(wǎng)站運(yùn)營
PVE虛擬機(jī)核顯直通及返回宿主機(jī)顯示:本文是我的視頻《
PVE虛擬機(jī)核顯直通及返回宿主機(jī)顯示鉤子腳本》的文字說明版,如果有看不明白的地方,可以參照我視頻中的操作。
首先介紹一下我的PVE核顯直通方案能夠?qū)崿F(xiàn)怎樣的效果。
1. 可以正常驅(qū)動,對核顯驅(qū)動版本沒有特別需求,OpenCL使用正常。
2. 顯示器能輸出畫面和HDMI音頻,分辨率正常,可以顯示虛擬機(jī)開機(jī)畫面。
3. PVE開機(jī)能夠正常顯示,對于大多硬件配置還能在PVE上安裝KDE界面不受影響。
4. 虛擬機(jī)關(guān)機(jī)后直通的硬件返回到宿主機(jī),PVE恢復(fù)正常顯示輸出。
注:
本文操作在PVE7.2下沒有問題,選擇PVE7.1.8是有其他的原因。
硬件平臺及BIOS設(shè)置
本篇僅針對支持legacy啟動的intel核顯機(jī)器,建議intel 7~10代。
我們知道11代開始intel核顯只支持UEFI啟動,很多人說核顯不能直通了…其實(shí)不對,關(guān)于純UEFI啟動的核顯直通會有一些差別,這個以后再講。(目前我已經(jīng)在N5105工控機(jī)上實(shí)現(xiàn)了UEFI啟動核顯直通Windows虛擬機(jī),但還不太完善)
BIOS設(shè)置
首先確保VT-D是啟用的狀態(tài),然后要開啟CSM,PCI或Video等項(xiàng)目選擇legacy
主板BIOS中引導(dǎo)選項(xiàng),選擇對應(yīng)硬盤項(xiàng),不要選擇UEFI。
如果選擇UEFI,在安裝圖形界面后,直通核顯可能會出現(xiàn)Failed to mmap 0000:00:02.0 BAR 2. Performance may be slow 這樣的錯誤。
在安裝了獨(dú)顯的情況下,要直通核顯輸出請啟用“IGPU多監(jiān)視器”,并將主圖形適配器設(shè)置為“板載”
PVE直通設(shè)置
簡單說,就是只對IOMMU和Kernel Modules進(jìn)行基本的配置,不要屏蔽核顯和聲卡
修改/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
如果你之前添加了”video=efifb:off,vesafb:off”請刪除
運(yùn)行命令使grub修改生效
update-grub
modprobe設(shè)置
修改/etc/modules,添加以下內(nèi)容(非必需,虛擬機(jī)直通時會自動加載相關(guān)模塊)
vfiovfio_iommu_type1vfio_pcivfio_virqfd
看看你是否在黑名單中添加了下面的內(nèi)容
修改/etc/modprobe.d/pve-blacklist.conf,
刪除以下內(nèi)容某些硬件(比如J4125)需要添加以下內(nèi)容才能輸出正常分辨率和HDMI音頻,此類硬件可能不能實(shí)現(xiàn)本文完整效果。
blacklist i915blacklist snd_hda_intelblacklist snd_hda_codec_hdmi
如果您此前將核顯和聲卡ID添加到vfio,
請刪除/etc/modprobe.d/vfio.conf運(yùn)行命令刷新initramfs,使以上修改生效
update-initramfs -u -k all
Win虛擬機(jī)設(shè)置
重啟PVE之后新建Windows虛擬機(jī)
BIOS設(shè)置為默認(rèn)的“SeaBIOS”,顯示設(shè)置為“無”,機(jī)型設(shè)置為“i440fx”
直接通過web頁面添加核顯、聲卡等PCI設(shè)備
如果需要直通NVME固態(tài)硬盤,目前需要將pve-qemu-kvm降級至6.1.1-2(截止6.2.0-10較新版本均不可直通NVME)
apt updateapt install pve-qemu-kvm=6.1.1-2
虛擬機(jī)添加CD驅(qū)動器,掛載Windows系統(tǒng)安裝ISO鏡像
https://github.com/AveYo/MediaCreationTool.bat以及VirtIO驅(qū)動ISO鏡像
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/編輯/etc/pve/qemu-server/<VMID>.conf
在直通核顯一行后面添加“l(fā)egacy-igd=1”,如下所示
hostpci0: 0000:00:02.0,legacy-igd=1
J4125之類的硬件可能需要加載romfile,不然可能會有顯示器分辨率和HDMI音頻的問題。
這類需要romfile的機(jī)器,/sys/bus/pci/devices/0000:00:02.0/下并沒有rom,需要從主板bios中提取vbios
經(jīng)網(wǎng)友測試,即使硬件沒問題,
如果新安裝的PVE沒進(jìn)行過更新,/sys/bus/pci/devices/0000:00:02.0/rom也可能不存在,這時直通就會不成功。
請?jiān)诎惭bPVE后進(jìn)行必要的更新,重啟后再看,如果rom存在,那么大概率不需要romfile。
hostpci0: 0000:00:02.0,legacy-igd=1,romfile=vbios.bin
在首行添加以下內(nèi)容
args: -set device.hostpci0.x-igd-gms=1
啟動虛擬機(jī),即可在物理顯示器中使用鍵鼠安裝系統(tǒng)。
系統(tǒng)安裝完成后,打開掛載的VirtIO驅(qū)動盤安裝相關(guān)驅(qū)動,然后可以直接通過Windows更新自動安裝核顯驅(qū)動。
注意:驅(qū)動安裝完成后,請務(wù)必關(guān)閉系統(tǒng)休眠。
現(xiàn)在虛擬機(jī)核顯已經(jīng)可以正常使用了,OpenCL正常。
鉤子腳本設(shè)置
如果前面的操作沒有問題,可以增加鉤子腳本實(shí)現(xiàn)虛擬機(jī)關(guān)機(jī)后直通的硬件返回宿主機(jī)。
克隆我的相關(guān)代碼倉庫到/root目錄,
gitee和github二選一gitee:git clone https://gitee.com/hellozhing/pvevm-hooks.git
github:git clone https://github.com/HelloZhing/pvevm-hooks.git
添加可執(zhí)行權(quán)限
cd pvevm-hookschmod a+x *.sh *.pl
vm-start.sh和vm-stop.sh
在視頻中基礎(chǔ)上進(jìn)行過修改,會自動識別核顯ID和聲卡addr。
現(xiàn)在既可以適應(yīng)我上面的直通方面也能適應(yīng)q35(UPT)直通方案。
腳本中默認(rèn)沒有啟用USB直通返回,如需啟用,請取消vm-stop.sh中“echo $usb_addr…”兩行注釋。
復(fù)制perl腳本至snippets目錄
(mkdir報(bào)錯不用管,加上這一條是因?yàn)橹毖bPVE7.2沒有這個文件夾,而從之前版本升級到7.2會有)
mkdir /var/lib/vz/snippetscp hooks-igpupt.pl /var/lib/vz/snippets/hooks-igpupt.pl
將鉤子腳本應(yīng)用至虛擬機(jī)
qm set <VMID> --hookscript local:snippets/hooks-igpupt.pl
如果你想對鉤子腳本進(jìn)行其他修改,可參照我的腳本與PVE模板文件進(jìn)行對比 /usr/share/pve-docs/examples/guest-example-hookscript.pl
應(yīng)用鉤子腳本后即可實(shí)現(xiàn)虛擬機(jī)關(guān)機(jī)后返回到PVE宿主機(jī)的顯示。
PVE圖形界面相關(guān)
我們知道PVE是基于Debian的,所以可以像普通Debian一樣安裝圖形界面,在安裝圖形界面后需要做以下修改。
vfio-startup.sh和vfio-teardown.sh 默認(rèn)情況下不會被調(diào)用,但在PVE安裝圖形界面的情況下,就需要用到這兩個腳本。
取消vm-start.sh中(dirname0)/vfio-startup.sh該行注釋
取消vm-stop.sh中(dirname0)/vfio-teardown.sh該行注釋
感謝 @ledisthebest 提供的腳本vfio-startup.sh和vfio-teardown.sh
重要設(shè)置
PVE安裝圖形界面后與LXC會有沖突,導(dǎo)致啟動LXC時CPU占用過高
運(yùn)行以下命令停用udisks2服務(wù)可解決這一問題
systemctl mask udisks2.servicesystemctl stop udisks2.service
KDE桌面啟動虛擬機(jī)圖標(biāo)
輸入以下命令創(chuàng)建腳本并賦予可執(zhí)行權(quán)限
echo -e '#!/bin/bash/nqm start <VMID> &' > start_win.shchmod a+x start_win.sh
桌面新建“鏈接到應(yīng)用程序”,應(yīng)用程序命令中選擇創(chuàng)建的腳本,“高級選項(xiàng)”中“用戶”填寫“root”
雙擊圖標(biāo),輸入密碼即可啟動Windows虛擬機(jī)
PVE平臺基于legacy啟動的核顯直通基本就是這樣了,之后可以和大家聊聊怎么給PVE安裝KDE圖形界面,以及KDE界面下輸入法和瀏覽器視頻硬解等操作。
至于較新平臺UEFI啟動的核顯直通操作,11代及之后硬件和N5105之類的工控機(jī)需要基于UEFI做核顯直通,(其實(shí)10代及之前的硬件做UEFI核顯直通也有一個好處,就是能安裝黑蘋果)等我弄得比較清楚了再來和大家分享。