PVE 8.2 RTX 5090 GPU Passthrough (顯卡通透)

PVE 8 加上GPU Passthrough(顯卡通透)可能是5090或主機板太新,一直卡關,因此我有必要紀錄一下如何攻克。

話說我前幾天終於說服公司購買好一點的顯示卡,因為什麼PCI-E 16倍是什麼鬼我都不懂,於是快馬加鞭衝去原價屋找專業店家買主機,先說要買頂規的5090,店家就自動會展開相關配置了,而且額外不收費。

主機板:Z890 Aorus master 
CPU:Inten Core ultra 9 285K
記憶體:256GB
M.2.: 1T
顯卡:ASUS ROG ASTRAL RTX 5090 32G 水冷
power:1300 瓦

收到貨之後,想說主機這麼好,應該要安裝pve多工使用;但之前一直沒試過顯卡通透功能,爬文得知

  1. 主機板要打開vt-d (iommu),以及sr-iov功能
  2. pve 修改支援PCI passthrough,開通vfio-pci功能
    請參考官網作法,顯卡做通透之後,就不能讓pve主機使用(只能用在虛擬主機)。
    PCI passthrough 允許您在虛擬機 (VM) 內使用實體 PCI 裝置 (顯示卡、網際網路卡),但此功能僅限於 KVM 虛擬化環境。如果您對某裝置執行「PCI passthrough」,該裝置將不再可供主機使用。請注意,已通過 PCI passthrough 的虛擬機無法進行遷移。

實際上我安裝pve 8.4.1的時候照著設定,一直不行,後來想說是不是版本太新,因此改用8.3.1也不行,後來再改成8.2.2也不行,我總共測試了這些做法:

  1. Avic.blog
  2. Zen’s blog
  3. ithome的william mou

文章都說只要開通vfio-pci以及iommu就可以了,我照做也開通成功。

lspci -nnk

dmesg | grep -e DMAR -e IOMMU

但實際上新增vm一直無法出現開機bios畫面,一看就知道通透失敗。

甚至我都扒出有些設定新版pve 8 棄用,也改用新的設定 initcall_blacklist=sysfb_init,但一樣GG。

我後來繼續拿8.2.2來測試其他作法(不想再重灌8.4.1),無意間在這裡發現新大陸,裡面提到一個設定要加上去

我測試了也還是失敗,就在此時我突然如到電影盜夢空間(全面啟動)情節,不自覺自己下了一個指令 modinfo -p vfio-pci,系統居然多嘴跟我說還有其他設定要加上企

我把這些設定都加到 /etc/modprobe.d/vfio.conf 裡面( 加完記得要 update-initramfs -u -k all )。

disable_denylist=1 disable_idle_d3=1 enable_sriov=1

再重開vm就成功進入開機畫面了,vm 安裝完ubuntu 24.04,還要安裝 nvidia 驅動測試是否能通透。

我參考了這兩篇

https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/index.html#ubuntu-installation

https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#common-installation-instructions-for-ubuntu

安裝完畢,執行 nvidia-smi,看到心愛的 5090 就安心了。

最後安裝docker(須重開docker),我參考張騰元文章

docker安裝完畢,我讓docker也能使用 nvidia ,請參考 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

終極目標:安裝 ollama ,讓大語言模型使用顯卡

docker run -d –gpus=all -v ollama:/root/.ollama -p 11434:11434 –name ollama ollama/ollama

至此大功告成。

RockyLinux 9 /etc/fstab 掛載新的磁碟

以前掛載新的磁碟或分區(partition),只要確認磁碟在哪就可以直接掛載上去。

例如新的磁碟在/dev/sdb1 ,就可以直接寫在fstab,執行systemctl daemon-reload,重開機就能直接掛載辛的磁碟機。

/dev/sdb1  /docker   xfs   defaults   1 1

沒想到我這次栽了跟斗,RL9重開機後系統直接掛掉,原來是新磁碟機從sdb變成sda,而原本開機的sda變成sdb;我更正後重開機,又亂變代號,此時系統正式掛掉,只能重新安裝。

我後來才發現,fstab早就改成UUID的掛載方式,讓UUID自動綁定磁碟代號,以往我沒遇到問題,直到用了RL9,甚至AlmaLinux也是一樣狀況。

輸入 ls -al /dev/disk/by-uuid 可以查看磁碟對應的UUID

docker上的nextcloud 為何要移轉到新的vm上?

為何要移轉到新的虛擬主機上? 因為原本虛擬主機已經是EOL了,若nextcloud升級,會面臨資料庫版本不符、docker版本過舊問題;需要另外安裝新虛擬主機、安裝新docker,升級資料庫版本,才能解決nextcloud無法升級問題。

作法如下:

  1. 使用mysqldump 將nextcloud資料匯出,並匯入到新的vm上的資料庫
  2. 將 volume 資料匯出,新docker建立相對應的volume後,再將匯出的資料丟進volume裡面
  3. docker 拉取nextcloud原本images後,重新啟動nextcloud容器
  4. 確認啟動成功後,才能進行nextcloud升級

