GRUB 的阶段一引导加载程序如何加载阶段二引导加载程序?

7

在过去的一周中,我被一个问题困扰:仅有446字节的grub第一阶段引导加载程序如何在第二阶段位于复杂文件系统中时进行搜索?它如何定位第二阶段?

当Windows和Linux存在复杂的分区方案,并且Linux系统完全位于扩展分区中时,第一阶段如何找到第二阶段?即使是第1.5阶段呢?

所有的grub教程都只涉及此重要部分的皮毛。我已经在互联网上搜索过了,但没有找到任何解释这个问题的东西。可悲的是,我不是汇编程序员。

我想深入了解启动过程,以及硬盘的哪些扇区在启动期间被操作(以及大致如何操作)。*请指点我一个好的资源或答案。 这将极大地帮助我明智地使用grub。

一些已搜索的资源:

  1. 《How Linux Works : What every superuser should know》 by Brian Ward
  2. http://www.dedoimedo.com/computers/grub.html
  3. 一些过去的stackoverflow问题。
1个回答

4

阶段1通过嵌入在其中的块列表加载表条目“知道”阶段2的位置。它从引导驱动器加载块列表,然后跳转到16位实模式下的指定CS:IP。这些在嵌入数据页面上进行了描述。它会查询BIOS的磁盘几何形状,并将线性块编号映射到INT 13h BIOS接口使用的C:H:S地址。

http://www.uruk.org/orig-grub/technical.html

在新的磁盘对齐方式下,MBR 和第一个分区之间通常只有不到 1-2 MB 的未分配空间,这可能导致 stage 2 卡在那里。


非常感谢!这份文档解释得很清楚,我已经有了大致的了解。由于第二阶段在文件系统上,文件系统在任何情况下都不应该移动第二阶段(因为地址是绝对的C:H:S)。据我所知,如果移动第二阶段,系统将会崩溃。我对8GB磁盘访问限制有些困惑。第二阶段是否必须在此限制范围内?文档确实提到了相关内容,但我还是有些困惑。 - codeman48
该文档相当古老。在2003年,ATA规范(因此大多数BIOS)引入了48位寻址模式,允许BIOS访问驱动器的前2TB。现在,EFI系统有更大的方法来通过块寻址驱动器,(更不用说可以在EFI中安装文件系统驱动程序,因此在某些情况下可以按名称加载第二阶段。当人们面对512MB限制时,他们会确保第二阶段低于它,通过保持完全低于BIOS所施加的限制的单独/ boot分区。 - WorBlux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接