将 Grub2 安装到 PBR

将 Grub2 安装到 PBR

看来这个问题已经在这里被问过很多次了,例如:

但这些问题都没有得到充分回答(或者可能本身就是问题的答案,没有在这里列出的问题,但这里提出的问题并没有得到充分回答)。所以让我再问一遍,这样我们就可以在一站式的地方进行全面的问答。

情况很简单:

  • 有一个分区(分区 A)的引导加载程序已损坏或丢失,
  • 我们正在启动另一个 Linux 系统,无论是从不同的分区(分区 B)还是 Live-CD,
  • 目标是完全安装 grub2 作为其引导加载程序。即从分区 B 中的操作系统到分区 A 中的操作系统。

任务也很简单:

  • 安装 grub2 作为引导加载程序。这是通过 完成的grub-install
  • 更新 grub2 菜单以启动在分区 A 上找到的任何内核。这是通过 完成的update-grub,对吗?

好吧,现在魔鬼就在细节里,

  • grub-install安装到 PBR,
    • 它抱怨它不安全/不可靠:

      GRUB 只能通过使用阻止列表在此设置中安装。但是,阻止列表不可靠,不鼓励使用。

    • error: embedding is not possible, but this is required for cross-disk install当我阅读时,有时它也会抱怨。
  • 如果只用grub-install而不用update-grub,那么
    • 分区 A 可以启动,但只能启动到带有命令行提示符的黑色 GRUB2 屏幕。
    • 但是,我没有看到update-grub在分区 A 上进行操作的选项,而是在其自己的分区 B 上进行操作。

因此,总而言之,请详细说明如何将 grub2 安装到不同分区的 PBR,并使用菜单启动在分区 A 上找到的任何内核。谢谢。

更新:

好吧,为了让它成为一个一站式的地方,对于那些甚至不知道 PBR 是什么的人来说——

光生物反应器是一个通常用于多重引导情况,指的是分区引导记录,除了主引导记录(MBR)。

更新2:

将此chroot方法应用于分区 A,我得到了以下结果:

% grub-install /dev/sdc5
Installing for i386-pc platform.
grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.

为什么它拒绝继续使用黑名单?

% fdisk -l /dev/sdc 
Disk /dev/sdc: 74.5 GiB, 80000000000 bytes, 156250000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x44c4f501

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sdc1               1  12289724  12289724  5.9G  7 HPFS/NTFS/exFAT
/dev/sdc2  *     12289725  28676024  16386300  7.8G 83 Linux
/dev/sdc3        28676025 156248189 127572165 60.9G  5 Extended
/dev/sdc5        28676026  45062324  16386299  7.8G 83 Linux
/dev/sdc6        45062326  61448624  16386299  7.8G 83 Linux
. . .

$ lsb_release -a 
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic

答案1

仅适用于 BIOS 系统。自 2012 年发布 Windows 8 以来的所有系统都是 UEFI。因此您不需要也不想在已有 35 年历史的 BIOS/MBR 配置中安装。

安装 grub 到 PBR 仅用于 BIOS 启动。并且,如果使用安装到 MBR 的另一个 grub 进行启动,则只能从 PBR 启动,因为 BIOS 仅通过 MBR 启动。

现在有了 grub2,启动另一个安装有许多更好的方法。grub 必须使用阻止列表,这些阻止列表是 grub 其余部分的硬编码地址,而不是搜索。地址甚至可以使用 fsck 进行更改。

通常,MBR 中的 grub 来自上次安装,它控制启动过程。如果您不想从实时安装程序安装 grub:

sudo ubiquity -b

您可以随时启动任何安装并将其 grub 安装到 MBR。从您的安装内部:

sudo grub-install /dev/sdX where sdX is your drive.

您可以使用 grub2 的 os-prober 查找其他安装并添加到 grub 菜单。您可以使用配置文件加载另一个安装 grub。并且您可以在 40_custom 中使用您自己的启动节来加载最新内核的链接,因此不需要使用较新的内核更新第二个安装的启动条目。

BIOS 模式下的 Grub 还会保存有关重新安装位置的驱动器(和分区)信息。如果不正确,也必须更新。按 Enter 进入第一页,按 Tab 键确定,按空格键选择/取消选择驱动器,按 Enter 键接受,不要选择分区或不选择任何内容,这样 grub 就不会在任何地方重新安装。

sudo dpkg-reconfigure grub-pc 

https://ubuntuforums.org/showthread.php?t=2189643

用于引导最新内核和配置文件类型 grub 条目的引导链接的引导节示例。不仅适用于 USB 驱动器,还适用于任何安装。

如何添加 GRUB2 菜单项以启动 USB 驱动器上安装的 Ubuntu?

您始终可以手动安装 grub,只需安装其他安装或完全 chroot。如果您确实希望将其安装在分区中,则可能需要 --force 参数。

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

也可以看看:

https://help.ubuntu.com/community/Grub2/Setup#Configuring_GRUB_2

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

答案2

我认为@oldfred 的回答几乎涵盖了所有内容,但您的问题有点令人困惑。

尽管可以将 grub 安装到 PBR,但是您总是将分区中的操作系统的 grub 安装A到分区的 PBR A,而绝不会将 grub 安装到任何其他分区的 PBR。

A但是如果您确实想在启动实时会话或分区上的操作系统时将 grub 实例(重新)安装到分区的 PBR B,则必须chroot进入分区上的操作系统A,然后运行该grub-install命令。示例:

sudo mount /dev/sdaX /mnt
for i in dev sys proc dev/pts ; do sudo mount --bind /$i /mnt/$i ; done
chroot /mnt
grub-install --force /dev/sdaX
update-grub
exit
for i in dev sys proc dev/pts ; do sudo umount /mnt/$i ; done
sudo umount /mnt

/dev/sdaX根据您的需要调整此示例中的设备名称!

/dev/sdX但如果操作系统使用单独的分区,事情就会变得更加复杂,甚至不可能,/boot我从未使用过单独的/boot分区,所以我无法告诉你。如果所讨论的操作系统不使用单独的分区,则此示例将有效/boot

相关内容