jieyujun3 发表于 2007-5-20 23:18:33

数据恢复基础教程-03

数据恢复基础教程-03
第三章:FAT32文件系统的文件管理


FAT文件系统,包括FAT32和FAT16都是利用DBR,FDT和FAT的配合来实现系统对文件的管理。在DBR的参数里定位FDT,然后在FDT相对应的目录登记项里定位文件的起始簇和文件在FAT的簇链,从而管理整个文件系统里的全部文件。
在这一章将以手工查找两个文本文件来对FAT32文件系统的文件管理进行描述。

3.1 查找文件C:\BOOT.INI
这里我们将先找到C:盘的DBR(位于H:01,S:01,C:00,继续使用上一章的硬盘例子。在后面关于FAT文件系统的章节,若无特殊说明都将使用此硬盘为例),从DBR的BIOS参数记录块里找到我们要用于定位FDT的相关参数:
(在WinHex菜单里选择Tool->Open Disk…在View Disk对话框里选择你要打开的Logical Drives或Physical Media点击OK,就可以找开磁盘了。点击Go To Sector按钮,在对话框里选择做如图 的选择,点击OK就可以打开C:盘的DBR。)

Sectors per cluster(Offset:7E0DH):每簇扇区数;
Reserved sectors(Offset:7E0E~7E0FH):保留扇区数;
Number of FATs(Offset:7E10H):FAT的个数;
Sectors per FAT(Offset:7E24~7E27H):每个FAT的扇区数;
Root dir 1st cluster(Offset:7E2C~7E2FH):根目录起始簇
由公式:根目录的FDT起始逻辑扇区= Reserved sectors+ Sectors per FAT*Number of FATs+((Root dir 1st cluster-2)*Sectors per cluster)
得出根目录的FDT起始逻辑扇区,因为各个子目录的FDT位置都要经过其父目录FDT的目录登记项来确定,所以由根目录的FDT开始可以找到所有子目录的FDT。
本例的根目录的FDT起始逻辑扇区=32+9536*2+(2-2)*8=19104=4AA0H。
另外还有一个重要的数据要找到:DATA起始逻辑扇区
由公式:DATA起始逻辑扇区= Reserved sectors+ Sectors per FAT*Number of FATs。
得出DATA起始逻辑扇区=32+9536*2=19104=4AA0H。
注意:这里描述的逻辑扇区是相对于本分区而言的,也就是说本分区的第一个扇区为逻辑扇区0。
(在分区的起始处(H:01,S:01,C:00),点 Go To Offset按钮,在对话框里选择做如图 的选择后点OK,就可以找到根目录的FDT。)
下图是根目录的FDT:

图3.1 根目录FDT,高亮部分为文件BOOT.INI的目录登记项
BOOT.INI的目录登记项:
42 4F 4F 54 20 20 20 20 49 4E 492018 00 00 00
文件名.扩展名(8.3格式)   
21 00 91 3303 0037 6C 8F 33C3 5E       D5 00 00 00
    起始簇号高16位起始簇号低16位    文件长度

从文件BOOT.INI的目录登记项可以找出文件BOOT.INI的起始簇号为:00 03 5E C3H。
由公式:文件的起始逻辑扇区= DATA起始扇区+(Boot.ini文件的起始簇号-2)*8
得出BOOT.INI文件的起始逻辑扇区=32+9536*2+(220867-2)*8=1786024=1B40A8H。
即可以找到文件BOOT.INI的内容:

图3.2 BOOT.INI的内容
因为文件BOOT.INI的大小为D5H=213Bytes没有占满一个扇区,所以无需通过FAT来查找文件余下的内容。

3.2 查找文件C:\sing\ INSTALL.LOG
在根目录FDT里继续向下查找,找到子目录sing的目录登记项:

图3.3 子目录sing的目录登记项
子目录sing的目录登记项:
53 49 4E 47 20 20 20 20 20 20 20 10 08 76 0E A6
9B 33 9B 33 03 00 0F A6 9B 33 38 86 00 00 00 00
和文件BOOT.INI的目录登记项是一致的。在属性字节里值为01H,即表示sing是子目录。在子目录的目录登记项里文件长度的值为0。同样可以找出子目录sing的起始簇号为:00 03 86 38H。
由公式:文件的起始逻辑扇区= DATA起始逻辑扇区+(Boot.ini文件的起始簇号-2)*8
得出子目录sing的起始逻辑扇区=19104 +(230968-2)*8=1866832=1C7C50H
则可找到子目录sing的FDT:

