无分区 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 上,那么您可以移动文件系统,因为文件系统将与“虚拟扇区”绑定。并不是说你应该这样做,只是说明问题是什么。

相关内容