SATADOM 上的旧系统,您可以将它们从任何主板切换至任何主板,无论如何它们都会启动。
尝试使用安装了 Debian bookworm 的 WD Blue SSD,每次我在主板之间传输时,我都需要按照此链接中的说明进行操作,本质上是重新更新 grub。
是否有人知道这种现象的解释,或者理想情况下 - 我如何使用可在主板之间传输的现代硬件和软件,而不必每次切换时使用 USB 实时启动密钥重新安装 grub 的 EFI 设置?
推论:当然,这不会发生在我的 Debian bookworm Install Live USB 系统上。
EFI 分区没有损坏。而是主板的 NVRAM 到 EFI 分区的链接断开了。
在 EFI 中,固件不仅仅从某个预定义位置启动“磁盘”(例如 BIOS 会从扇区 0 启动 MBR 引导代码)。相反,它故意允许磁盘具有多个引导加载程序,因此每个操作系统的安装程序都必须告知固件应该从哪个分区中的哪个文件进行引导。
例如,Windows 安装文件
\EFI\Microsoft\Boot\Bootmgfw.efi
(我可能记错了路径),Debian 的 GRUB 包安装文件\EFI\debian\grubx64.efi
(或类似路径)。这意味着需要明确告知您的固件 Debian 的 GRUB 位于\EFI\debian\grubx64.efi
(以及在哪个分区上),grub-install 将其作为“启动项”存储在固件中存储的“EFI 变量”中(大致在所有其他固件设置都存在的“CMOS”内)。您可以通过运行来查看启动项
efibootmgr
(-v
如果是旧版本则带有选项),并且您会看到每个启动项都有分区 GUID 和存储在其中的文件的路径。由于所有这些“EFI 变量”都存储在主板中,因此更换主板自然会丢失所有这些变量。因此,即使 EFI 分区的内容没有发生任何变化,您仍然需要重新运行 grub-install 来专门重新创建该启动项。(如果您愿意,也可以手动执行此操作
efibootmgr
。)一些制造商会让他们的 EFI 固件自动查找 Windows 路径,因为其 Bootmgfw.efi 始终位于同一位置,但对于拥有大量种类的 Linux 来说,这并不适用。
尽管如此,EFI也能够从某个预定义位置启动“磁盘”,这就是它从 USB 记忆棒和其他可移动磁盘启动的方式——尽管它实际上只适用于可移动磁盘,但实际上所有固件都将其用于任何存储,包括内部磁盘。这通过将引导加载程序放置在路径
\EFI\Boot\bootx64.efi
(或其他路径,boot*.efi
具体取决于 CPU 架构)上来实现,如果固件没有启动条目,它将自动查找该特定路径。Windows 默认会这样做 – 它会将其引导加载程序复制到和
\EFI\Microsoft\Boot\Bootmgfw.efi
,\EFI\Boot\Bootx64.efi
这样如果“CMOS”设置丢失,固件无论如何都会启动到 Windows。GRUB 的 grub-install 不会这样做;它有一个--removable
选项可以只安装“fallback”文件,但不能同时安装两个文件。虽然 Debian 修补了它的 grub-install 以添加安装两者的选项;--force-extra-removable
如果我没记错的话。因此,如果您经常在主板之间移动磁盘,则每次安装或更新 GRUB 时都
grub-install --removable
应该使用或。(也就是说,弄清楚如何让 apt/dpkg 每次都使用此选项。)--force-extra-removable