引导扇区真的只是驱动器的开始吗?

Nac*_*cht 32 hard-drive filesystems bootsector

首先,我假设驱动器和/或分区从头到尾都有一个线性地址。必须是这种情况,否则类似的程序dd将无法充当复制机制。

在这个字节数组中,引导扇区几乎总是地址 0 吗?我想这取决于该驱动器上使用的文件系统?

抱歉这些低级的东西我真的不懂,想学习!

tel*_*coM 47

首先,我们需要指定使用的分区方案。用于 PC 的经典是 MBR,它与此分区方案中磁盘的第一个块(逻辑块地址 #0)共享名称:主引导记录。因此,MBR 分区问题标题的答案是yes

主引导记录最多包含 446 字节的引导代码、主分区的分区表(每个分区仅 16 字节)和引导签名(2 字节)。在每个 16 字节的分区条目中,实际上只有 4 个字节可用于指定现代磁盘上分区的第一个块,只有 4 个字节可用于指定分区中的块数。因此,MBR 分区的起始点必须在距磁盘开头的 (2^32 - 1) 个块内,并且 MBR 分区的大小必须在 (2^32 - 1) 个块以内。实际上,这将 MBR 分区的用途限制在 2 TB 或更少的磁盘上。

传统上,MBR 引导代码只会识别活动的主分区,加载该分区的第一个块(有时称为分区引导记录,或 PBR)并执行它。然后,PBR 将包含特定于操作系统的引导程序。但是现代引导加载程序,如 Linux 的 GRUB 或一些全盘加密解决方案,可能希望做更复杂的事情,因此无法放入单个块中。

在旧磁盘中,当 Cylinder/Head/Sector 几何值实际上具有某些实际意义时,磁盘第一个磁头的整个第一磁道单独保留给 MBR 块:约定是在开始时启动每个分区轨道的第一个块,因此轨道 #0 的第一个块被 MBR 占用,整个轨道被跳过,第一个分区将从轨道 #1 开始。因此,MBR 块之后轨道 #0 上的扇区可供更高级的引导加载程序使用。在 MBR 分区的磁盘上,GRUB 引导加载程序通常会将其自身的至少某些部分嵌入其中。

在 LBA 寻址是标准的现代磁盘上,建立了一个新约定:第一个分区通常从逻辑块地址 #2048 开始,或者从磁盘的开头正好 1 MiB。这将确保即使磁盘将在内部处理某些 2 的幂的组中的块,第一个分区的开始仍将与此类块组的开始对齐。在 RAID 阵列和其他更大的存储系统上,这种数据对齐是充分发挥存储性能的重要部分。作为一个副作用,这个新约定可能会在 MBR 块和第一个分区的开头之间造成更多的“浪费”空间。


2011 年,当 Intel Sandy Bridge 微架构发布时,新的 UEFI 固件被引入大众,最终取代了传统的 BIOS。随之而来的是一种新的分区方案:GUID 分区表或简称 GPT。由于 MBR 的基本最大大小限制为 2 TB(假设标准块大小为 512 字节),因此需要一种新方案。

GPT 分区方案实际上包含一个“保护性 MBR”:GPT 分区磁盘的第一个块 (LBA #0) 包含一个有效的 MBR 块,基本上说“此磁盘已完全分配给您没有的分区类型了解,不要接触”只了解 MBR 风格分区的系统。从 LBA #1 开始是 GPT 的实际分区表数据。它允许分区大小增长到 zettabytes 范围 - 在可预见的未来应该足够了。

GPT分区方案取消了MBR的限制:

  • 使用 GPT,不再限制每个磁盘只有 4 个主分区。
  • 主/扩展/逻辑分区的 MBR 式划分不再存在:在这个意义上,所有分区都是平等的。

UEFI 固件还指定了新的引导加载程序方案。引导加载程序在磁盘上不再具有固定位置。相反,固件将具有从 FAT32 类型文件系统读取文件的内置能力,而引导加载程序将只是 FAT32 分区上标有特定分区类型 GUID 的常规文件。这样的分区称为 ESP,或 EFI 系统分区。(UEFI 固件标准是从 EFI 固件发展而来的,EFI 固件主要存在于 Intel Itanium 系统上,引导加载程序分区的名称和结构也是从那里继承的。)

因此,对于其他分区方案,包括 GPT,您不能假设引导扇区是驱动器上的第一个块——事实上,您不能假设引导扇区的概念甚至存在!

  • 在 2011 年之前,它更像是一个专业的东西。在 Sandy Bridge 中,英特尔将其设为*强制*,因此所有配备 Sandy Bridge 或更新芯片组的英特尔系统都使用 UEFI 固件。这使它*更*更常见。我尽量简短,因为编写 UEFI 历史讲座并不是我的主要目的。看起来我在那里写得太简短了。 (8认同)
  • 2011年?不,UEFI 早在 Sandy Bridge 之前就出现了。[GPT](https://en.wikipedia.org/wiki/GUID_Partition_Table) 是在 90 年代后期英特尔开发 Itanium 时作为 EFI 的一部分创建的。UEFI 自 2005 年以来一直存在。请参阅 [UEFI 的历史](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface#History)。 (7认同)
  • 对于基于 BIOS 的 x86 PC,分区表(例如 MBR)的存在无关紧要。唯一重要的是偏移 0x1FE 处的引导签名 0x55AA。如果存在该签名,则 BIOS 会将前 512 个字节加载到内存中,并将执行传递给这些字节中的第一个。如果该签名不存在,则 BIOS 将移至下一个磁盘,如果没有剩余,则放弃。 (6认同)
  • 对于 BIOS 系统上的 GPT 方案,您_可以_假设引导扇区是第一个块,因为该方案特别包括具有完全相同引导代码区域的“保护性 MBR”。(正如 8bittree 指出的,BIOS 不关心分区,并且会很高兴地引导 GPT 磁盘。)反之亦然,您不能真正假设 UEFI 系统上使用 GPT,因为规范还定义了如何在 MBR 上创建 ESP-也只有磁盘... (3认同)

cyb*_*ard 16

是的,对于 MBR,引导扇区始终位于扇区 0。硬盘驱动器分为扇区,传统上是 512 字节,但 4TB+ 驱动器开始使用 4096 字节扇区。

您必须读取或写入整个扇区。

今天,LBA(逻辑块分配)具有从 0 到驱动器容量的标准扇区级数。

古老的硬盘驱动器实际上使用圆柱体、磁头和扇区。其中每个磁头容纳这么多扇区,每个柱面容纳这么多磁头。

文件系统不是从扇区 0 开始,而是分区表指示分区的开始,因此文件系统在此没有任何作用。

GPT 也开始取代 MBR,因为 MBR 有大约 2.2TB 的限制,并且有一种复杂的方式来表示 4 个以上的主分区。您需要逻辑分区,每个扩展分区可以包含许多逻辑分区。

GPT 消除了许多复杂性并进行了更新和简化。

这里有更多细节。

https://en.wikipedia.org/wiki/GUID_Partition_Table

  • 在倒数第二段中澄清:这是创建逻辑分区所需的**扩展**分区 (4认同)
  • 对于基于 BIOS 的 x86 PC,分区表(例如 MBR)的存在无关紧要。唯一重要的是偏移 0x1FE 处的引导签名 0x55AA。如果存在该签名,则 BIOS 会将前 512 个字节加载到内存中,并将执行传递给这些字节中的第一个。如果该签名不存在,则 BIOS 将移至下一个磁盘,如果没有剩余,则放弃。 (3认同)