什么是Grub-install实际上在做什么?

我有一个客户端意外地把他们的一个Linux系统的分区表从DOS转换到了GPT。 不幸的是,GRUB版本是2,系统没有BIOS引导分区来存放额外的引导加载程序代码。

然后使用以下步骤来解决它:

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

之后,系统现在可以正常启动。
有一点,我不明白,请帮助。

我第一次尝试添加一个BIOS启动分区到引导磁盘,但系统也没有工作。 一旦GRUB重新安装,它可以启动…

请问有人重新安装是否需要将部分GRUB 2代码存储到BIOS引导分区中? 谢谢。

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

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

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

通常在DOS分区设置上, stage1加载了一个stage1.5 (上面双关语的原因)。 在MBR分区(或DOS磁盘分区)上,在第一个实际的分区数据开始之前,该分区被写在分区表之后的空白扇区上。 请参阅此graphics的上半部分。

由于创build一个GPT分区表需要创build一个“保护性”MBR,这会消除你的stage1.5 。 这个保护性分区表的存在是为了避免遗留分区工具破坏它不知道的GPT表。

很明显, stage1.5是加载模块,理解分区,search文件系统,执行configuration脚本寻找stage2

最后一个阶段是知道如何启动所有types的内核,并且驻留在某个文件系统的/boot/grub目录下的官方分区。

在你的情况下, grub-install进程在使用GPT表的时候刚刚在新的地方注入了stage1.5 (core.img):一个带有BIOS_grub标志的分区。 看到该图像的下半部分。

根据磁盘几何和分区软件的不同,有时候可能会在第一个分区之前将其放在GPT表之后,但这种情况非常less见。

希望能帮助到你!

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

这是实际发生的事情:

  1. 当分区被删除时,GRUB随之被删除。
  2. 当分区被重新创build时,它被创build为一个空分区。
  3. grub-install根据/boot/grub/grub.cfgconfiguration将GRUB安装到了这个空的MBR / GPT分区。 这个configuration可能是用grub-mkconfig生成的, grub-mkconfig就是从/etc/grub.d/设置的简单configuration 。