Grub-install 实际上在做什么?

Grub-install 实际上在做什么?

我有一个客户,他不小心将他们的一个 Linux 系统的分区表从 DOS 转换为 GPT。不幸的是,GRUB 版本是 2,并且系统没有 BIOS 启动分区来存放额外的启动加载程序代码。

然后按照以下步骤进行修复:

  1. 为启动盘添加 BIOS 启动分区。
  2. 重新安装磁盘的 grub 应用程序。

之后系统就可以正常启动了。
有一点我不明白,请帮忙。

我首先尝试在启动盘中添加 BIOS 启动分区,但系统也不起作用。一旦重新安装 GRUB,它就可以正常启动了……

有人能弄清楚重新安装是否涉及将部分 GRUB 2 代码存储到 BIOS 启动分区吗?谢谢。

答案1

有一个这里有很好的解释以下是我的简要总结:

GRUB Legacy(GRUB1)和 GRUB2 都具有“两阶段”三阶段启动过程(双关语)。

第一阶段(stage1)位于 MBR 中,我认为在您的情况下切换到 GPT 不会对它造成损害,因为它位于磁盘的第一个扇区,在任何分区表之前。

在 DOS 分区设置中,通常stage1会加载stage1.5(上述双关语的原因)。在 MBR 分区(或 DOS 磁盘标签)上,该阶段写在分区表后的空扇区上,在第一个实际分区数据开始之前。请参阅此图

因为创建 GPT 分区表需要创建“保护性” MBR,这会毁掉你的数据stage1.5。此保护性分区表的存在是为了避免传统分区工具破坏它不知道的 GPT 表。

显然,stage1.5是加载模块、理解分区、搜索文件系统并执行配置脚本来查找的stage2

最后阶段知道如何启动所有类型的内核,并且位于/boot/grub官方分区上某个文件系统的目录中。

grub-install您的案例中的进程只是在使用 GPT 表时将 (core.img) 注入到stage1.5新位置:带有 BIOS_grub 标志的分区。请参见该图像的下半部分。

根据磁盘几何形状和分区软件,它有时可以将其放在 GPT 表之后,第一个分区之前,但这种情况很少见。

希望能帮助到你!

答案2

GRUB 可以安装在GUID 分区表(GPT,BIOS 和 UEFI)和主引导记录(仅限 MBR、BIOS)。因此,分区的类型不是这里的问题。

实际情况是这样的:

  1. 当分区被删除时,GRUB 也随之被删除。
  2. 重新创建分区时,它被创建为一个空分区。
  3. grub-install安装 GRUB 到这个空的主引导/分区表根据 中的配置进行分区/boot/grub/grub.cfg。此配置可能是使用grub-mkconfigie生成的简单配置从 中的设置/etc/grub.d/

相关内容