GRUB 的第一阶段引导加载程序如何加载第二阶段引导加载程序?
Posted
技术标签:
【中文标题】GRUB 的第一阶段引导加载程序如何加载第二阶段引导加载程序?【英文标题】:How does GRUB's stage 1 boot loader loads the stage 2 bootloader? 【发布时间】:2013-05-05 03:38:57 【问题描述】:上周我很困惑,当第二阶段在一个复杂的文件系统中时,只有 446 字节的 grub 第一阶段引导加载程序如何能够搜索第二阶段!第二阶段如何定位?
当windows和linux的复杂分区方案到位,linux系统完全处于扩展分区中,那么stage 1是如何找到stage 2的呢?还是1.5阶段?
所有 grub 教程都略过这个重要部分。我已经搜索了互联网,但找不到任何可以解释这一点的东西。可悲的是,我不是汇编程序员。
我想根据启动过程中硬盘的哪些扇区(以及大致如何)来复杂地了解启动过程。 *请在此处指出一个好的资源或答案。这将极大地帮助我明智地玩 grub。*
搜索了一些资源:
-
Linux 的工作原理:Brian Ward 的每位超级用户都应该知道的内容
http://www.dedoimedo.com/computers/grub.html
一些过去的 *** 问题。
【问题讨论】:
【参考方案1】:第 1 阶段“知道”第 2 阶段是通过嵌入其中的阻止列表加载表中的条目来实现的。它从引导驱动器加载块列表,然后在 16 位实模式下跳转到指定的 CS:IP。这些在嵌入式数据页面中进行了描述。它在 Bios 中查询磁盘几何结构,并将那里的线性块编号映射到 INT 13h BIOS 接口使用的 C:H:S 地址。
http://www.uruk.org/orig-grub/technical.html
还有很多时间与新磁盘对齐,在 MBR 和第一个分区之间有不到 1-2 MB 的未分配空间,第 2 阶段有时会卡在那里。
【讨论】:
非常感谢!该文件非常解释,我得到了大局。由于第二阶段位于文件系统上,因此文件系统不应不惜一切代价移动第二阶段(因为地址是绝对 C:H:S。据我所知,如果移动阶段 2,系统将会中断。我是有点混淆了 8GB 磁盘访问限制。第二阶段是否必须在此限制范围内?文档确实提到了与之相关的内容,但我很困惑。 该文档相当旧。 2003 年,48 位寻址模式被引入 ATA 规范(以及大多数 BIOS),允许 BIOS 访问驱动器的前 2 TB。现在 EFI 系统有一个更大的方法来按块寻址驱动器,(更不用说可以在 EFI 中安装文件系统驱动程序,因此在某些情况下可以按名称加载第 2 阶段。当人们有 512MB 的限制时,他们会做通过保留一个完全低于 BIOS 限制的单独 /boot 分区,确保第 2 阶段低于它。以上是关于GRUB 的第一阶段引导加载程序如何加载第二阶段引导加载程序?的主要内容,如果未能解决你的问题,请参考以下文章