FAT32文件系统.docx

上传人:b****6 文档编号:8682353 上传时间:2023-02-01 格式:DOCX 页数:20 大小:671.59KB
下载 相关 举报
FAT32文件系统.docx_第1页
第1页 / 共20页
FAT32文件系统.docx_第2页
第2页 / 共20页
FAT32文件系统.docx_第3页
第3页 / 共20页
FAT32文件系统.docx_第4页
第4页 / 共20页
FAT32文件系统.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

FAT32文件系统.docx

《FAT32文件系统.docx》由会员分享,可在线阅读,更多相关《FAT32文件系统.docx(20页珍藏版)》请在冰豆网上搜索。

FAT32文件系统.docx

FAT32文件系统

FAT32文件系统研究

一、从分区表开始 

硬盘为什么要分区,个人看法是资料管理更方便。

分区的概念是死老外提出来的,但是死老外真的就是死老外,你看他们出的机器,他愣就不给你分,一个硬盘有多大他就给你搞多大个区,搞的你所有资料都放一个盘,一旦系统崩溃,那个烦啊。

(其实这也叫分了区,只不过只有一个而已。

)Dell更过分,你想分成你希望的分区还得加服务费100大元整,我倒,1分钟搞定的事,收100!

RMB真的贬值了!

废话不多说,下面说正题。

先上图:

 

图一 

这是分区表的最后80字节,分区表从地址:

1BEH处开始,每16字节为一个分区项,最后的1FE开始的55AA两个是结束的意思。

这在其他如DBR等里面也是一样的意思。

 

下面来解释下分区项的含义。

 

偏移

长度

含义

1BE

1字节

0

磁盘激活标记,80激活,00未激活

1BF

1字节

1

分区起始磁头

1C0

6Byte

1

分区起始扇区,低0-5位为扇区数,高6-7位用作柱面的高二位

1C1

10Byte

1

分区起始柱面,前一字节的后二位一起用来表示柱面数

1C2

1字节

0B

分区格式,分区的类型,如0B表示FAT32

1C3

1字节

FE

分区结束磁头

1C4

6Byte

3F

分区结束扇区,含义同起始扇区

1C5

10Byte

7F

分区结束柱面,含义同起始柱面

1C6

4字节

3F

分区起始逻辑扇区

1CA

4字节

1F6041

分区总扇区

事实上,起始磁头柱面扇区以及结束磁头柱面扇区从Win98(貌似是,不记得了)开始就没有实际含义,因为CHS寻址方式因最大只能寻址到8.4G,(原因?

自己可以计算下看看)从这版的系统开始,使用的是LBA寻址方式,也即线性寻址方式。

以前采用28位的LBA,因此又有128G的限制,或者说137G限制。

为什么128G或者137G呢?

那你看看120G的硬盘格式化出来是多大就知道了。

现在的硬盘都很大,为了全部使用,因此出现了48位LBA。

好了,不扯远了,继续我们的话题。

 

从图一可以看出,如果硬盘分区全部是主分区的话,只能有4个,而如果采用主分区+扩展分区的方式,则可以有3个主分区+无限逻辑分区的可能。

因为扩展分区也采用了类似分区表的方式表示方法,采用一个链表来指向下一个逻辑分区。

 

虽然不再采用CHS而采用了LBA方式,但还是遵循不能跨越柱面的原则,即保留扇区加本分区总扇区数是柱面容量的整数倍。

柱面容量是255×63。

 

在Winhex中,也可以看到分区项的含义:

 

 

图二 

以下是常见的分区类型:

 

00

空,DOS或Windows不允许使用,视为非法

5C

Priam Edisk

01

FAT12

61

Speed Stor

02

XENIX root

63

GNU HURD or Sys

03

XENIX usr

64

Novell Netware

06

FAT16 04 表示分区小于32M

65

Novell Netware

07

HPFS / NTFS

70

Disk Secure Mult

08

AIX

75

PC/IX

09

AIX bootable

80

Old Minix

0A

OS/2 Boot Manage

81

Minix/Old Linux

