数据恢复入门二

[复制链接]

该用户从未签到

23

主题

219

回帖

227

积分

[INTOHARD]排长

Rank: 3Rank: 3

积分
227
发表于 2007-5-20 23:17:32 | 显示全部楼层 |阅读模式
  第二章:FAT32/16文件系统数据布局


这一章将描述FAT32/16文件系统在硬盘的数据布局。因为FAT32是FAT16的发展,在文件管理的原理与数据布局是基本相同的,所以这一章节将主要以FAT32文件系统为例描述FAT文件系统的相关知识。在后面关于FAT文件系统的几个章节里也将以FAT32文件系统为例,并在阐述FAT32文件系统的过程中穿插解说FAT16与FAT32不同的地方,使读者能在了解FAT32文件系统的同时掌握FAT16文件系统。

2.1 数据布局
FAT32文件系统在硬盘的数据存储区域布局如下图:
MBR——DBR——FAT1——FAT2——DATA
而FAT16文件系统则如下:
MBR——DBR——FAT1——FAT2——FDT——DATA
                                          *
MBR:Master Boot Record,主引导记录;
DBR:DOS Boot Record,分区引导记录;
BPB:BIOS Parameter Block,BIOS参数记录块;
FAT:File Allocation Table,文件分配表;
FDT:File Directory Table,文件目录表;

*在FAT32里没有固定的FDT,其在第2个FAT表后就是DATA区。其中目录和文件的登记项也作为数据存放于DATA区,也就是说各目录和文件的FDT在DATA区里,位置不定。而在FAT16里FDT(根目录的)固定在FAT2后, 32个扇区,所以FAT16的根目录最多可以有32*512/32=512个项目。

2.2 硬盘数据存储区域

2.2.1 MBR(Master Boot Record,主引导记录)
MBR(Master Boot Record,主引导记录)位于整个硬盘的H(Head):0,S(Sector):1,C(Cylinder):0,占63个扇区(其实中用了第一个扇区的512Bytes)。 MBR是相对操作系统独立的,无论在FAT、NTFS还是在Ext2/Ext3文件系统里硬盘的H:0,S:1,C:0都是系统的MBR。
下面是一个MBR例子:


图2.1 MBR
在MBR里主引导程序占用前446 Bytes(Offset:0~1BDH),随后的64 Bytes(Offset:1BE~1FDH)为重要的DPT(DPT:Disk Partition Table,磁盘分区表),MBR的后最后两个字节为:“55 AA”为引导扇区有效结束标志。每个MBR/EBR、DBR的有效结束标志均为55 AA。所以在MBR损坏后,可通过以55 AA为特征字符串查找各DBR,以此手工重建MBR。
下面详细说明DPT:
DPT每16Bytes一项,对应一个分区,共4项。
80  01 01 00  0B  FE BF 60  3F 00 00 00  E2 48 95 00
①    ②   ③    ④      ⑤       ⑥
00 00 81 61 0F  FE FF FF  21 49 95 00 9F CB 94 00
            ⑦
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
①Boot标志,若为80H则为活动分区,反之为00H。
②分区起始的H、S、C,其中从左向右第1个字节为H,第2个字节的低6位表示S,它的高2位与第3个字节组成10位表示C(注意:存储顺序低字节在前,高字节在后)。
③文件系统的ID值。
④分区终止的H、S、C,组成与②相同。
⑤分区前的扇区总数。
⑥分区内的扇区总数。
⑦注意这里,H,S,C已经到了它们的最大值,所以磁盘将使用LBA方式来定位磁盘。LBA方式依此值——分区前的扇区总数来计算LBA,从而定位磁盘。此值就是扩展分区的LBA地址,亦即扩展分区从逻辑扇区9783585开始,注意:LBA从0开始编号。
由上面分析可得出数据:
第一个分区项:Boot标志:yes,分区起始H:01,起始S:01,起始C:00,分区文件系统的ID:0B,FAT32,分区终止H:254,终止S:63,终止C:608,分区前的扇区总数:63,分区内的扇区总数:9783522。
第二个分区项:Boot标志:no,分区起始H:00,起始S:01,起始C:609,分区文件系统的ID:0F,Win95 Extended,分区终止H:254,终止S:63,终止C:1023,分区前的扇区总数:9783585,分区内的扇区总数:9751455。
这里要说明的是:通过MBR定义的分区表,最多只能有4个分区,但在扩展分区的第一个扇区里还有扩展分区的MBR—— extended MBR(EBR)、虚拟MBR。而EBR就是为突破MBR只能定义4个分区的分区描述方法。EBR就是让MBR在定义分区的时候,将多余的容量定义为扩展分区,指定该扩展分区的起始位置,根据起始位置指向的硬盘的某一个扇区,作为下一个分区表项,接着在该分区继续定义分区。如果只有一个分区就定义该分区,然后结束。如果不止一个分区,就定义一个基本分区和一个扩展分区,扩展分区再指向下一个分区描述扇区,在该扇区按上述原则继续定义分区,直至分区定义结束。即在扩展分区的起始扇区上都建立一个EBR,每一个EBR用于扩展分区上的一个逻辑分区。下图为逻辑盘与分区表链的关系:

