如何在設定 dnodesize = auto 後啟動 ZFS 根檔案系統(使 grub 無法讀取磁碟)

如何在設定 dnodesize = auto 後啟動 ZFS 根檔案系統(使 grub 無法讀取磁碟)

我在具有 6 個磁碟的伺服器中的 ZFS 之上安裝了 proxmox(我認為是 v5.4)。有 2 個池:兩個 SSD 鏡像中的 rpool,具有 proxmox 根檔案系統以及一些容器和 zvol。其他 4 個磁碟位於 raidz-1 中的另一個池 (HDD) 中。

兩個月前,我在 ZFS 參數中做了一些優化工作,並dnodesize = auto在所有池中激活,包括 rpool 池和子池。現在我已經重新啟動了伺服器,並顯示以下訊息:

error: no such device: 40d7d14f38cc...
error: unknown filesystem
Entering rescue mode...
grub rescue>

根據我所做的研究,我認為這與參數有關dnodesize(檢查這裡,這裡這裡)。直接引用第一個連結:

某些檔案必須觸發資料集中的非舊版(512 位元組)dnode 大小,這表示 GRUB 無法再讀取磁碟機。

現在我對從哪裡開始有一些想法,但也有很多疑問(我不是一個經驗豐富的管理員),所以我想在進入死胡同和/或明確破壞某些東西之前先問你。

首先,我可以建立一個具有支援 ZFS 的作業系統的即時 USB。也許最好的選擇是使用相同的 5.4 proxmox ISO。一旦到達那裡,是否可以從實時 USB 加載和操作舊的 proxmox 池?如何?

問題是這還不夠設置,dnodesize = legacy因為更改不會追溯應用程式。所以我不知道具體如何進行這裡。我的選擇如下:

  1. 如果有辦法偵測哪些檔案超出了 512 位元組的標準 dnode 限制。然後將它們剪切/移動到另一個位置,然後貼上/移動回來。問題來了,如何檢測這些文件?
  2. 將所有 rpool 內容剪下到外部磁碟,然後再次將其貼到 rpool 中。這裡的問題是,我覺得向前和向後移動 proxmox 根檔案系統並期望它再次工作並不安全。也許與cp -a
  3. 看來grub唯一需要讀取的內容就是/boot裡面的內容。但 /boot 資料夾位於 rpool 池內,且 zfs 池不可縮小。因此,我無法縮小任何目前池來建立新的啟動池,也無法向伺服器新增任何額外的磁碟。唯一的選擇是將 /boot 移動到筆式驅動器並告訴 grub 在那裡搜索。但這似乎不是非常穩健或明確的解決方案。

有什麼建議嗎?

編輯:將 grub2 替換為對 zfs 更友善的引導程式怎麼樣?來自 proxmox 維基:

systemd-boot 是一個輕量級的 EFI 開機載入程式。它直接從安裝它的 EFI 服務分割區 (ESP) 讀取核心和 initrd 映像。直接從 ESP 載入核心的主要優點是不需要重新實作存取儲存的驅動程式。在 ZFS 作為根檔案系統的上下文中,這表示您可以使用根池上的所有可選功能,而不是 grub 中 ZFS 實作中也存在的子集,或者必須建立單獨的小型引導池。

事實上看起來:

Proxmox VE 目前使用兩個引導程式之一,具體取決於安裝程式中選擇的磁碟設定。對於使用 ZFS 作為根檔案系統安裝的 EFI 系統,使用 systemd-boot。所有其他部署都使用標準 grub 引導程式。

所以我不知道為什麼它是用grub安裝的而不是systemd-boot。在不破壞任何東西的情況下更換引導程式是否可行?

感謝您的幫助。

相關內容