0B

Win95 FAT32

82

Linux swap

0C

Win95 FAT32

83

Linux

0E

Win95 FAT16

84

0s/2 hidden C:

0F

Win95 Extended(大于 8GB)

85

Linux extended

10

OPUS

86

NTFS volume set

11

Hidden FAT12

87

NTFS volume set

12

Compaq diagmost

93

Amoeba

16

Hidden FAT16

94

Amoeba BBT

14

Hidden FAT16<32MB

A0

IBM Thinkpad hidden

17

Hidden HPFS/NTFS

A5

BSD/386

18

AST Windows swap

A6

Open BSD

1B

Hidden FAT32

A7

NextSTEP

1C

Hidden FAT32 partition (using LBA-mode INT 13 extensions)

B7

BSDI fs

B8

BSDI swap

1E

Hidden LBA VFAT partition

BE

Solaris boot partition

24

NEC DOS

C0

DR-DOS/Novell DOS secured partition

3C

Partitio Magic

C1

DRDOS/sec

40

Venix 80286

C4

DRDOS/sec

41

PPC Perp Boot

C6

DRDOS/sec

42

NTFS动态分区

C7

Syrinx

4D

QNX4.x

DB

CP/M/CTOS

4E

QNX4.x 2nd part

E1

DOS access

4F

QNX4.x 3rd part

E3

DOS r/0

50

OnTrack DM

E4

Speedstor

51

OnTrack DM6 Aux

EB

BeoS fs

52

CP/M

F1

SpeedStor

53

OnTrack DM6 Aux

F2

DOS 3.3+secondary partition

54

OnTrack DM6

F4

SpeedStor

55

EZ-Drive

FE

LAN step

56

Golden Bow

FF

BBT

 

 

好了,今天来个不那么空洞的。

下面以一个误Ghost的硬盘为例子来说一下分区表的恢复。

 以前我曾有个帖子:

看下图,这是一个被误ghost的硬盘,现在仅显示一个分区,误操作前,硬盘有3个区,除C以外都是FAT32。

 

?

?

图一 

?

 

其实这个用那个分区医生,(貌似还有个易我分区医生,不过明眼人一看就知道是怎么回事,呵呵),可以很快找出来,不过既然是研究嘛,咱就纯手工做一回,这样能加深对分区表的认识。

另外分区医生做了以后就没有C盘了,得重装系统。

(其实也可以手工改)。

 

好了,我们把这个硬盘挂到另外一台电脑上去,打开winhex,点开菜单,搜索——查找十六进制数值,这里有两种搜索方式,一种是搜索55AA,勾选条件:

偏移计算8225280=510,为什么?

虽然现在是LBA寻址,但是,有一个条件仍然是存在的,就是不能跨越柱面。

所以,每柱面255磁头,每磁头63扇,每扇区512字节来计算,255*63*512=8225280,由于55AA出现在柱面的倒数2字节,因此余数为510。

同时勾选列出搜索结果,这样搜索的结果就记录在位置管理器。

第二种方法是搜索EBFE90或EB5890,这是FAT32的DBR的前三个字节。

其中EBFE90是DM分区的标志,EB5890是微软的工具分区的标志。

这里我们搜索DBR标志,先搜索EB5890,10分钟完毕,额,没有。

那换成EBFE90,几分钟后,提示找到4个。

如下图:

 

?

?

 

图二                         图三 

?

图四 

为什么是4个呢?

计算下,(2542A0A00-25429FE00)/200=6,(5D2684A00-5D2683E00)/200=6,这就是原因了,?

FAT32的备份位于DBR之后的第6扇区,所以第2、4个是第1、3个的备份。

找到第一个位置,再往前翻63扇区,可以看到以下内容:

图五

是不是很像分区表,再往前一个扇区,可以看到以下内容:

图六 

?

 这个是一个NTFS的DBR的备份,为了验证这是我们要找的东西,可以搜索55AA标志,可以看到,这样搜索的结果也是正好在这个位置,绝对扇区位置:

19535040。

