Proxmox PVE 無法啓動、如何關閉HDMI顯卡直通?

幾經辛苦設置的PVE中的WINDOWS顯卡直通,爲什麼要關閉?因爲我想不到連基本的apt upgrade都會導致整個PVE無法正常啓動(雖然早已聽說PVE升級多雷)。本文快速記錄我的排查記錄,事出突然幾乎是全文字討論,敬請原諒。

顯卡直通後的副作用

設置顯卡直通後,最大的副作用就是不能再用HDMI作爲CONSOLE去操作PVE HOST宿主本體。這導致一旦PVE在啓動過程中有問題,SSH連不了,WEB GUI上不了,你就像面對着黑盒子(就像有問題的路由器一樣)。本次我在PVE 8的版本中嘗試使用最新的WIFI 7網卡 (MT7925),沒有識別到,想更新 apt upgrade 看看,誰知更新完重啓 PVE就不能正常啓動了。

第一個想法就是如何關閉顯卡直通,“重奪” HDMI 作爲 PVE 的CONSOLE操作。

覆盤顯卡直通的步驟

重看一次自己寫的:IOMMU? VFIO? GPO? Proxmox PVE PCIE直通和核顯HDMI直通設置參數解釋 – by Upsangel,主要修改的邏輯步驟應該是如下:

  1. 修改 GRUB 啓動腳本環境參數
  2. 修改 MODULES 的加載參數(屏蔽直接加載顯卡驅動)
  3. 將顯卡驅動交給 PVE 的VM主機去加載

第一步適用於所有需要直通的設定,現在應該要還原HDMI顯卡直通應該從第二步開始。

臨時獲得一個CLI CONSOLE TERMINAL

由於 PVE 的 Rescue boot都無法啓動,唯有藉助外力,用PVE的安裝USB來啓動:

啓動後選擇 Advanced -> Install PVE (Terminal, Debug)

不要擔心會被重灌系統,我們只是藉助他做啓動。

進入文字界面後,輸入 exit,就能順利來到一個 shell 的命令行環境。

掛載原PVE系統

這一步獲得的是USB 啓動盤上啓動的系統,並不是宿主機上的PVE。我們先要加載原宿主機的PVE root 分區。默認的PVE安裝是用LVM的分區。透過 lvs 命令,我們得知PVE的root分區是在pve的VG(virtual group?),

所以加載方法是:

mkdir /mnt/root
mount /dev/pve/root /mnt/root

還原PVE系統直接加載顯卡驅動

在直通修改中,我們在 /etc/modprobe.d/pve-blacklist.conf 中加入了

blacklist i915
blacklist snd_hda_intel

因此我們首先把這兩句加 # 註釋掉。但重啓依然不行,因爲在原來的修改之中,執行了 update-initramfs -u

update-initramfs -u 是一個用於更新 initramfs 映像的命令。initramfs(initial RAM filesystem)是一個臨時文件系統,內核在啓動過程中使用它來加載必要的驅動程序和啓動腳本,以便掛載真正的根文件系統。這在系統啓動時非常重要,尤其是在根文件系統需要特定的驅動程序或模組才能被識別和掛載的情況下。

具體來說,update-initramfs -u 的作用如下:

  1. 更新現有的 initramfs 映像
  • -u 參數告訴 update-initramfs 去更新現有的 initramfs 映像,而不是創建一個新的。這樣做的好處是可以確保現有的內核配置和模組保持最新,並且包含了最近的系統變更(例如新安裝的驅動程序或模組)。
  1. 自動檢測內核版本
  • 當你使用 -u 參數時,update-initramfs 會自動檢測並更新當前正在運行的內核版本的 initramfs 映像。這樣可以避免手動指定內核版本,降低操作的複雜性和出錯的可能性。
  1. 確保系統正常啓動
  • 更新 initramfs 可以確保系統在下一次啓動時能夠加載最新的驅動程序和模組,避免由於缺少關鍵驅動程序而導致的啓動失敗。

簡而言之,update-initramfs -u 是用來更新系統當前內核所需的 initramfs 映像,確保系統能夠正常啓動並加載所有必要的驅動程序和模組。這在進行內核升級、驅動程序安裝或其他影響 initramfs 的操作後特別有用。

如何不啓動進入一個宿主PVE系統,進行update-initramfs ? 借用 chroot 方法:

mount --bind /dev /mnt/root/dev
mount --bind /proc /mnt/root/proc
mount --bind /sys /mnt/root/sys
chroot /mnt/root
update-initramfs -u
exit
reboot

重啓後,果然就能看到命令行界面了!

事實上PVE的官方文檔也有提及到 bind mount 和 chroot 的救援方法:Recover From Grub Failure – Proxmox VE

mount --bind

mount --bind 是一個特殊的掛載選項,用於將一個已經掛載的目錄或文件系統重新掛載到另一個目錄。這個過程中的原目錄和目標目錄實際上是指向同一個文件系統內容的不同視圖。這在設置 chroot 環境時非常有用。

chroot

chroot 是一個用於改變當前進程根目錄的命令。當一個進程被 chroot 到一個新的根目錄時,它和它的子進程就無法訪問新的根目錄之外的文件系統。這個特性可以用來創建一個隔離的測試或恢復環境。

至此,HDMI直通已經被還原。但是,由於 apt upgrade 產生的無法啓動依然未解決。下文繼續分享如何恢復PVE的系統: 記一次修復PROXMOX PVE 升級後無法啓動的解決方法 – by Upsangel

歡迎你的留言討論:

你可以一針見血

by Upsangel
Logo