無分區 Btrfs 突然啟動以進行 GRUB 救援

無分區 Btrfs 突然啟動以進行 GRUB 救援

問題

我有一台從八磁碟 Btrfs RAID10 磁碟區啟動到 Arch Linux 的機器。最近,我重新啟動並出現以下 GRUB 救援提示:

歡迎使用 GRUB!錯誤:沒有這樣的設備:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。錯誤:未知的檔案系統。進入救援模式... grub rescue> ls (hd0) (hd1) (hd2) (hd3) (hd4) (hd5) grub rescue> ls (hd5) (hd5): 檔案系統未知。 grub救援> ls (hd4) (hd4):檔案系統未知。 grub救援> insmod btrfs grub救援> ls (hd0) (hd0):檔案系統未知。幼蟲救援>

我不確定到底是什麼觸發了這個。自上次啟動以來,我pacman -Syu至少安裝了兩次更新 ( ),並且可能對系統進行了其他更改,包括重新安裝 GRUB。如果我新增專用啟動盤就可以啟動系統。

理論

在與 #archlinux IRC 頻道的一位樂於助人的成員進行故障排除時,我遇到了Arch wiki 上的這個註釋

分區偏移量

當您嘗試將 core.img 嵌入分割區磁碟時,可能會發生偏移問題。這意味著可以直接將grub的core.img嵌入到無分割磁碟(例如/dev/sdX)上的Btrfs池中。 GRUB 可以引導 Btrfs 分割區,但該模組可能比其他檔案系統大。 grub-install 產生的 core.img 檔案可能無法放入 MBR 和第一個分割區之間的磁碟機前 63 個磁區 (31.5KiB)。最新的分割工具(例如 fdisk 和 gdisk)透過將第一個分割區偏移約 1MiB 或 2MiB 來避免此問題。

這似乎表明將 GRUB 安裝到分割區上可能會出現問題無分割磁碟,較新的分割工具透過在磁碟開頭留出額外的空間來緩解(目前)這種情況。

GRUB wiki 頁面更直接

安裝到分割區或無分割磁碟

警告:GRUB強烈勸阻像 GRUB Legacy 或 Syslinux 一樣安裝到分割區開機磁區或無分割區磁碟。此設定很容易損壞,尤其是在更新期間,並且不支援由 Arch 開發者提供。

好吧,廢話。

無論如何,grub-install -v在其輸出中包含這一行:

grub-install: info: the total module size is 0xa07c.

這大約是 41K,遠遠超過了上面提到的 31.5KiB 限制,但我對 GRUB 的了解還不夠深,無法確定這就是我遇到麻煩的原因。

問題

  1. 如果這問題是,我怎麼證明它——grub-install如果是的話,為什麼不大聲失敗呢?

  2. 今後格式化可啟動 Btrfs 磁碟的正確方法是什麼?主引導記錄?通用技術? — 專用啟動盤很誘人,但我喜歡在卷中的每個設備上都有一個冗餘引導程式。

  3. 有沒有比擦除並運行btrfs replace每個磁碟更好的方法將每個磁碟遷移到分割表?

答案1

過去,使用 fdisk 建立 MBR 分割區表時,預設會保持前 63 個磁區不變。這是可以安裝 GRUB 和其他引導程式的地方。

快轉到現代,同樣的工具(fdisk)留下了更多未使用的空間;足以讓 GRUB2 安裝具有 BTRFS 支援的 stage1。我相信預設偏移量約為 1MB;無論這在行業中意味著什麼。

我不知道為什麼grub-install沒有失敗,但我想它不會檢查引導扇區大小;沒有分區怎麼可能。

我不認為擁有冗餘引導程式有什麼問題。您必須手動管理它,但 GRUB2 的 stage1 不會經常更改。但這意味著您需要分區。

我不知道有什麼工具可以遷移磁碟以新增分割區表。問題是檔案系統與磁碟上的磁區相關聯,並且新增分割區表會變更這些磁區。如果您的 BTRFS 檔案系統位於 LVM 上,那麼您可以移動檔案系統,因為檔案系統將與「虛擬磁區」綁定。並不是說你應該這樣做,只是說明問題是什麼。

相關內容