图3.4 子目录sing的FDT,高亮部分为INSTALL.LOG的目录登记项
INSTALL.LOG的目录登记项:
49 4E 53 54 41 4C 4C 20 4C 4F 47 20 00 C1 52 B0
9B 33 9B 33 10 00 FC 49 8F 33 95 8D 14 7A 00 00
INSTALL.LOG的起始簇号为:00 10 8D 95H,文件长度为7A 14H=31252Bytes。
INSTALL.LOG的起始逻辑扇区:DATA起始逻辑扇区+(INSTALL.LOG的起始簇号-2)*8=19104 +(1084821-2)*8=8697656=84B738H
可以看到文件INSTALL.LOG的部分内容:

图3.5 文件INSTALL.LOG的部分内容
这里找到文件INSTALL.LOG的第一个簇(8个扇区)的512*8=4096Bytes的内容,还有4096+4096+4096+4096+4096+4096+2580Bytes其它7个簇,下面查找余下的簇的内容。
找下一个簇要通过FAT了:
FAT就在DBR的后面(从保留扇区Reserved sectors后面的第1个扇区开始,本例是从第33扇区开始,即逻辑扇区32)。
INSTALL.LOG从1084821簇开始,在FAT里对应在Offset:1084821*4=4339284=423654H找INSTALL.LOG在FAT的入口及簇链。
(在FAT的起始处,点 Go To Offset按钮,在对话框里选择做如图 的选择后点OK,就可以找到INSTALL.LOG在FAT的入口及簇链。)
INSTALL.LOG在FAT的入口及簇链:

图3.6 INSTALL.LOG在FAT的入口及簇链
图中高亮处为INSTALL.LOG在FAT中的簇链/登记项(每4个字节(FAT32,32位)为一个登记项),其中FF FF FF 0F是文件EOF标志。也就是说文件到第00 10 8D 9CH簇就结束了。
可知INSTALL.LOG的下一个簇号为:00 10 8D 96H
下一个簇起始逻辑扇区:DATA起始逻辑扇区+(簇号-2)*8=19104 +(1084822-2)*8=8697664=84B740H

图3.7文件INSTALL.LOG的部分内容
就这样,顺着簇链就可以找到文件的全部内容。FAT中的记录INSTALL.LOG分为余下7个簇放置,在FAT里可以看出此文件是连续存放的,但如不是连续存放的也是一样查找的。

图3.8文件INSTALL.LOG的最后一个簇的内容

3.3 关于FAT16
在FAT16的文件管理里需要注意以下不同点:
FAT16分区的数据区域分布:
DBR——FAT1——FAT2——FDT——DATA
DBR一般占2个扇区。结构较FAT32简单,没有备份。
FAT就在DBR的后面,FAT起始标志为F8 FF FF FF,FAT中的以2个字节(FAT16,16位)为一个登记项,文件结束标志为FF FF。
FDT(根目录的)固定在FAT2后, 32个扇区,所以FAT16的根目录最多可以有32*512/32=512个项目。在FAT32里没有固定的FDT,其目录登记项也作为数据存放于DATA区所以FAT32的根目录项目数量没有限制。

balldn 发表于 2008-12-19 13:53:19

怎没人支持的?。。
   我坐沙发!

mahuafeng 发表于 2008-12-20 21:57:08

谢谢下谢谢嘻嘻嘻嘻嘻嘻嘻嘻嘻嘻

hdd_player 发表于 2008-12-23 15:46:39

学习中!!谢谢分享!!

andyjeff2008 发表于 2008-12-23 18:12:06

不错不错,学习了(39: (39: (39:

xunjiejimao 发表于 2009-4-16 19:29:13

怎么看不到图文中所说的图

mycctv12 发表于 2010-6-5 14:56:55

路过来看下

bg5hqf 发表于 2010-6-5 23:13:59

不错不错,学习了

pengyou1236 发表于 2011-3-20 22:55:42

能否把前面的几章发表下,那这篇我们就好理解了!
页: [1]
查看完整版本: 数据恢复基础教程-03