好的,返回到第1,3个DBR的位置,记录下偏移20的数值,FAT32偏移20处的含义就是该区的扇区总数,也即该分区的大小,这里分别是:

E11EBF01,06A21602,因为这个记录是高位在前地位在后,反过来就是:

1BF1EE1,216A206,转化成10进制就是,29302497,35037702,好了,有这两个数字,我们就来修改分区表了。

打开winhex的下拉三角形,选分区一,分区表模板。

如下图:

?

图七

先将这两个数值填到Partition Table Entry #2 ,Partition Table Entry #3的Sectors in partition。

然后我们再来计算第一个分区的大小25429FE00/200-3F=12A14C0,再减去分区表的63扇区,12A14C0-3F=12A1481,十进制就是19534977,这个数填入第一个分区表项的,Sector in partition,然后转到偏移的7E00,或者直接定位DBR模板,将Total Sectors改成这个数值。

然后再来修改第二项的Sectors preceding partition 2,也就是分区之前的扇区数,只个数值=第一分区表+第一分区总扇区数+第二分区表项。

那么就=63+19534977+63=19535103。

类似计算处第三分区表项的此数值:

19535103+29302497+63=48867663。

再修改,Partition 

Type Indeicator,FAT32是0B,分别填入,然后保存。

其余数值呢?

没有实际含义,不理他了。

可能你会问:

如果原来是扩展分区呢?

无所谓了,只要你定位了分区表就行了,反正一个表里面可以有4个分区项,这也是为什么主分区不能超过四个的原因,因为这里只能有4个,超过了就得靠扩展分区来定位了。

好了,保存以后我们重启电脑看看。

 

图八

再看看文件 

?

?

图九

都能访问,呵呵。

挂到原来的电脑上看看能启动吗?

呵呵,居然能啊!

成功。

OK,今天就到这里了,有空再继续研究FAT32的DBR。

三、DBR结构 

闲话少说,先上图:

 

图一

先来说说他的含义:

偏移

字节

含义

备 注

00H

3

引导代码

微软分区工具是EB5890,DM是EBFE90

03H

8

厂商标志及DOS版本号

 

0BH

2

每扇区字节数

一般为512(200H)

0DH

1

每簇扇区数(10的整数倍)

此处为16(10H)

0EH

2

DBR大小

FAT32一般是32

10H

1

FAT的个数

一般是2

11H

2

根目录数

早期的FAT16是256,FAT32开始没有含义

13H

2

扇区总数

FAT16(小于32MB的区)

15H

1

介质描述

F8表示硬盘

16H

2

每个FAT的扇区数

FAT16的

18H

2

每磁道扇区数

一定是63

1AH

2

逻辑磁头数

一定是255

1CH

2

分区的隐藏扇区数

对于主分区来说,此处为该分区之前的扇区,扩展分区则是MBR到DBR的扇区数

20H

4

扇区总数

大于32MB的FAT32分区此处为29302497(1BF1EE1)

24H

4

FAT表占的扇区数

FAT32的,此处为14294(37D6)

28H

2

标记

 

2AH

 

版本

 

2CH

4

引导目录第一簇,即根目录的起始簇

此处为2

30H

2

BOOT本身占用的扇区

 

32H

2

备份DBR的位置

 

34H

7

保留,全为0

 

40H

1

BIOS设备,从80开始,85,86表示光驱

 

41H

1

未使用

 

42H

1

扩展引导标记

 

43H

4

序列号

 

47H

11

卷标

 

52H

8

文件系统

 

好,说说这里的一个公式:

根目录相对分区位置(对于操作系统而言)=DBR大小(0EH的值)+2*FAT扇区数(24H的值)。

根目录相对分区位置(对于分区而言)=虚拟MBR+DBR大小(0EH的值)+2*FAT扇区数(24H的值)。

相对总磁盘位置=分区前的隐藏扇区+DBR大小+2*FAT扇区数。

那么这里就有:

32+14294*2=28620,这里得到相对分区位置,相对总磁盘位置=19535103+28620=19563723。

