作者: 北亚数据恢复中心
我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位的,哪怕这个文件只有1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,每个表项占1.5个字节(磁盘空间在10MB以下)或2个字节(磁盘空间在10MB以上)。为了方便起见,以后所说的表项都是指2个字节的。
FAT表的开始由介质描述符+一串“已占用”标志组成:
FAT16硬盘----F8 FF FF 7F
FAT32硬盘----F8 FF FF 0F FF FF FF 0F
每个有效的FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
文件分配表结构如1(H表示16进制)
FAT16硬盘----F8 FF FF 7F
FAT32硬盘----F8 FF FF 0F FF FF FF 0F
每个有效的FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
文件分配表结构如1(H表示16进制)
表1
第0字节 表头,表磁盘类型。FFH双面软盘,每次道8扇区FEH单面软盘,每磁道8扇区FDH双面软盘,每磁道9扇区FCCH单面软盘,每磁道9扇区FC8H硬盘
第1~2字节 (表项号1)表示第一簇状态,因第一簇被系统占据,故此两字节为FFFFH
第3~4字节 (表项号2)表示第二簇状态,若为FFFH表此簇为坏的,DOS已标记为不能用;0000H表示此簇为空,可以用;FFF8H表不能示该簇为文件的最后一簇;其余数字表示文件的下一个簇号,注意高字节在后,低字节在前。
第0字节 表头,表磁盘类型。FFH双面软盘,每次道8扇区FEH单面软盘,每磁道8扇区FDH双面软盘,每磁道9扇区FCCH单面软盘,每磁道9扇区FC8H硬盘
第1~2字节 (表项号1)表示第一簇状态,因第一簇被系统占据,故此两字节为FFFFH
第3~4字节 (表项号2)表示第二簇状态,若为FFFH表此簇为坏的,DOS已标记为不能用;0000H表示此簇为空,可以用;FFF8H表不能示该簇为文件的最后一簇;其余数字表示文件的下一个簇号,注意高字节在后,低字节在前。
第5~6字节 (表项号3)表示第三簇状态,同上。
注意:
不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。高字节在后,低字节在前是一种存储数字方式,读出时应对其进行调整。是如两字节12H,34H,应调整为3412H。
不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。高字节在后,低字节在前是一种存储数字方式,读出时应对其进行调整。是如两字节12H,34H,应调整为3412H。
文件分配表与文件目录(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘上哪些簇是坏的或已被使用,哪些簇可以用,并存储每个文件所使用的簇号。它是文件的“总调度师”。
当DOS写文件时,首先在文件目录中检查是否有相同文件名,若无则使用一个文件目录表项,然后依次检测FAT中的每个表项对应的簇中,同时将该簇号写入文件目录表项相的26-27字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找到的表项中,如此直到文件结束,在最后一簇的表项里填上FFF8H,形成单向链表。
DOS删除文件时只是把文件目录表中的该文件的表项第0个字节改为E5H,表此项已被删除,并在文件分配表中把该文件占用的各簇的表项清0,并释放空间。其文件的内容仍然在盘上,并没有被真正删除,文件分配表在系统中的地位十分重要,用户最好不要去修改它,以免误操作带来严重的后果。
典型的FAT32表:
F8 FF FF FF FF FF FF FF 96 C4 00 00 FF FF FF 0F
FF FF FF 0F 06 00 00 00 FF FF FF 0F 08 00 00 00
09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00
0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00
FF FF FF 0F 00 00 00 00 FF FF FF 0F 14 00 00 00
15 00 00 00 FF FF FF 0F FF FF FF 0F FF FF FF 0F
19 00 00 00 1A 00 00 00 1B 00 00 00 FF FF FF 0F
00 00 00 00 1E 00 00 00 FF FF FF 0F 20 00 00 00
FF FF FF 0F 22 00 00 00 23 00 00 00 24 00 00 00
25 00 00 00 26 00 00 00 27 00 00 00 28 00 00 00
F8 FF FF FF FF FF FF FF 96 C4 00 00 FF FF FF 0F
FF FF FF 0F 06 00 00 00 FF FF FF 0F 08 00 00 00
09 00 00 00 0A 00 00 00 0B 00 00 00 0C 00 00 00
0D 00 00 00 0E 00 00 00 0F 00 00 00 10 00 00 00
FF FF FF 0F 00 00 00 00 FF FF FF 0F 14 00 00 00
15 00 00 00 FF FF FF 0F FF FF FF 0F FF FF FF 0F
19 00 00 00 1A 00 00 00 1B 00 00 00 FF FF FF 0F
00 00 00 00 1E 00 00 00 FF FF FF 0F 20 00 00 00
FF FF FF 0F 22 00 00 00 23 00 00 00 24 00 00 00
25 00 00 00 26 00 00 00 27 00 00 00 28 00 00 00
文件目录表(File Directory Table),即根目录区,又称为ROOT区:
紧跟在FAT2的下一个扇区,长度为32个扇区(256个表项)。如果支持长文件名,则每个表项为64个字节,其中,前32个字节为长文件链接说明;后32个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为32个字节的属性说明。
紧跟在FAT2的下一个扇区,长度为32个扇区(256个表项)。如果支持长文件名,则每个表项为64个字节,其中,前32个字节为长文件链接说明;后32个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为32个字节的属性说明。
值得注意的是:
1,FAT32没有储存目录的目录区,而 FAT16储存根目录并把子目录放到数据区。
2,表示目录的目录项指出根目录地址同时长度字节为0,表示文件的目录项指出数据地址。
典型的FAT32根目录:
30 30 30 30 30 30 20 20 20 20 20 10 00 12 3C 7C
39 2B 39 2B 05 00 3D 7C 39 2B 3A 34 00 00 00 00
30 30 30 30 30 30 20 20 20 20 20 10 00 12 3C 7C
39 2B 39 2B 05 00 3D 7C 39 2B 3A 34 00 00 00 00
44 4D 32 4B 44 49 53 4B 49 4D 47 20 00 96 DB 40
39 2B 39 2B 0A 00 DC 40 39 2B 88 02 5B 72 13 00
39 2B 39 2B 0A 00 DC 40 39 2B 88 02 5B 72 13 00
42 49 4E 42 49 4E 20 20 20 20 20 08 00 00 00 00
00 00 00 00 00 00 47 65 09 2B 00 00 00 00 00 00
00 00 00 00 00 00 47 65 09 2B 00 00 00 00 00 00
000000子目录
E5H表示被删除,被删除文件仍旧能够找到开始簇,数据恢复就依靠这一特点。
数据区(Data Area): 紧跟在FDT的下一个扇区,直到逻辑盘的结束地址。由上图可以想到,即使目录被破坏仍旧可能从磁盘里把信息读出。
数据区(Data Area): 紧跟在FDT的下一个扇区,直到逻辑盘的结束地址。由上图可以想到,即使目录被破坏仍旧可能从磁盘里把信息读出。
数据恢复主要是手动找出FAT、目录、数据的对应关系或直接找到数据。
转载于:https://blog.51cto.com/508239/144027