問題
我有一台從八磁碟 Btrfs RAID10 磁碟區啟動到 Arch Linux 的機器。最近,我重新啟動並出現以下 GRUB 救援提示:
我不確定到底是什麼觸發了這個。自上次啟動以來,我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強烈勸阻像 GRUB Legacy 或 Syslinux 一樣安裝到分割區開機磁區或無分割區磁碟。此設定很容易損壞,尤其是在更新期間,並且不支援由 Arch 開發者提供。
好吧,廢話。
無論如何,grub-install -v
在其輸出中包含這一行:
grub-install: info: the total module size is 0xa07c.
這大約是 41K,遠遠超過了上面提到的 31.5KiB 限制,但我對 GRUB 的了解還不夠深,無法確定這就是我遇到麻煩的原因。
問題
如果這是問題是,我怎麼證明它——
grub-install
如果是的話,為什麼不大聲失敗呢?今後格式化可啟動 Btrfs 磁碟的正確方法是什麼?主引導記錄?通用技術? — 專用啟動盤很誘人,但我喜歡在卷中的每個設備上都有一個冗餘引導程式。
有沒有比擦除並運行
btrfs replace
每個磁碟更好的方法將每個磁碟遷移到分割表?
答案1
過去,使用 fdisk 建立 MBR 分割區表時,預設會保持前 63 個磁區不變。這是可以安裝 GRUB 和其他引導程式的地方。
快轉到現代,同樣的工具(fdisk)留下了更多未使用的空間;足以讓 GRUB2 安裝具有 BTRFS 支援的 stage1。我相信預設偏移量約為 1MB;無論這在行業中意味著什麼。
我不知道為什麼grub-install
沒有失敗,但我想它不會檢查引導扇區大小;沒有分區怎麼可能。
我不認為擁有冗餘引導程式有什麼問題。您必須手動管理它,但 GRUB2 的 stage1 不會經常更改。但這意味著您需要分區。
我不知道有什麼工具可以遷移磁碟以新增分割區表。問題是檔案系統與磁碟上的磁區相關聯,並且新增分割區表會變更這些磁區。如果您的 BTRFS 檔案系統位於 LVM 上,那麼您可以移動檔案系統,因為檔案系統將與「虛擬磁區」綁定。並不是說你應該這樣做,只是說明問題是什麼。