grub 安装在哪里?我是否需要一个新的 grub 来单独安装 Linux?

grub 安装在哪里?我是否需要一个新的 grub 来单独安装 Linux?

目前我已经安装并配置了 Arch 和 Windows,并安装了 grub。我将在单独的分区上进行另一个 Arch 安装。

我是否需要在新安装的发行版上再次安装和配置 grub 还是可以使用旧的发行版?

我想如果我继续使用旧的(从这个角度来看是当前的)grub,我必须再次配置它,以便它看到新的 Arch 安装。

如果我格式化当前分区(使用旧的 Arch 安装)会发生什么?
grub 是否会继续工作(即我需要启动一些 live-cd 来修复它)?

总结一下: grub 是独立于任何操作系统安装在某个通用位置,还是与某些操作系统绑定(我当前的 Arch 安装)。
教程给出了这个命令:grub-mkconfig -o /boot/grub/grub.cfg这让我认为 grub 与特定的 linux 安装有关;但它们也显示grub-install命令而不指定任何目录。

如果 grub 与当前安装绑定,我的计算机如何知道要检查哪个分区是否有 grub?否则,如果它是“通用”的,为什么我必须将它作为一个包“安装”在具体的拱形安装?

答案1

命名约定:

  • GRUB(其中一些)保留在 MBR 中。

  • GRUB(其余部分)是加载的几个文件/boot/grub(例如:在 GRUB 中显示为背景的漂亮图像未存储在 MBR 上)

笔记:

  • 答案是考虑 MBR 设置,GRUB 可以在其他设置中使用。

  • 在 EFI 设置中,事情变得很复杂,可以使用 GRUB,但内核本身也可以作为自己的 EFI 存根。


GRUB(其中一些)安装在 MBR 中。 MBR 是磁盘上的前 512 字节。 MBR也被磁盘的分区表使用,因此GRUB本身的空间比512字节要少一些。

MBR 内的 GRUB(其中一部分)从磁盘的另一部分加载更完整的 GRUB(其余部分),这是在 GRUB 安装到 MBR 期间定义的 ( grub-install)。由于 MBR GRUB 需要在磁盘上找到其对应项(通常位于 )/boot,因此主 GRUB 所在的分区不能距离分区表太远(通常512MB但可能有所不同)。

拥有自己的分区非常有用/boot,因为这样就可以从那里管理整个磁盘的 GRUB。

这是什么意思:

  • MBR 上的 GRUB 只能从磁盘加载一个 GRUB(其余部分)。

  • 磁盘上的特定 GRUB(其余部分)必须配置为查找计算机上的所有操作系统。


该命令grub-mkconfig -o /boot/grub/grub.cfg运行os-prober(如果可以找到它),它会扫描所有分区并生成grub.cfg指向所有操作系统的指向。

因此,如果您有多个分区/boot(或 MS Windows 等效项,我不知道但os-prober知道),系统os-prober将找到它们并grub.cfg相应地创建。在 MBR 上运行grub-install安装 GRUB(其中一部分),该 MBR 指向当前正在运行的操作系统的 GRUB,其中包含当前的grub.cfg.

这是什么意思:

  • 整个系统只需要一个 GRUB。

  • 您可以在不同的磁盘上拥有不同的 GRUB(因为它们具有不同的 MBR),但这仅在您计划删除磁盘时才有意义。

  • 您可以通过单个 GRUB 安装来管理所有操作系统的启动。

  • 在单个磁盘上,您应始终grub-install仅从单个操作系统运行!这很重要,否则你将继续覆盖你的配置。

答案2

只是为了澄清:你正在使用grub2, 正确的?

如果 Grub2 安装在其自己的引导分区中,则无需更改任何内容。如果不是(这真的很奇怪),那么您可以在技术上保留grub.cfg,如果您的发行版有它,也可以保留/etc/grub.d

/boot不过应该是它自己的分区。如果你运行mount并看到类似这样的内容:

/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,stripe=4,data=ordered)

您已将 Grub2 安装在其自己的分区中,这是理所应当的。通常,在安装新发行版时,向导通常会引导您完成安装过程,甚至找出哪些分区包含哪些操作系统(如果适用)。 Arch 上的过程有点繁琐但是非常有据可查

万一发生可怕的事情

下载格帕特,将其放在 USB 记忆棒上,从它启动,然后挂载/boot分区。

然后只需以 root 身份运行(或使用sudo):

grub-mkconfig -o /boot/grub/grub.cfg

Grub2 应该能够自动检测您的分区并采取相应的行动。

(不过,目前我不确定 Grub2 是否需要全部安装分区来检测其上的操作系统)

如果您同时尝试安装 Windows,则可能是 Windows 覆盖了引导加载程序。要解决这个问题,只需以 root 身份运行(或使用sudo):

grub-install /dev/sdX

/dev/sdX启动分区所在的驱动器在哪里。


一点解释:

Grub2 是 Stage-2引导装载程序。这意味着它不完全是一个操作系统,但它比一个简单的链加载器复杂得多,链加载器适合主分区上的前 446 字节(第一个扇区的其余部分是分区表、标志等)。

MBR 仅包含执行驻留在/boot分区上的 Grub2 代码的代码。 Grub2 然后或者链负载到另一个分区(例如用于启动 Windows,因为它安装了自己的启动加载程序),但它也可以运行代码(例如memtest),或访问并运行内核和模块映像(vmlinuz)。

需要注意的是,在这两种情况下,一旦内核开始运行,或者另一个分区已被链式加载,Grub2 就会从内存中卸载。

答案3

Grub 不依赖于特定的操作系统。它可以驻留在其专用分区上,但通常它是沿着主文件系统安装的。但为了能够启动您的系统,它需要了解它们。因此,在计算机上的系统发生任何重要更改(例如安装新操作系统或内核升级)后,您需要更新 Grub。如果删除唯一的 Grub,您将无法启动系统。一台机器上可以有多个 Grub,但只有一个是主要的或活动的。除了 Grub 之外,还有其他引导加载程序可以使用(而不是 Grub)。 Windows有自己的引导加载程序,可以将其设置为整机的主加载程序。

相关内容