好,我们来找找看:

图二

这正是我们要找的。

四、VmWare搭建实验平台

由于手里没有足够的硬盘(装满的高清美女MV,舍不得啊。

而且大硬盘很少在用FAT32格式了。

),从这一节开始要研究到详细的文件存储结构了,所以得有具体的硬盘来做。

所以干脆搞个虚拟机来玩玩。

平时用的最多的就是VmWare,所以也只说这个,其他的没用过不知道。

版本选择:

VmWare WorkStation 7.1.3中文精简版。

下载地址:

thunder:

//QUFodHRwOi8vd3d3LmJraWxsLm5ldC9kL2Rvd25sb2FkLnBocD9uPTEmc2VydmVyPTEmaWQ9NDg1NTo6MTI4MzM1NDk1NFpa

这个版本可以运行于XP到win7的任何版本的系统上,而且瘦小功能齐全,足够用。

安装过程不说了,这里就说我们平台的选择。

我们的实验平台选择Windows 2003 Enterprise Edition。

硬盘先设置一个,完了添加2个。

硬盘接口类型选择IDE。

容量大小和网络啥都无所谓,反正都是做实验。

其余的系统安装什么的这里不再赘述。

就说说添加的硬盘,一个使用系统自带的分区工具来分区,另一个使用DM分区,格式都是FAT32,(DM默认就是FAT32)。

WinHex使用15.9汉化版,下载地址:

好了,现在对WinHex设置一下。

打开选项,常规设置,弹出以下对话框:

图一

这里有3个地方需要设置:

一是保存临时文件的目录,二是保存镜像和备份文件的目录,这两个地方指定一个自定义的目录,不要使用默认的临时目录,否则保存数据的时候可能出现错误。

三是将字节以文本方式逐个显示的勾去掉,这样能够正常显示中文。

图二

点击磁盘编辑,打开目标磁盘,确定后,会出现类似下图的界面:

图三

这里可以依次来点击分区可以看到DBR的信息,也可以点击偏移地址那里的三角形来进入分区表模版,引导扇区模板来更方便详细的来了解分区表或者DBR的每个字节含义。

这里不再多说,下次进入DBR损坏的手工实战。

绝对详细,超过很多书籍和BBS的描述哦!

有兴趣的就顶,没兴趣就等我有兴趣了在写吧。

五、DBR破坏的恢复

图一

这是典型的DBR破坏的现象,比较常见的可能是偏移不对,DBR坏等。

偏移不对也就是分区表定位不对,这个可以参考以前的MBR部分来重新查找分区表来确定。

DBR坏也有二种可能,一种是主DBR坏,备份DBR是好的;另一种是都坏了(这种可能不大,但也有)。

主DBR坏参看我以前的一个帖子:

这里我们来讨论比较极端的:

备份DBR也坏掉的情况。

先看这个

分区大小

FAT16簇大小

FAT32簇大小

16MB-32MB

2KB

不支持

32MB-127MB

2KB

512bytes

128MB-255MB

4KB

512bytes

256MB-259MB

8KB

512bytes

260MB-511MB

8KB

4KB

512MB-1023MB

16KB

4KB

1024MB-2047MB

32KB

4KB

2048MB-8GB

不支持

4KB

8GB-16GB

不支持

8KB

16GB-32GB

不支持

16KB

32GB以上

不支持

32KB

这个表指出在DBR中的簇的大小(0DH处)的参考值,当然实际上你在格式化磁盘的时候可以指定这个大小。

这是我们恢复DBR的一个参考。

恢复思路:

先确定这个DBR位置是正确的,这个通过分区表标志可以判断,然后依次判断:

DRB簇大小,FAT表大小。

由于手里没有这种硬盘,这里我们手工对一个分区的BDR清零,然后我们来倒推,呵呵。

注意:

这个举动比较危险,请先做好DBR的备份,或者在虚拟机中来完成,不然万一没有推回去,数据丢了,别怪我哈。

图二

这样下来这个区块全部是0了,然后再把备份块也清0了,现在重新启动电脑或者是禁用这块硬盘,再来看,是不是已经提示没有格式化了?

