我正在为 Linux+ 考试做准备,在做笔记的时候,我试图在笔记中向自己解释 grub 引导加载程序的不同阶段,但我被一个具体事实难住了。据我了解,在具有 mbr 分区表的硬盘上,前 512 个字节(内部磁盘)存储分区表和引导加载程序的第一阶段(在我的情况下是 grub)。我想说:
MBR 样式磁盘利用驱动器的前 512 个字节来存储分区表和第 1 阶段引导加载程序。第 1 阶段引导加载程序是引导加载程序启动序列的 2 个部分中的第一个。首先,BIOS/UEFI 在 mbr 分区驱动器的第一个可读扇区(512 字节)内查找引导加载程序第 1.5 阶段的位置。第 1 阶段本质上是一个指针,用于告诉 BIOS/UEFI 在哪里查找引导加载程序的第二部分。引导加载程序的第二部分存储在硬盘的第一个可读扇区(通常大小为几kib)。
但我无法通过研究来确认第一阶段或第二阶段是第一个可读扇区的说法是否正确,并且我不知道在操作系统无法读取 mbr 的情况下,它是否会根据组件、操作系统或固件而有所不同。
总结一下我的问题是:
当人们说“第一个可读扇区”时,他们是从操作系统还是固件(BIOS/UEFI)的角度来说的?
操作系统看到的 mbr 磁盘与计算机固件(UEFI/bios)看到的 mbr 磁盘有区别吗?
对于 GPT 磁盘,BIOS 启动分区是否仅仅为了与 BIOS 向后兼容而存在?
为了理解这个主题我查看了一些图表:
答案1
但我无法通过研究确认第一阶段或第二阶段是第一个可读扇区的说法是否正确
第一个扇区就是第一个扇区。就传统 BIOS 而言,它只会将驱动器的第一个扇区加载到内存中,并将控制权传递给其中的任何内容(此“阶段 1”)。BIOS 本身永远不会知道也不关心任何“阶段 1.5”、“阶段 2”等(它们本身是 GRUB 特有的 - 虽然其他引导加载程序通常采用类似的方法,但没有规则要求这样做)。事实上,BIOS 甚至不关心“阶段 1”是什么或做什么,只要该扇区可以从磁盘读取即可(尽管某些固件会寻找将其标记为可引导的标志)。
当人们说“第一个可读扇区”时,他们是从操作系统还是固件(BIOS/UEFI)的角度来说的?
一般来说相同,但也有例外。“第一个可读扇区”本身并不能告诉您从谁的角度读取。这取决于上下文。
操作系统看到的 mbr 磁盘与计算机固件(UEFI/bios)看到的 mbr 磁盘有区别吗?
一般情况下不会 — 假设操作系统可以直接访问物理磁盘。但虚拟化除外。
对于 GPT 磁盘,BIOS 启动分区是否仅仅为了与 BIOS 向后兼容而存在?
是的。大多数基于 GPT 的安装根本没有 BIOS 启动分区。相反,它们只有一个 EFI 系统分区,专门用于从 EFI 兼容固件启动。
上述情况也有例外。例如,宿主保护区可以有效地隐藏部分驱动器,但是 HPA 位于可寻址空间的末尾,而不是开头。
其他抽象概念也可以发挥作用。例如,某些类型的 RAID 在操作系统驱动程序级别工作,使主板固件和操作系统对驱动器有不同的看法。其他类型会将选项 ROM 加载到主板固件中,这可能导致固件看到的“第一个扇区”与磁盘显示的不同。英特尔的“假”RAID 就是一个例子。
甚至磁盘显示的“第一个扇区”(第一个块,带有 LBA)也可能与磁盘上的物理内容不同。磁盘控制器与物理磁盘分离的时代早已过去,如今我们不再确切知道磁盘的内部结构是如何布局的。如果你真的想了解技术,你可以声称“第一个可读扇区”与驱动器内部的扇区不同,但这基本上是没有意义的。现代驱动器还可以将“不可读”(损坏)扇区重新映射到内部备用区域 - 这对外部所有事物都是透明的。
边注,first readable sector
实际上出现在 Linux 2.4 内核源代码(在 2.6 版中删除)的一条注释中,先进的光盘文件系统在 中acorn.c
。请注意,此文件系统(以及引入它的系统)是 20 世纪 80 年代的,并且已长期废弃。来自维基百科:
ADFS 中的硬盘支持使用与 L 格式软盘相同的格式(256 字节块);[5] 仅轨道和扇区的底层排列因实际使用的驱动器而异,但这由 SCSI 控制器管理。它通过 BBC Micro 的 1 MHz 总线、Acorn 设计的接口卡(1 MHz 总线到 SCSI 适配器)和现成的 Adaptec SCSI 控制器(SCSI 到 ST-506 适配器)与基于 ST506/ST412 的 Winchester 单元连接。
答案2
只有在从具有 GPT 分区的磁盘以兼容模式(“BIOS”)启动的 PC 上,Grub 才需要“BIOS 启动”分区。Grub 需要额外的分区来存储其自身的第 1.5 阶段。Grub 传统上将此数据存储在第一个磁盘“柱面”上的扇区中,在第一个分区开始之前。这是一个有点卑鄙的伎俩,因为这个区域有点像“无人区”,不能保证是免费的。如果您使用 GPT 分区,它实际上并不是免费的,因为 GPT 分区表存储在这些磁盘块中。因此需要一个单独的分区。在 UEFI 模式下启动时,Grub 会从 EFI 系统分区加载。(在 UEFI 模式下启动时,Grub 实际上根本不需要,但那是另一回事。)
答案3
您需要了解顺序:OS > BIOS > FIRMWARE。
在这种情况下,固件是驱动器的固件。
BIOS 需要 LOGICAL 的前 512 个字节,因为只有驱动器固件知道它在磁性表面 (HDD) 上的位置 / 属于它哪个电池 (SSD)。
因此,直到最终硬件之前一切逻辑都是正确的,只有最终的硬件才能处理真实的物理地址。
对前 512 字节测试的请求针对 DRIVE,不依赖于 OS 或 BIOS。
当人们说“第一个可读扇区”时,他们是从操作系统还是固件(BIOS/UEFI)的角度来说的?
他们从 DRIVE 的角度进行讨论。
操作系统看到的 mbr 磁盘与计算机固件(UEFI/bios)看到的 mbr 磁盘有区别吗?
无论 BIOS 类型如何,一切都从第一个扇区开始,其内容决定转发到哪里(不仅限于 HDD,光盘可能没有引导记录,但它们有逻辑 0 扇区)
对于 GPT 磁盘,BIOS 启动分区是否仅仅为了与 BIOS 向后兼容而存在?
无需是启动分区(如在仅存储 HDD 或 raidX 卷上)。在 EFI 系统上,系统驱动器上有一个 EFI 分区。