磁盘物理结构与分区表
第三章:硬盘与文件管理
第一节:了解硬盘
一、 硬盘物理结构
硬盘由很多盘片组成,每个盘片的每一面都有一个读写磁头。例如若有 N 个盘片,那么就有 2N 面,对应 2N 磁头(Heads),从 0、1、2 开始编号。盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道(track)。
硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面(cylinder)。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用。每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是 512byte,并按照一定规则编号为 1、2、3……扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数。
这么一来,整个硬盘就被分成了 磁头数×扇区数×柱面数 个扇区。此外,还得提一下“簇”这个概念,“簇”是硬盘上存储数据进行分配的最小单位。当创建一个很小的文件时,如是一个字节,则它在磁盘上并不是只占一个字节的空间,而是占有整个一簇。
操作系统视不同的存储介质(如软盘,硬盘),不同容量的硬盘,簇的大小也不一样。簇的大小可在称为磁盘参数块(BPB)中获取。在早期的 360KB 磁盘上,簇大小为 2 个扇区(1,024 字节);
第一批的 10MB 硬盘的簇大小增加到 8 个扇区(4,096 字节);小型闪存设备上的典型簇大小是 8KB 或16KB。2GB 以上的硬盘驱动器有 32KB 的簇。
为什么采用“簇”呢?通常,存储设备上的空间分配是随机的。在一个新存储设备上,文件连续存储,并知道开始和结束扇区和长度,在读取时可以根据这些信息重新

得到所存储的文件。但是,过一段时间后,有些文件将会被擦掉,同时可能有些文件增大,这时不能保证同一个文件存储在连续的一系列扇区里。因此,需要一种方法来辨别哪个扇区被分配到某些文件,以及还有哪些扇区可用。
这时可以采用一种表结构来实现这种功能,使每个扇区对应一个表记录。然而,由于大多数文件存储在多个扇区,一个记录对应一个扇区的作法将造成一些浪费。因此,采用每个记录代表一个固定数量扇区将更有意义,这个固定扇区即被称为簇。
二、 硬盘数据结构
一个格式化好的硬盘,整个磁盘按所记录数据的作用不同可分为五部分:主引导记录(MBR: Main Boot Record),操作系统引导记录(OBR: OS Boot Record),文件分配表(FAT: File Assign Table),根目录(DIR: Directory)和数据区(DATA)。主引导扇区主引导扇区位于整个硬盘的 0 磁道 0 柱面 1 扇区,包括硬盘主引导记录 MBR(MainBoot Record)和分区表 DPT(Disk Partition Table)。一般而言,一个硬盘的一个扇区(sector)的大小为 512 字节。
在总共 512byte 的主引导扇区中,MBR 占了其中的前 446 个字节(偏移 0H~偏移 1BDH),随后的 64 个字节(偏移 1BEH~偏移 1FDH)为 DPT(Disk Partition Table),最后的两个字节“55 AA”(偏移 1FEH~偏移 1FFH)是分区有效的结束标志。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在系统完成自检以后把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。

