主引导记录是什么?

主引导记录对于几乎所有的操作系统都是一样的。它位于硬盘的第0磁道,第0磁头,第1扇区,即硬盘的第一个扇区。在电脑检查完所有硬件(POST)并将加载软件的控制权交给硬盘之后,它是电脑运行的第一段代码。它还包含分区表,定义了硬盘的不同区域。基本上,如果这个512字节的小区域发生任何事情,你的硬盘就完了。

偏移量 描述 大小
000h 可执行代码(引导计算机) 446 字节
1BEh 第一个分区条目(见下表) 16 字节
1CEh 第二个分区条目 16 字节
1DEh 第三个分区条目 16 字节
1EEh 第四个分区条目 16 字节
1FEh 引导记录签名(55hAAh) 2 字节
    • 分区条目(MBR 的一部分)
偏移量 描述 大小
00h 分区当前状态(00h=未激活,80h=激活) 1 字节
01h 分区起始 - 柱面/磁头(参见下文) 1 字节
02h 分区起始 - 柱面/扇区(参见下文) 1 词
04h 分区类型(参见下表) 1 字节
05h 分区结束 - 磁头 1 字节
06h 分区结束 - 柱面/扇区 1 词
08h MBR 和分区中第一个扇区之间的扇区数 1 双词
0Ch 分区中的扇区数 1 双词
    • 圆柱体/扇区编码

我想在那个时代,拥有10MB硬盘和8086处理器的时候,代码空间是非常宝贵的。所以他们竭尽所能来节省空间。不幸的是,我们现在还得面对这个问题,但幸运的是,他们发明了新的系统翻译方法,使得1024磁道限制(2的10次方)对于新电脑来说不是太大的问题。而对于较旧的电脑,通常需要使用某种磁盘覆盖程序来让它们能够看到整个硬盘。

总之,要得到Sector,你需要对它应用一个与运算符($3F)。要得到Cylinder,你取高字节并或运算它与经过与运算($C0)和左移两位后的低字节。这很难解释,所以我将直接展示我用Pascal编写的两个程序(用于编码和解码Cylinder/Sector)。希望即使你不懂Pascal,也能看懂。

函数 CylSecEncode(Cylinder, Sector: Word): Word; 开始 CylSecEncode := (Low(Cylinder) shl 8) 或 (High(Cylinder) shl 6) 或 Sector; 结束;

过程 CylSecDecode(变数 Cylinder, Sector: 字节; CylSec: 字节);
开始
    Cylinder := Hi(CylSec) 或者 ((Lo(CylSec) 和 $C0) 左移 2);
    Sector := (CylSec 和 $3F);
结束;

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
磁道位元 7 到 0 磁道位元 9+8 扇区位元 5 到 0

分区类型列表

还有很多其他的,但我只列出了与微软操作系统相关的那些。

描述
00h未知或无
01h12位FAT
04h16位FAT(分区小于32MB)
05h扩展MS-DOS分区
06h16位FAT(分区大于32MB)
0Bh32位FAT(分区最大到2048GB)
0Ch与0BH相同,但使用LBA113h扩展
0Eh与06H相同,但使用LBA113h扩展
0Fh与05H相同,但使用LBA113h扩展

读取多个分区

虽然FAT32中不太可能有多个分区,但其工作方式与FAT16相同。第一个分区是主分区,其余所有内容都存储在扩展分区中。读取这些额外分区时会有点棘手(不是很多,只是一点点)。分区表中的第一条记录显示主分区的位置(大小、起始位置和结束位置)。分区表中的第二条记录显示整个扩展分区的位置(可能包括不止一个分区)。要读取更多分区,您需要转到扩展分区开始的位置并读取第一个扇区。它就像MBR一样工作。代码所在的位置为空,分区表的第一个条目为驱动器上的下一个分区,如果有更多分区,则将再次出现扩展分区,就像之前一样。然而,所有对扇区号的引用都是相对于该新MBR点进行的,使其成为虚拟驱动器。以防万一这不太说得通(顺便说一句,根据我解释事情的方式,我可以理解如果这不太说得通),让我向您展示带有三个分区的驱动器是如何设置的。

整个驱动器的MBR (Master Boot Record)

条目 #1 - 指向分区 #1
条目 #2 - 指向整个扩展分区

你会读取那个扩展分区的第一个扇区, 然后看到另一个MBR结构。

扩展分区的MBR (Master Boot Record)

条目 #1 - 指向分区 #2 的起始位置 条目 #2 - 指向分区 #2 之后的扩展分区剩余空间

现在,所有对扇区号(尤其是位于偏移量08h处的条目)的引用将不是从磁盘开始处,而是从扩展分区开始处进行引用。但是,CHS(柱面、磁头、扇区)编号仍然正确。

你再次读取那个扩展分区的第扇区 然后看到下一个MBR

"MBR of Rest of Extended Partition" 可以翻译为 "扩展分区剩余部分的MBR"。MBR指的是主引导记录(Master Boot Record),它是硬盘或存储设备上的一个重要部分,负责加载操作系统。"Extended Partition" 指的是扩展分区,它是一种特殊类型的分区,可以包含多个逻辑驱动器。"Rest of Extended Partition" 指的是扩展分区中除已定义区域外的剩余部分。

