启动前执行 grub2 命令 nativedisk(适用于大磁盘)

启动前执行 grub2 命令 nativedisk(适用于大磁盘)

我将 Ubuntu 20.04.4 移至 4TB GPT 磁盘,启动 bios_grub(即使用旧版 BIOS)。只要其 stage2 代码安装在磁盘的起始位置(例如在扇区 34-2047),Grub2 就允许这样做。
那是我(艰难地)发现 Grub2 默认使用 BIOS 固件磁盘驱动程序而不是其自己的本机磁盘驱动程序的时候。这不是很好,因为 BIOS 磁盘驱动程序仅限于 32 位 LBA 地址,最多只能访问磁盘的前 2TiB。
幸运的是,Grub2 有一个nativedisk命令告诉 grub 切换到其本机磁盘驱动程序,这些驱动程序显然启用了 64 位。我可以从实时救援控制台确认nativediskgrub 命令可以修复我遇到的一个棘手的半随机启动问题:一些内核映像将位于 ext4 分区中 2TiB 标记之前(这些将成功启动),一些将位于上方(这些将无法启动)。
在后一种情况下,
error: attempt to read or write outside of disk 'hd0'
当 Grub 尝试加载内核时,我会收到一个错误消息。
最后,根据 Grub 手册,该nativedisk命令不仅限于 grub 交互式控制台,还可以在脚本/菜单中使用。
现在的问题是:
将 nativedisk 命令塞入最干净/最安全的脚本/配置点是什么,以便它在启动过程中尽早执行即在 Grub 尝试加载其内核和 initramfs 文件之前?
我正在寻找一个至少可以抵抗
grub-update
命令的地方,例如修复内核时每隔一天触发的常规 Ubuntu 更新的命令。
(是的,不幸的是,我了解到在当前的 grup_pc 版本中,没有脚本/配置更改可能会抵抗 grub-pc 包本身的更新)。

答案1

我没有找到在 Grub 脚本中插入“nativedriver”的方法,但我找到了一个更好的解决方案:
在 Grub 启动块中插入本机驱动程序,以便使用它来代替有限的 BIOS 驱动程序。
这可以通过运行类似的东西来完成
grub-install --disk-module=ahci /dev/sdX
,其中您的控制器可能是 ahci、ehci、ATA、ohci 或 uhci(根据您的硬件),/dev/sdX 是您的驱动器(如 sda,而不是 sda1)。
当然,稍后不包含该参数的 grub-install 将恢复损坏的启动,这甚至可能由自动 Ubuntu 更新/升级触发...

答案2

我遇到了同样的问题,我的解决方案是: grub-install --disk-module=native /dev/sdX

运行正常,但现在我从 grub2 启动时收到难看的消息:错误:未设置变量“前缀”。

我可以在 grub.cfg 中设置前缀,但是看起来这个错误是在 grub.cfg 加载之前出现的(stage1?)。

相关内容