运行时grub-install /dev/sdY
,它似乎将活动系统的引导加载程序(假设我们以 root 身份安装了 /dev/sdX#)到 sdY 所需的 EFI 和主板的 NVRAM 中。
- {
/dev/sdX#
安装到/
;和grub-install /dev/sdY
} --> 在 sdX# 下定义的引导加载程序现在安装了 EFI 系统分区 (ESP)/dev/sdY
和 NVRAM 引导顺序(在 mobo NVRAM 上)
/dev/sdY
如果磁盘发生故障,如何从另一个分区(例如 /dev/sdZ#)安装引导加载程序作为后备?
特别是,当我跑步时到底发生了什么grub-install
?我的印象是它从各种文件编译配置信息(现在哪些文件仍然配置grub,grub.cfg
或者现在编译了吗?),将输出写入目录/boot/grub
(和/或发出其他文件?还有目录/boot/efi
?),可以将自己的一个阶段上传到 ESP(特别是知道sdX
默认情况下查看?),并最终将自己挂接到 NVRAM 启动优先级列表中?
可能的选项install-grub
似乎包括--bootloader-id
(大概指定一个未使用的选项,然后使用 重新分配顺序efiupdatemgr
。还有一个-d
选项,但它如何知道要使用哪些配置文件...这是否意味着我必须 chroot 或启动似乎是一个 catch-22,因为它目前无法启动......除非我能以某种方式让 grub 知道每个有效的/boot/
配置?
谢谢。
杂项研究笔记:
答案1
(用例:您无法启动 nvme 驱动器)
回答自己的问题:
终于想通了。grub-installer
通过直接写入 .EFI 系统分区(ESP)来写入/boot/efi
。因此,要么将后备 ESP 安装在真正的 ESP 之上,要么将其安装在其他位置并使用命令行参数覆盖它:
mkdir -p /mnt/boot/efi
mount /dev/FALLBACK /mnt/boot/efi
在此之前,我们应该已经成功运行grub-install
,这将写入一些(假设是随机的)选择的 EFI。我们将此磁盘称为“主磁盘”。仔细检查主板 NVRAM 中的条目是否正确指向您的第一个主要 EFI 安装。
efibootmgr -v
ls -l /dev/disk/by-partuuid # confirm that your first grub-install made an entry pointing to the UUID of /dev/PRIMARY
(这些是设备,例如对于 nvme 设备,您需要设备级前缀nvme0n1
(不是nvme0
),就像sda
什么一样)
好的,现在我们准备好了:
grub-install --efi-directory=/mnt/boot/efi --bootloader-id=my-fallback-grub
现在确认您有两个不同 EFI 分区的两个条目:
efibootmgr -v
适当调整顺序efibootmgr --bootorder 3,1,2,etc