如何将特定的引导加载程序(例如从/dev/sdX#)安装到另一个EFI 系统分区(例如/dev/sdY)和NVRAM?

如何将特定的引导加载程序(例如从/dev/sdX#)安装到另一个EFI 系统分区(例如/dev/sdY)和NVRAM?

运行时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/配置?

谢谢。

杂项研究笔记:

https://help.ubuntu.com/community/Grub2/Installing

答案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

相关内容