好了,我们开始来倒推这一块区域。

用winhex来打开硬盘,点到这个分区,此时Winhex已经不能识别该分区格式,点击下拉三角形,引导区(模板)这一项也没有出现在菜单中了,看来只能一步一步的来做了。

先确定是否是DBR,先往前63扇,看看有没有分区标志,如果有既可以确定这里就是DBR,没有,那么再来搜索分区标志,然后确定DBR位置。

这里我们假定都已经确定了。

先把DBR的标志填进去:

从偏移00H处开始依次填入:

EB5890或者EBEF90随便了,接着填写版本号:

MSWIN4.1。

到偏移FEH处把结束标志55AA填入。

然后来看分区表中本分区的大小:

图三

好的,分区大小是:

29302497,转成16进制就是:

1BF1EE1,反过来就是E11EBF01然后填到偏移20H处。

接着确定每扇区字节数(偏移0B0CH的值),这个通常是512,16进制200H,写入0B0C就是0002。

然后每簇扇区数(0DH),参考上表,是8KB,每扇区512字节,那么就是16扇区,好的,0D的值就是10H。

接着计算DBR大小(0EH),我们搜索FAT表的标志F8FFFF0FFFFFFFFFF,偏移计算勾选并填入512=0,ok几分钟后找到。

我们看看他的位置,如图四,图五:

图四

图五

winhex显示扇区位置是:

19535135,记下这个数值,回到DBR位置,这里的扇区位置是:

19535103,那么DBR大小就是32扇,这里在0EH位置处填入:

20H。

最后来确定一个难点:

FAT表的大小。

这里说一个FAT表的理论公式:

FAT大小=分区总扇区\每簇扇区数\128

或 FAT大小=(分区总字节数\每扇区字节数)\每簇扇区数\128

解释:

FAT32表由4字节构成(4*8=32,因此叫FAT32),因此每扇区能够容纳的簇号就是512/4=128,分区总扇区/每簇扇区数得到分区的总簇数,也是簇的总编号数,FAT表记录的是分区的簇号,因此簇总数/128得到的就是FAT表的大小。

事实上这里的分区大小指的是从FDT(数据区)开始的分区的大小,也就是数据区的大小,而不是分区表记录的大小。

但我们在查找FDT的时候,可以使用分区表的分区大小来计算做一个大概参考,计算的数值略大于实际FAT大小。

这样可以快速定位到FDT。

这里顺便解释下FAT32 为什么最大文件不能超过4GB以及FAT32支持的最大容量。

FAT32的高四位是保留的,因此最多可以有:

2^28个簇,每簇的最大容量是32KB,由此可以得到最大容量为8TB,但windows xp只能管理32GB,因此超过32GB的硬盘就必须采用第三方分区工具才能得到FAT32格式或者是使用NTFS。

最大文件:

FDT使用32个字节来记录一个文件,其中记录文件大小使用了4个字节,因此文件大小就是2^32=4GB。

好了,回到正题。

我们这里粗略计算下FAT表的大小:

29302497\16\128=14307

那么FDT位置应该是:

19535103+32+2*14307=19563749,好,我们跳到这个扇区去,这里一看就是数据,因为计算的数值略大于了实际数值,所以我们往上翻找,到了19563723扇区,正好找到我们想要的。

现在来计算正确的FAT大小:

(19563723-19535103-32)/2=14294,16进制:

37D6,填到偏移24H处。

OK,到此关键数据都有了,剩下的直接填上。

FAT数目(10H):

02,媒介描述(15H):

F8,隐藏扇区(1CH):

12A14FF,根目录起始簇(2CH)02,FSInfo(30H):

01,DBR备份位置(32H):

06,BIOS标志(40H):

80;扩展引导标志(42H):

29;文件系统标志(52H):

FAT32。

好了,把这些天上后,禁用硬盘或者是重启电脑看看。

文件都有了吧。

打开winhex,也能正确识别并且引导区模板也能打开了。

图六

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1