安裝pve zfs 如何讓zfs能夠上傳iso檔案以及備份vm

我上一篇文章 「很神奇的電腦公司,能配合安裝esxi、proxmox ve(pve) 」最後終於做好三顆硬碟zfs系統,也依照「 PVE 6 zfs 檢查硬碟狀況並且發通知 」設定好自動檢查程序,但此時我發現這台新主機並沒有地方可以放 ISO檔案以及備份存放區。(OS碟例外)

我希望此ZFS還能當作ISO檔案上載以及備份存放區,改如何做呢?

1、執行zpool list查看初始zfs名稱

root@host:~# zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
RAIDZ  5.45T  1.59M  5.45T        -         -     0%     0%  1.00x    ONLINE  -
root@host:~#

2、在初始ZFS目錄底下,建立子zfs

#先前執行zpool list得到zfs名稱為RAIDZ,此時我們在RAIDZ底下再新增名為 ISO 子zfs,
#但此時還不能使用。(需以Directory方式掛載)
zfs create RAIDZ/ISO

3、回到pve web網址,在Datacenter新增Directory,並且將ISO子zfs掛載起來

  --

設定完畢,系統將會掛載起來。

大功告成,此時不只能放image與container,還多個RAIDZ-ISO能放ISO檔案與備份檔案惹。

很神奇的電腦公司,能配合安裝esxi、proxmox ve(pve)

有一次要幫朋友的朋友弄一組新電腦,配置為pve 8(SSD)+3顆2T HDD,3顆HDD我打算做RAIDZ,沒想到他們配合的廠商能代為安裝pve 8且不額外收費 ,這樣我就能省去遠端教他們一步一步製作、安裝pve 8。

過了幾天,主機送來了,果真安裝好pve 8 , 我遠端連線過去一台筆電,再連線設定該台pve主機,沒想到要劃分zfs時候,卻發現電腦廠商已經很好心把3顆hdd主動用主機板內建的磁碟陣列功能設定成raid 5,這樣反而造成我的困擾,pve系統提示已有硬體raid(isw_raid_member),無法做zfs

好險後來發現,pve重新wipe 那三顆hdd,電腦重開機之後,isw_raid_member(硬體raid5) 就自動不見了,真是幸運,否則還要跑去朋友的朋友那邊「遠得不要不要公司」處理,實在勞民傷財。


PVE 6 zfs 檢查硬碟狀況並且發通知

zfs很強,pve也支援,但很多要手動調整,例如zfs的快取。直到現在我才發現,pve設定好zfs,若硬碟壞了,是不會主動通知的,甚至使用pve介面查詢,一樣發現不了硬碟壞了,我真的有點驚訝到,或許其他系統如FreeNAS也是如此。

查詢zfs狀態

PVE設定好zfs之後,請定期執行zfs檢查

#zpool scrub <zfs名稱>
#例如我在pve使用3顆1T硬碟,作成zfs,名稱取為Z1
#我就可以輸入以下指令,進行背景檢查
zpool scrub Z1
#若不想背景檢查,則改成
zpool scrub -S Z1

當執行完 zpool scrub指令後,可以再下zpool status -v ,此時會出現 scrub in progress(正在執行中)字樣

最後發現一顆硬碟壞了

此時使用pve gui介面,才會出現錯誤訊息

設定zfs 設定檔案,使其能正確發送email

vi /etc/zfs/zed.d/zed.rc
######################################################3
#請修改紅色部分
ZED_EMAIL_ADDR="it@test.com"
ZED_NOTIFY_INTERVAL_SECS=3600

#若為1則任何zfs動作一律發email,懶得測試0,反正email多收比少收好 
ZED_NOTIFY_VERBOSE=1 
######################################################3

設定crontab並且測試

收到email了,但硬碟壞一顆,不開心

其他指令

#若更換硬碟後,需要resilver
zpool resilver <zpool名稱>

MaxMind 免費提供ip所在國家資訊

以資安角度, 24小時網路提供的服務, 風險極高. 若確認只在特定國家使用, 就可以使用MaxMind提供ip所在國家資訊, 限制其他國家ip連線,避免不必要的麻煩.

最近想用軟體防火牆來取代公司老舊的硬體防火牆, 我考察很久捨棄PFsense, 改用OPNsense. OPNSense提供簡單MaxMind整合, 可以讓我們進行ip國家使用限制, 非常方便.

我們得先到 https://www.maxmind.com/en/geolite2/signup 註冊帳號,

註冊完畢登入網站, 接下來產生license key
https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en

產生完license key之後, 就可以下載ip國家資料, 可以參考一下OPNsense提供的方式

https://docs.opnsense.org/manual/how-tos/maxmind_geo_ip.html

防火牆就可以自己定義國別, 進行限制工作

1 2 3 4