至于分区表,很多人都知道,以 80H 或 00H 为开始标志,以 55AAH 为结束标志,共 64 字节,位于本扇区的最末端。操作系统引导扇区OBR(OS Boot Record)即操作系统引导扇区,通常位于硬盘的 0 磁道 1 柱面 1 扇区(这是对于 DOS 来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为 BPB(BIOS Parameter Block)的本分区参数记录表。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件(例如 Windows XP 的 NTLDR 和 win7 的 BOOTMGR)。
如果是,就把第一个文件读入内存,并把控制权交予该文件。BPB 参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT 个数、簇的大小等重要参数。文件分配表FAT(File Allocation Table)即文件分配表,是 DOS/Win9x 系统的文件寻址系统,为了数据安全起见,FAT 一般有两个,第二 FAT 为第一 FAT 的备份, FAT 区紧接在 OBR之后,其大小由本分区的大小及文件分配单元的大小决定。
文件分配表是用于表示存储磁盘文件空间分配信息的。它仅仅记录数据区文件所用的磁盘空间的信息,而对引导区、两个 FAT 表、文件目录区等信息占据的空间并不在FAT 表中表示。此表包含所有可使用的空间(0000H 即自由簇)、不能使用的空间(FFF7H 即坏簇)以及已被使用的空间等信息。
关于 FAT 的格式历来有很多选择,Microsoft 的 DOS 及 Windows 采用我们所熟悉的 FAT12、FAT16 和 FAT32 格式,但除此以外并非没有其它格式的 FAT,像Windows NT、OS/2、UNIX/Linux、Novell 等都有自己的文件管理方式。关于文件系统,我们之后还会再说。
根目录区DIR 是 Directory 即根目录区的简写,DIR 紧接在第二 FAT 表之后,只有 FAT 还不能定位文件在磁盘中的位置,FAT 还必须和 DIR 配合才能准确定位文件的位置。文件目录是文件组织结构的又一重要组成部分。文件目录分为两类:根目录,子目录。
根目录有一个,子目录可以有多个。子目录下还可以有子目录,从而形成“树状”的文件目录结构。子目录其实是一种特殊的文件,文件系统为目录项分配 32 字节。
目录项分为三类:文件,子目录(其内容是许多目录项),卷标(只能在根目录,只有一个)。目录项中有文件(或子目录,或卷标)的名字,扩展名,属性,生成或最后修改日期,时间,开始簇号,及文件大小。定位文件位置时,操作系统根据 DIR 中的起始单元,结合 FAT 表就可以知道文件在磁盘的具体位置及大小了。
在 DIR 区之后,才是真正意义上的数据存储区,即 DATA 区。数据区DATA 虽然占据了硬盘的绝大部分空间,但没有了前面的各部分,它对于我们来说,也只能是一些枯燥的二进制代码,没有任何意义。在这里有一点要说明的是,我们通常所说的格式化程序(指高级格式化,例如 DOS 下的 Format 程序),并没有把DATA 区的数据清除,只是重写了 FAT 表而已。
至于分区硬盘,也只是修改了 MBR和 OBR,绝大部分的 DATA 区的数据并没有被改变,这也是许多硬盘数据能够得以修复的原因。但即便如此,如 MBR/OBR/FAT/DIR 之一被破坏的话,也足够咱们那些所谓的 DIY老鸟们忙乎半天了……需要提醒大家的是,如果你经常整理磁盘,那么你的数据区的数据可能是连续的。这样即使 MBR/FAT/DIR 全部坏了,我们也可以使用磁盘编辑软件(比如 DOS 下的 Disk Edit),只要找到一个文件的起始保存位置,那么这个文件就有可能被恢复(当然了,这需要一个前提,那就是你没有覆盖这个文件)。
MBR 与 GPT 的特点
− MBR 分区表的一些重要特点:
-
MBR 分区方案使用硬盘的第一个物理扇区中的 64 个字节作为分区表的空间保存硬盘分区信息,每个分区的信息要占 16 个字节。所以,MBR 分区表最多只能保存 4 个分区的分区信息。
-
MBR 分区方案中,有三种类型的分区,主分区、扩展分区和逻辑分区。扩展分区与逻辑分区是为了突破分区表中只能保存 4 个分区的限制而出现的。
-
MBR 分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用。逻辑分区的分区信息保存在扩展分区内而不是保存在 MBR 分区表内,这样,就可以突破MBR 分区表只能保存 4 个分区的限制。
-
16 个字节的分区信息保存有分区活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4 个字节)、分区总扇区数目(4 个字节)等内容。这里最重要的是:分区的起始扇区位置与分区的总扇区数,都是用 4 个字节表示的。
-
一般每个扇区的容量是 512 字节,4 个字节的扇区能表示的最大容量是 2TB,由4 可知,在 MBR 分区表中,分区的起始位置不能大于 2TB,分区的最大容量,也不能大于 2TB。所以,对 2TB 以上容量的物理硬盘,不适合使用 MBR 分区方案。
-
GPT 分区表特点这张图,简明扼要的显示除了 GPT 分区方案的硬盘结构。

首先,你会注意到,这张用 LBA 0、LBA 1 这样的方法来表明硬盘上的地址,这是因为以前一般都是用 chs 方式对硬盘寻址的,现在一般都用 LBA 方式对硬盘寻址,关于chs 与 LBA,不明白且有兴趣专研的读者,可以自行查阅相关资料,对上面这张图来说,LBA 0 指的是物理序号为 0 的第一个扇区,LBA 1 指的是物理序号为 1 的第二个扇区,依次类推。下面比照着上面这张图,解释下 GPT 分区方案。
-
保留 MBR,GPT 的分区方案,硬盘的第一个物理扇区,仍然是一个前面讲过的MBR,这个 MBR 主要是出于软件兼容性的考虑,对 GPT 分区方案本身来讲,其实没有啥意义。
-
GPT 分区表头,这个在保留 MBR 之后,也就是占用第二个物理扇区,GPT 分区表头中,定义了分区的数量,基本上,你可以认为 GPT 分区的数量是没有限制的;
-
GPT 分区表,从第三个扇区开始,是实际的分区表。请注意:每个扇区可以保存4 个分区信息,说明每个分区的分区信息占用的空间是 128 个字节。

来源:四川大学飞扬俱乐部《维修手册》PDF 第 72-77 页(印刷页 71-76)。