我有一个客户,他不小心将他们的一个 Linux 系统的分区表从 DOS 转换为 GPT。不幸的是,GRUB 版本是 2,并且系统没有 BIOS 启动分区来存放额外的启动加载程序代码。
然后按照以下步骤进行修复:
- 为启动盘添加 BIOS 启动分区。
- 重新安装磁盘的 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)。因此,分区的类型不是这里的问题。
实际情况是这样的:
- 当分区被删除时,GRUB 也随之被删除。
- 重新创建分区时,它被创建为一个空分区。
- 这
grub-install
安装 GRUB 到这个空的主引导/分区表根据 中的配置进行分区/boot/grub/grub.cfg
。此配置可能是使用grub-mkconfig
ie生成的简单配置从 中的设置/etc/grub.d/
。