且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

更新时间:2022-06-26 05:16:29

本节书摘来自异步社区《NTFS文件系统扇区存储探秘》一书中的第1章,第1.3节,作者:宋群生 , 宋亚琼著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 分区引导记录

NTFS文件系统扇区存储探秘
硬盘的主引导记录只有一个,存储在硬盘的线性0号扇区上。而硬盘的分区引导记录不止一个,每一个逻辑驱动器都有一个分区引导记录。如果将一个硬盘分为C、D、E、F、G5个逻辑驱动器,就应该有5个分区引导记录,分别存储在各个逻辑驱动器的第1个逻辑扇区中。

分区引导记录主要由4部分组成。

(1)BIOS参数记录块BPB(BIOS Parameter Block)。

(2)磁盘标志记录表。

(3)分区引导记录代码区。

(4)结束标志“55 AA”。

与本书内容相关的是第1和第4部分,对第2和第3部分不进行讨论。

BIOS参数记录块BPB(简称BPB表)所记录的有关参数,能帮助操作者确定分区的容量大小、文件分配表FAT的位置和大小、文件目录表FDT的位置。BPB表的结构与使用的文件系统有关,本节讨论FAT16和FAT32两种文件系统的BPB表结构。

结束标志“55 AA”是系统识别引导扇区的标识,也是使用工具程序对硬盘扇区进行搜索,用于寻找分区引导记录所在扇区地址的依据。

1.3.1 FAT16文件系统的BPB表
FAT16文件系统BPB表从扇区字节位移0bH开始,用字节编号计算,就是第12字节,BPB表共占用25字节。

FAT16文件系统BPB表的结构见表1-2。

《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

下面用“读硬盘扇区数据.EXE”程序将一个逻辑驱动器的引导记录读出来,然后结合表1-2进行分析,程序运行界面如图1-4所示。
《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

BPB表占用的字节数较多,各个字段值所表示的内容也较为复杂。为了便于分析,下面将BPB表的内容单独列出来。

《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

从第12字节开始,将25字节按表1-2的格式分为12段,分别进行说明。

第1段是1个字,它的值为200H,等于512,说明每个扇区有512字节。

第2段是1字节,值为64,说明每个簇包含64个扇区,则每个簇的字节数是:

64×512=32768。关于簇的概念,在后面有关章节中再作介绍。

第3段是1个字,值为1,说明有1个保留扇区。

第4段是1字节,值为2,说明有2个FAT表。

第5段是1个字,值为512,说明有512个根目录登记项数。因为每个根目录登记项固定占用32字节,据此可算出FDT表总共占用32个扇区。

第6段是1字,在硬盘中设为0。

第7段是1字节,固定为f8H。

第8段是1个字,值为256,说明每个FAT表占用256个扇区。

第9段是1个字,值为63,说明每个磁道划分成63个扇区。

第10段是1个字,值为255,说明磁头数最大是255,这个数值的含义需要进一步解释。这个参数并不是硬盘的物理磁头数,它是BIOS磁盘服务程序为了管理大容量硬盘,采用位移变换后形成的值。在CHS扇区寻址方式中,柱面用10位二进制数表示,其最大值为1024。硬盘的柱面数一般都超过了1024,因此BIOS磁盘服务程序采用了减少柱面数,增加磁头数的移位算法。

举例说明一下,假如一个硬盘有8192个柱面和16个磁头。很明显在CHS寻址方式中,无法表示全部柱面数。这时由BIOS磁盘服务程序将柱面数换算成8192÷8=1024,将磁头数换算成16×8=128。这样既保证硬盘的容量不变,又能使操作系统或应用程序访问到所有的硬盘扇区。

第11段是1个双字,值为63,说明有63个隐藏扇区。

第12段是1个双字,值为4 192 865,这是逻辑驱动器的总扇区数,但它不包含第11段中的隐藏扇区数。

1.3.2 FAT32文件系统的BPB表
FAT32文件系统BPB表也从扇区字节位移0bH开始,占用53字节。因为FAT16文件系统中的有些磁盘参数在FAT32文件系统中已不适用,必须进行扩充。具体做法是将FAT16文件系统中使用的25字节仍然保留,适用的数据项继续使用,需要扩充的数据项移到后面的28字节里去。目前这28字节只使用了很少一部分,剩下的字节全为0,供系统继续扩充时使用。

FAT32文件系统BPB表的结构见表1-3。

表1-3 FAT32文件系统BPB表的结构**
《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

现在将使用FAT32文件系统的一个逻辑驱动器的引导记录读出来,结合表1-3进行分析。程序运行界面如图1-5所示。

《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

为了便于分析,将BPB表内容分两部分单独列出来,分段进行介绍。

(1)前25字节。

《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

与FAT16的BPB表相同的数据项不再分析,只分析不同的部分。

第2段的值是8,即每簇有8个扇区。可以看出FAT32的簇比FAT16的簇小得多,这就是FAT32能够节省磁盘空间的原因。因为数据是按簇存储的,即使一个很小的文件也必须至少分配给它一个簇的存储空间,这个簇里没有使用的扇区就不能再分配给其他文件使用了。而FAT16的簇比较大,所以浪费的磁盘空间就多一些。

第3段的值是32,即保留了32个扇区。因为FAT32文件系统的引导记录要占用多个扇区,所以将原来的1个保留扇区增加到32个。

第5段和第8段因需要扩充,所以弃之不用,将有关数据转移到后面的28字节里去。

(2)后28字节。

《NTFS文件系统扇区存储探秘》——1.3 分区引导记录

第1段的参数是每个FAT表占用的扇区数,值是7994。可以看出FAT32文件系统的簇虽然小了,但FAT表占用的扇区数却增加了很多。这就是FAT32文件系统的文件检索速度比FAT16文件系统慢的原因。

第3段是根目录起始簇号,值为2。有2个簇被系统占用。

第5段的值是6,说明引导记录占用6个扇区。