图2.2 逻辑盘与分区表链的关系
在本文例子可知EBR位于H:00,S:01,C:609,LBA=9783585内容如下:

图2.3 EBR
EBR里从Offset:12A924200~12A9243BDH都是“0”(图中省略了一部分“0”)也就是说EBR的引导记录部分是没有意义的。下面是EBR里的DPT:
00 01 81 61 0B FE FF FF 3F 00 00 00 60 CB 94 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
这里描述的扩展分区里只有一个逻辑分区(没有定义下一个扩展分区)。

2.2.2 DBR(DOS Boot Record,分区引导记录)
由MBR的分区表项1可以知道第一分区(C:盘)起始H:01,起始S:01,起始C:00,DBR位于分区的起始第一个扇区也就是H:01,S:01,C:00,DBR有四部分组成:
(1)     BPB(BIOS Parameter Block,BIOS参数记录块);
(2)     磁盘标志记录表;
(3)     分区引导记录代码区;
(4)     结束标志55 AA。
如下图:

图2.4 DBR,其中高亮区域为PBP
在DBR里的重要的参数很多,在这里我使用winhex12.5 SR-5里的模板功能来提取DBR里重要信息,并对其进行分析(在后面的教程里都将使用WinHex12.5 SR-5强大的模板功能提取元数据结构的信息):

图2.5 BIOS参数记录块。(图中的Offset与图2.4DBR里的Offset是对应的)
Offset            含义
7E00~7E02H  JMP instruction,跳转指令
7E03~7EAH  OEM,厂商标识与版本
BIOS参数记录块:
7E0B~7E0CH  Bytes per sector,每扇区字节数
7E0DH      Sectors per cluster,每簇扇区数
7E0E~7E0FH  Reserved sectors,保留扇区数
7E10H        Number of FATs,FAT个数
7E11~7E12H  Root entries (unused),根目入口数(现已不用)
7E13~7E14H  Sectors (on small volumes),扇区总数(小卷,小于32MBytes)
7E15H        Media descriptor (hex),介质描述符(F8H为硬盘)*
7E16~7E17H  Sectors per FAT (small vol.),每个FAT扇区数(小卷,小于32Mbytes)
7E18~7E19H  Sectors per track,每磁道扇区数
7E1A~7E1BH  Heads,逻辑磁头数
7E1C~7E1FH  Hidden sectors,隐含扇区数
7E20~7E23H  Sectors (on large volumes),扇区总数(大卷,大于32MBytes)
     
FAT32段:
7E24~7E27H  Sectors per FAT,每个FAT扇区数
7E28~7E29H  Flags,标记
7E2A~7E2BH  Version,版本
7E2C~7E2FH  Root dir 1st cluster,根目录起始簇号
7E30~7E31H  FSInfo sector,FS信息扇区
7E32~7E33H  Backup boot sector,备份引导扇区的位置,DBR损坏就可以用此备份修复
7E34~7E3FH  (Reserved),保留
     
7E40H        BIOS drive (hex, HD=8x),BIOS驱动器,硬盘为81~84H,其中80H为第一个硬盘。85~86H为光驱)
7E41H      (Unused),现已不用
7E42H        Ext. boot signature (29h),扩展引导标志
7E43~7E46H  Volume serial number (decimal),卷序列号(十进制)
7E43~7E46H  Volume serial number (hex),卷序列号(十六进制)
7E47~7E51H  Volume label,卷标
7E52~7E5AH  File system,文件系统