条目#1 - 分区#3积分
条目#2无记录,因为这是最后一个分区

如果有另一道分割,同样的情况会继续发生,直到最后一道。

FAT32引导记录信息

这些信息都位于每个分割区的第一个扇区中。

偏移量 描述 大小
00h 跳转代码 + NOP 3 字节
03h OEM 名称(可能是 MSWIN4.1) 8 字节
0Bh 每扇区字节数 1 个字
0Dh 每个簇的扇区数 1 字节
0Eh 保留扇区数 1 个字
10h FAT 的副本数 1 字节
11h 最大根目录条目数(FAT32 不适用) 1 个字
13h 分区中小于 32MB 的扇区数(FAT32 不适用) 1 个字
15h 媒体描述符(硬盘为 F8h) 1 字节
16h 旧 FAT 系统中的每个 FAT 扇区数(FAT32 不适用) 1 个字
18h 每磁道扇区数 1 个字
1Ah 磁头数 1 个字
1Ch 分区中隐藏扇区数 1 个双字
20h 分区中的扇区数 1 个双字
24h 每个 FAT 的扇区数 1 个双字
28h 标志(位 0-4 指示活动 FAT 副本)(位 7 指示是否启用 FAT 镜像)(如果禁用 FAT 镜像,则仅将 FAT 信息写入由位 0-4 指示的副本) 1 个字
2Ah FAT32 驱动器版本(高字节为主版本,低字节为次版本) 1 个字
2Ch 根目录开始的簇号 1 个双字
30h 文件系统信息扇区的扇区号(参见以下结构)(从分区开始引用) 1 个字
32h 备份引导扇区的扇区号(从分区开始引用) 1 个字
34h 保留 12 字节
40h 分区的逻辑驱动器号 1 字节
41h 未使用(可能是前一个条目的高字节) 1 字节
42h 扩展签名(29h) 1 字节
43h 分区序列号 1 个双字
47h 分区卷名 11 字节
52h FAT 名称(FAT32) 8 字节

"文件系统信息扇区指令"

通常,分区中存在一个第二扇区,尽管由于引导扇区中有对其的引用,我推测它可以被移动。我对这个部分没有完全了解,但我知道重要的字段在哪里。

偏移量 描述 大小
00h 第一个签名 (52h 52h 61h 41h) 1 个双字节
04h 未知,目前(可能是空值) 480 字节
1E4h FSInfo 扇区的签名 (72h 72h 41h 61h) 1 个双字节
1E8h 空闲簇数(如果未知则设置为 -1) 1 个双字节
1ECh 最近分配的簇号 1 个双字节
1F0h 保留 12 字节
1FCh 未知或空值 2 字节
1FEh 引导记录签名 (55h AAh) 2 字节

FAT32磁盘布局

偏移量 描述
分区开始位置 引导扇区
开始位置 + 预留扇区数 FAT 表
开始位置 + 预留扇区数 + (每个 FAT 扇区数 * 2) 数据区 (从簇号 2 开始)

群集意义

簇是硬盘上包含信息的一组扇区。一个4K簇包含8个扇区(512 * 8 = 4096)。每个簇在FAT表中都有一个位置。当你查看FAT表中的条目时,该数字会告诉你该簇是否包含数据,如果包含数据,那么数据是否结束,或者后面是否还有其他簇。分区上的所有数据从簇#2开始。如果FAT条目为0,则表示该簇没有数据。如果FAT条目为0FFFFFFFh,则表示这是链中的最后一个条目。

这是我信息中的一个大漏洞。我无法找到任何地方显示FAT表中数字的含义。我能够通过查看FAT32驱动器来判断链的结束,但我不知道什么表示“坏簇”,以及显示数据的最大有效数字是多少。

目前,您可以使用以下公式来计算分区中的最大有效群集:

(分区中的扇区数 - 每个FAT的扇区数*2 - 预留扇区数) / 每个簇的扇区数

如果上述公式的结果有余数,那仅仅意味着分区的末尾有若干额外的群集(可能还不够再形成一个群集),所以你只需舍去小数点后的部分即可。

目录表

在低级层面查看文件系统时,另一个方面是目录表。目录表存储所有文件和目录条目。基本上,FAT16和FAT32的目录表之间只有一个区别。这个区别在于:短文件名结构中的保留OS/2字节(偏移量20 [14h])被替换为簇号的高字(因为它现在是4字节而不是2字节)。

文件分配表

脚注

1 - LBA:逻辑块寻址 - 使用较新BIOS内置的扩展功能来访问超过8GB限制的数据,或者纯粹使用LBA模式而不是CHS(柱面,磁头,扇区)进行访问。

额外提示:使用硬盘恢复软件工具从FAT32硬盘恢复丢失的数据

如果您意外删除、移除或格式化了FAT32硬盘、USB或其他存储设备上的数据,请不要惊慌。最好的选择是让《数据恢复向导》工具来帮忙!在这里,我们推荐您尝试使用《数据恢复向导》工具,它可以让您在简单的3个步骤中有效地恢复删除、格式化的所有丢失数据。现在就免费下载,找回您丢失的所有FAT32数据吧: