目前我已经安装并配置了 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有自己的引导加载程序,可以将其设置为整机的主加载程序。