7FFE~7EFFH  Signature (55 AA),结束标志55 AA

*介质描述符含义:F8H:硬盘,F9H:双面5.25英寸(15扇区高密度)/3.5英寸高密度软盘,FAH:双面3.5英寸软盘RAM虚拟盘,FCH:单面5.25英寸软盘(9扇区高密度)/双面8英寸软盘,FDH:双面5.25英寸软盘(9扇区低密度),FEH:单面8英寸软盘(高、低密度)/单面5.25英寸软盘(8扇区低密度),FFH:双面5.25英寸软盘(8扇区低密度)。
(在FAT16的DBR里其BIOS参数记录块的结构较为简单,结构如下:
   hex 3   JMP instruction,跳转指令
     char[8]   OEM,厂商标识与版本

BIOS参数记录块:
     uint16    Bytes per sector,每扇区字节数
     uint8     Sectors per cluster,每簇扇区数
     uint16    Reserved sectors,保留扇区数
     uint8     Number of FATs,FAT个数
     uint16    Root entries,根目入口数
     uint16    Sectors (under 32 MB) ,扇区总数(小于32MBytes)
     hex 1    Media descriptor (hex) ,介质描述符(F8H为硬盘)
     uint16    Sectors per FAT,每个FAT扇区数
     uint16    Sectors per track,每磁道扇区数
     uint16    Heads,逻辑磁头数
     uint32    Hidden sectors,隐含扇区数
     uint32    Sectors (over 32 MB) ,扇区总数(大于32MBytes)

     hex 1    BIOS drive (hex, HD=8x) ,BIOS驱动器
     uint8    (Unused),不用
     hex 1    Ext. boot signature (29h) ,扩展引导标志
     uint32    Volume serial number (decimal) ,卷序列号(十进制)
     [hex 4    Volume serial number (hex)] ,卷序列号(十六进制)
     char[11]  Volume label,卷标
     char[8]   File system,文件系统

     hex 2    Signature (55 AA) ,结束标志55 AA
另外,在FAT16里DBR没有像FAT32那样有备份。)

2.2.3 FAT(File Allocation Table,文件分配表)
FAT是文件系统用来记录每个文件的存储位置的表格,它以簇链的方式存放文件所占用的簇号。在文件系统里有2个FAT,FAT2是FAT1的完整备份,如果FAT1损坏后可以用FAT2进行恢复。FAT1位于DBR的后面,在FAT32是从保留扇区(Reserved sectors)后面的第1个扇区开始,而FAT2位于FAT1的后面。
下图是FAT的一部分:

图2.6 FAT
F8 FF FF 0F 是FAT起始标志,在FAT32里每4个字节(FAT32,32位)为一个登记项。在32位的登记项里值的含义如下:00000000H:未使用的簇,00000002~FFFFFF00H:已分配的簇号,FFFFFFF0~FFFFFFF6H:保留,FFFFFFF7H:坏簇,FFFFFF0FH:文件EOF标志。在FAT里,每一个登记项的值表明文件存储在磁盘的下一个簇号。文件的起始簇号是存放在文件所在的FDT目录登记项中的,而文件的起始簇号等于文件在FAT里起始的登记项位置(在后面的章节还将详细讨论这个关系)。
在DBR损坏后查找FAT可以F8 FF FF 0F此特征字符串作为查找对象,从而找到FAT。
(在FAT16,FAT1就在DBR的后面,也是从保留扇区(Reserved sectors)后面的第1个扇区开始,不过在FAT16里保留扇区一般为2。在FAT1后面也是FAT2。FAT起始标志为F8 FF FF FF,FAT中以2个字节(FAT16,16位)为一个登记项,文件结束标志为FF FF。)

2.2.4 FDT(File Directory Table,文件目录表)
FDT由目录登记项组成,每个目录登记项为32Bytes。在FAT32里没有固定的FDT,其目录登记项也作为文件数据存放于DATA区。根目录和各个子目录都在DATA区里有自己的FDT。其中根目录的起始逻辑扇区= Reserved sectors+ Sectors per FAT*Number of FATs+((Root dir 1st cluster-2)*Sectors per cluster),而各个子目录的FDT位置都要经过其父目录FDT的目录登记项来确定。所以根目录的FDT是最重要的。在作者所用的例子里根目录的起始逻辑扇区= Reserved sectors+ Sectors per FAT*Number of FATs+((Root dir 1st cluster-2)*Sectors per cluster) =32+9536*2+(2-2)*8=19104=4AA0H,各个重要参数的值可以从DBR里的BIOS参数记录块里找到。下面是根目录的FDT:

图2.7 根目录FDT,高亮部分为文件BOOT.INI的目录登记项
以图中BOOT.INI的目录登记项给予说明:
42 4F 4F 54 20 20 20 20 49 4E 49  20  18  00 00 00
        ①                      ②     ③
21 00  91 33  03 00  37 6C  8F 33  C3 5E  D5 00 00 00
④      ⑤    ⑥     ⑦    ⑧    ⑨       ⑩

①文件名.扩展名(8.3格式),若有剩余的字节用20H填充。
②属性字节:字节的低6位表示文文件件相关属性。000000:读写;000001:只读;000010:隐藏;000100:系统;001000:卷标;010000:子目录;100000:归档。如果此字节为0FH则此目录登记项为长文件名目录登记项,一个长文件名需要若干个这样的目录登记项组成。若目录登记项为长文件名目录登记项,则目录登记项含义为:顺序字节(1Bytes)——长文件名节(10Bytes)——0F 00——校验和(1Bytes)——长文件名节(12Bytes)——00 00 00 00——长文件名节(4Bytes),长文件名节使用Unicode格式记录文件名。其中组成长文件名目录登记项的最后一项与短文件名目录登记项含义一致,即将长文件名以(长文件名前6个字符~1.扩展名)的形式表示其短文件名称。在这里读者可以参考图2.7中Offset:95BFC0~95BFF0H处Program Files目录的长文件名目录登记项来理解。
③文件创建时间。各个位的含义为(字节从右至左排列):
7 6 5 4 3  2 1 0  7 6 5  4 3 2 1 0      7 6 5 4 3 2 1 0
  小时      分钟    秒,以2秒为单位  精确到10ms的创建秒数
④文件创建日期。各个位的含义为(字节从右至左排列):
7 6 5 4 3 2 1    0  7 6 5 4 3 2 1 0
0 0 0 0 0 0 0    0  0 0 1 0 0 0 0 1 B  00 21H
相对1980年的年份    月     日
⑤最近访问日期。各个位的含义同④。
⑥文件起始簇号的高16位。
⑦最近更新时间。各个位的含义同③中的时、分、秒。
⑧最近更新日期。各个位的含义同④。
⑨文件起始簇号的低16位。
⑩文件大小,以字节为单位。
(在FAT16里目录登记项和FAT32的差别不大,其目录登记项如下:
42 4F 4F 54 20 20 20 20 49 4E 49  20  00 00 00 00
        ①                       ②    ③
00 00 00 00 00 00  37 6C  8F 33  C3 5E  D5 00 00 00
    ④                 ⑤    ⑥     ⑦     ⑧   
①文件名.扩展名(8.3格式),若有剩余的字节用20H填充。
②属性字节:字节的低6位表示文文件件相关属性。000000:读写;000001:只读;000010:隐藏;000100:系统;001000:卷标;010000:子目录;100000:归档。
③保留未用。
④保留未用。
⑤文件创建时间,各个位的含义同FAT32里的创建时间,但没有精确到10ms的创建秒数字节。
⑥文件创建日期。各个位的含义同FAT32里的创建日期。
⑦文件起始簇号。
⑧文件大小。

2.2.5 DATA
DATA为文件系统的数据区。用于实际存储文件数据,其组织与管理由系统根据MBR、DBR、FAT、FDT的内容来完成。

2.3小结
在本章里主要描述FAT32/16文件系统在硬盘的数据布局

该用户从未签到

0

主题

33

回帖

50

积分

[INTOHARD]班长

Rank: 2

积分
50
发表于 2007-5-26 15:22:02 | 显示全部楼层
基础文章,继续支持楼主!

该用户从未签到

10

主题

59

回帖

114

积分

[INTOHARD]班长

Rank: 2

积分
114
发表于 2008-1-15 11:40:40 | 显示全部楼层
写的不错,楼主继续!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表