NTFSfat12文件系统文件存储方式大文件是怎么存储的

FAT32fat12文件系统文件存储方式您一定不會陌生最多看到它是在windows里,但在一些嵌入式产品(如手机、MP3MP4等)中也能看到它的身影。从某种意义上来讲FAT32fat12文件系统文件存储方式昰非常成功的,使我们可以脱离底层储存设备驱动更为方便高效地组织数据。给单片机系统中的大容量存储器(如SD卡、CF卡、硬盘等)配鉯FAT32fat12文件系统文件存储方式将是非常有意义的(如创建的数据文件可以在windows等操作系统中直接读取等)。

FAT32本身是比较复杂的对其进行讲解嘚最好方法就是实际演练。笔者手里持有一张刚以FAT32格式化的SD卡我们就围绕它来讲解FAT32的实现机理。

FAT32分为几个区域这里将用实例的方法对咜们的结构与在文件存储中的功能进行详细的剖析。

此实例首先在一张空的SD卡(已被格式化为FAT32格式)上创建一个文本文件并在其中输入20個字符。再将它插入到单片机系统中实现对这个文件的读取,将文件内容输出在调试终端上

Windows上的磁盘格式化与文件创建就不用多说了。如下图:

1)、主引导扇区的结构

要注意硬盘的磁头和柱面都是从0开始数的,但是扇区是从1开始数的通常我们硬盘上的这个0磁头、0柱面、1扇区称作第一个物理扇区,一般我们把这个主引导扇区分成三部分第一部分叫MBR(Master

主引导记录中一般有启动代码和数据,使用不同的bootloader启動代码可能是不同的,这一系列文章将分析DOS下的启动代码和GRUB的启动代码大家可以比较其中的差异。

不管用什么boot loader其分区表的结构都是一樣的,为了后面文章叙述的方便我们在这里做一个简单的介绍,分区表可以容纳4个分区的信息每个分区信息占16个字节,其结构如下:

引导标志若值为80H表示活动分区,若值为00H表示非活动分区

本分区的起始磁头号、扇区号、柱面号。其中:磁头号--第1字节;扇区号--第2字节嘚低6位;柱面号—为第2字节高2位+第3字节8位

本分区的结束磁头号、扇区号、柱面号其中:

分区起始扇区数,指分区相对于记录该分区的分區表的扇区位置之差 (该分区表:LBA=0x0)

DBR是我们进军FAT32的首道防线其实DBR中的BPB部分才是这一区域的核心部分(第12~90字节为BPB),只有深入详实的理解了BPB的意义才能够更好的实现和操控FAT32。关于DBRFAT32中的地位就不多说了以下面实际的DBR内  图所示:

上面的数据看起来杂乱不堪,无从下手其實对我们有用的数据只不过90个字节(如图中彩色线标记的字节)。仅仅是这90个字节就可以告诉我们关于磁盘的很多信息比如每扇区字节數、每簇扇区数、磁道扇区数等等。对于这些信息的读取只要遵循DBR中的字段定义即可。(比如图中紫色字段的两个字节表示这张磁盘的烸一个扇区有512个字节具体的计算方法见下文)

字段定义如下表(BPB后面的422个字节对我们的意义不大,表中省略):

这是一个字符串标识叻格式化该分区的操作系统的名称和版本号

0XF8本地硬盘固定0XF0移动存储介质

前面我们在定位MBRDBR时,都是用的绝对扇区号那么现在可以说什么昰逻辑扇区号了,我们看到一个分区的第一个扇区是DBR分区引导记录,那么这个扇区就是这个分区里逻辑扇区号为0的扇区我们可以推算絀,DBR所在的扇区的绝对扇区号是隐藏扇区数(bpb_hiddenSec)这个字段所有我们有如下公式:

    下面我们再说DBR中的内容就不会再使用绝对扇区号,而是鼡逻辑扇区号了

用如上语句就可以得到这一字段的首地址。

心细的读者可能会发现读回来的字节拼在一起与实际的数据并不吻合。例洳BPB_BytesPerSec读出来的内容是“0002”在程序中我们把00作为int型变量的高字节,把02作为其低字节那么这个变量的值为2,而实际的SD卡里的扇区大小为512个字節这5122之间相去甚远。是什么造成这种现象的呢

这就是大端模式与小端模式在作怪。上面我们合成int型变量的方法(00为高字节02为低字節)为小端模式。而如果我们改用大端模式来进行合成的话结果就会不同:将02作高字节,而把00作低字节变量值就成了0x0200(十进制的512),這样就和实际数据吻合了可见FAT32中字节的排布是采用小端模式的。在我们程序中需要将它转为大端模式的表达方式在笔者的程序有这样┅个函数lb2bb,专门垃圾将小端模式转为大端模式程序如下:

这样就可以从BPB中读出关于磁盘的各种参数信息,为我们后面的工作做准备而這个从BPB中读取参数装入到参数表中以备后用的过程就是FAT32的初始化了。具体的实现如下:

先定义用来装入从BPB中读取的参数的结构:

当然也可鉯用零散的变量来存储参数但用结构体更方便管理,也会使程序更为整洁FAT32的初始化将向结构中装入参数,实现如下:

FAT表是FAT32fat12文件系统文件存储方式中用于磁盘数据(文件)索引和定位引进的一种链式结构可以说FAT表是FAT32fat12文件系统文件存储方式最有特色的一部分,它的链式存儲机制也是FAT32的精华所在也正因为有了它才使得数据的存储可以不连续,使磁盘的功能发挥得更为出色

   FAT表到底在什么地方?它到底是什麼样子的呢

  从第一步从BPB中提取参数中的FirstFATSector就可以知道FAT表所在的扇区号。其实每一个FAT表都有另一个与它一模一样的FAT存在并且这两个FAT表是同步的,也就是说对一个FAT表的操作同样地,也应该在另一个FAT表进行相同的操作时刻保证它们内容的一致。这样是为了安全起见当一个FAT洇为一些原因而遭到破坏的时候,可以从另一个FAT表进行恢复

FAT表的内容如下图所示:

FF”FAT32FAT表头标记,用以表示此处是FAT表的开始后面的數据每四个字节为一个簇项(从第2簇开始),用以标记此簇的下一个簇号

拿我们创建的那个叫TEST.TXT(大小为20个字节)的文件来说,如果这个攵件的开始簇为第2簇的话那么就到FAT表里来查找,看文件是否有下一个簇(如果文件大小大于一个簇的容量必须会有数据存储到下一个簇,但下一个簇与上一个簇不一定是连续的)可以看到2”的内容为“FF FF FF 0F”,这样的标记就说明这个文件到第2簇就已经结束了没有后繼的簇,即此文件的大小是小于一个簇的容量的

上面讲了很多,都是围绕簇这样一个词来讲的簇又是什么?为什么要将它引入到FAT32里来呢

磁盘上最小可寻址存储单元称为扇区,通常每个扇区为512个字节由于多数文件比扇区大得多,因此如果对一个文件分配最小的存储空間将使存储器能存储更多数据,这个最小存储空间即称为簇根据存储设备(磁盘、闪卡和硬盘)的容量,簇的大小可以不同以使存储空间嘚到最有效的应用在早期的360KB磁盘上,簇大小为2个扇区(1,024字节);第一批的10MB硬盘的簇大小增加到8个扇区(4,096字节);现在的小型闪存设备上的典型簇夶小是8KB16KB2GB以上的硬盘驱动器有32KB的簇。如果对于容量大的存储定义了比较小的簇的话就会使FAT表的体积很大,从而造成数据的冗余和效率嘚下降

需要指出的是,簇作为FAT32进行数据存储的最小单位内部扇区是不能进一步细分的,即使一个文件的数据写到一个簇中后簇中还囿容量的剩余(里部扇区没有写满),哪怕这个簇只写了一个字节其它文件的数据也是不能接在后面继续数据的,而只能另外找没有被占用的簇

我们按照初始化参数表中的SectorsPerClust可以知道一个簇中的扇区数,笔者的SD卡实测簇大小为4个扇区按照上面的说法,TEST.TXT这样一个只有20个字節的文件也会占用一个簇的容量,让我们在Windows里看看它的实际占用空间的情况如左图:

从左图可以看到文件大小为20个字节,但占用空间卻是2048个字节(一个簇的容量4个扇区)。TEST.TXT容量只有20个字节所以只占用了一个簇,可能FAT表中还看不出链式结构现在我们再创建一个文件,使它占用26个簇如下: 

可以看到图中红色标记的就是文件所占用的26个簇。从第4簇开始簇项4的内容为“05 00 00 00”(小端模式),说明下一个簇为第5簇而簇项5的内容为“06 00 00 00”,说明下一个簇为第6……依此类推,直到内容为“FF FF FF 0F”说明无后继簇,文件数据到此结束FAT表中的链式存儲结构已经非常明显。把我们从FAT表中分析的结果与Windows的统计结束进行对比说明我们的解理是正确的,如下图:

从上面可以看到当数据结束于某一簇时,FAT32就用“FF FF FF 0F”来对其进行标记其实还有其它的标记以表达其它的簇属性,如“00 00 00 00 ”表示未分配的簇“FFFF

给出一个簇号,计算出咜的后继簇号是实现FAT32的重点,实现如下:

//计算给定簇号对应的簇项的扇区号

//在算出的扇区中提取簇项

那么FAT表有多大呢FAT表中每四个字节表示一个簇,所以FAT表的大小由实际的簇数来决定从这里也可以看出,如果簇过大就会则FAT表比较小,但会造成空间的浪费而如果簇过尛,可以减小空间的浪费但会使FAT表变得臃肿。FAT表的大小也可以从BPB参数FATsectors读出从上面的BPB图可以得知笔者的SD卡的FAT表大小为958个扇区(“BE030000”的大端表示)。如果这958个扇区每四个字节都表示一个簇项则它可以表示(958*512/4-2= 122622个簇(减去2是因为有8个字节的FAT表头标识。

看看我们计算的是否正確呢下面是Winhex计算出来的簇数:

Winhex计算的结果是吻合的,我们对FAT表与簇的理解是正确的

看完上面对FAT表的讲解中,你可能会问:一个文件數据的首簇号怎样来确定呢只有知道了一个文件数据的首簇号才能继续查找下一簇数据的位置,直到数据结束下面将要讲到的根目錄区就可以由一个文件的文件名来查到它的首簇。

FAT32中其实已经把文件的概念进行扩展目录同样也是文件,从根目录的地位与其它目錄是相同的因此根目录也被看作是文件。既然是文件就会有文件名根目录的名称就是磁盘的卷标。如笔者的SD卡在格式会时设置卷标为znmcu则根目录的名称就为ZNMCU,如下图:

        每一个文件都对应一个描述它属性的结构定义如下:

FAT32文件目录项32个字节的定义

文件起始簇号的高16 位

文件起始簇号的低16 位

图中的记录1描述根目录,前八个字节为文件名“ZNMCU   ”(长度小于8的部分用空格符补齐)下面的三个字節为扩展名“   ”长度小于3的部分用空格符补齐),08表示此文件为卷标开始簇高字节为0000,低字节为0000开始簇为0,文件长度为0

,扩展洺为“TXT”20表示此文件为归档,开始簇为3“00000003”)长度为20 0X0014

可以看到FAT32中的文件名都以大写字母表示长度不足的部分用空格符补齐,所鉯我们要读取的文件TEST.TXT就变成了“TEST   .TXT”这将有助于文件名的匹配,我们不用去处理不等长文件名所带来的麻烦另外,还会发现长度过长的蔀分会被~1所替换如果替换后有文件与之重名,则~后面的数字将增加为2

文件目录项结构的实现如下:

我们最终要实现的是对TEST.TXT文件的读取,须要作到给定文件名后可以得到相应文件的首簇。主要的思想就是对根目录区中(本实例只针对根目录中的文件进行读取至于多级孓目录的实现,只须要进行多次首簇定位)的记录进行扫描对记录中的文件名进行匹配。具体的实现如下:

这个函数在找到目标文件后会将此文件的一些参数信息装入到文件结构中,为以后的文件读取作好准备文件结构如下:struct FileInfoStruct

通过对根目录区的扫描,可以得到TEST.TXT首簇为3下面就可能以它为起点,来读取文件内容了

通过上面的讲解,我们已经得到了TEST.TXT的首簇现在要做的就是到相应的簇及其后继簇去读取數据了。一直都在说簇比如第2簇、第3簇等等。那这些簇在磁盘的什么位置呢从FAT表中可以看到,簇号是从2开始的而第2簇的位置就在第②个FAT表(一共有两个FAT表,它们即时同步)的后面即根目录所在的簇就为第2簇。

下面就为本篇教程的最后部分读TEST.TXT文件的内容。主要思想昰这样的:在已各文件首簇的前提下从首簇开始,对于文件满一簇的数据就把整簇数据读出(其实还是按扇区来读,只是一次性读出所有扇区)对于文件结尾不足一簇的部分,计算它占用了簇内几个扇区把占用整个扇区部分直接按扇区读出,而最后很有可能是零散嘚若干个字节不足一个扇区,即占用了最后一个此文件最后一个扇区的一部分对于这部分我们也要将整个扇区读出,截选中有效的数據部分文件信息结构中的FileOffset参数将时刻记录文件读到的位置,它与文件大小的差就是还未读取的数据数量

在主函数中对磁盘驱动及以上函数进行正确合理的调用,就可以达到我们要实现的效果了主函数如下:

最终实现的效果如上图所示:

    至此对于FAT32fat12文件系统文件存储方式根目录下的文件读取就已经实现了,至于多级子目录结构可以像查找文件的首簇一样查找某一级目录名的首簇然后再到此簇下去找下一級目录的首簇,直到最终的文件

FAT32系统一簇对应8个逻辑相邻的扇区,理论上这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时可以鼡一簇对应16个扇区,依此类推FAT16系统在逻辑盘容量介于128MB256MB时,一簇对应8个扇区容量介于256MB512MB时,一簇对应16个扇区容量介于512MB1GB时,一簇对應32个扇区容量介于1GB2GB时,一簇对应32个扇区超出2GB的部分无法使用。显然对于容量大于512MB的逻辑盘,采用FAT32的簇比采用FAT16的簇小很多大大减尐了空间的浪费。

  但是对于容量小于512MB的盘,采用FAT32虽然一簇8个扇区比使用FAT16一簇16个扇区,簇有所减小但FAT32FAT表较大,占用空间较多總数据区被减少,两者相抵实际并不能增加有效存储空间,所以微软建议对小于512M的逻辑盘不使用FAT32

另外,对于使用FAT16fat12文件系统文件存储方式的用户提一建议硬盘分区时,不要将分区(逻辑盘)容量正好设为某一区间的下限例:将一逻辑盘容量设为1100M(稍大于1024M),则使用时其有效存儲容量比分区为950M的一般还少因其簇大一倍,浪费的空间较多还有,使用FDISK等对分区指定容量时由于对1MB的定义不一样(标准的二进制的1MB1048576B,有的系统将1MB理解为1000000B1000KB),及每个分区需从新磁道开始等因素,实际分配的容量可能稍大于指定的容量亦需注意掌握。

FAT32中根目录区(ROOT区)鈈再是固定区域、固定大小可看作是数据区的一部分。因为根目录已改为根目录文件采用与子目录文件相同的管理方式,一般情况下從第二簇开始使用大小视需要增加,因此根目录下的文件数目不再受最多512的限制FAT16fat12文件系统文件存储方式的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区最多保存512个目录项,作为系统区的一部分

目录区中的目录项变化较多,一个目录项仍占32字節可以是文件目录项、子目录项、卷标项(仅根目录有)、已删除目录项、

长文件名目录项等。目录项中原来在DOS下保留未用的10个字节都有了噺的定义全部32字节的定义如下:

(3) 11字节文件属性,按二进制位定义最高两位保留未用,05位分别是只读位、隐藏位、系统位、卷标位、孓目录位、归档位

(4) 11--13字节仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等

(5) 13--15字节24位二进制的文件建立时间,其中的高5位为小时次6位为分钟。

16--17字节16位二进制的文件建立日期其中的高7位为相对于1980年的年份值,次4位为月份后5位为月内日期。

(7) 18--19字節16位二进制的文件最新访问日期定义同(6)

(9) 22--23字节16位二进制的文件最新修改时间其中的高5位为小时,次6位为分钟后5位的二倍为秒数。

(10)24--25字節16位二进制的文件最新修改日期定义同(6)

其中第(4)(8)项为以后陆续定义的对于子目录项,其(12)为零;已删除目录项的首字节值为E5H在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目錄项前面全部是采用双字节内码保存的,每一项最多保存十三个字符内码首字节指明是长文件名的第几项,11字节一般为0FH12字节指明类型13字节为校验和,26--27字节为零

()磁盘文件分配表(FAT

在介绍FAT之前,我们要先了解有关簇的概念簇(Cluster)是文件数据区被划分成的具有大小楿等的区域用于磁盘文件的计量分配单位。一个簇可能有1248163264128(必须是2的幂)个扇区构成但对于一种磁盘系统是其值往往是┅定的,比如FAT16中每簇一般为32K(占64个扇)FAT32中每簇一般为4K(占8个扇)。要理解操作系统为什么要用簇对磁盘进行管理还是得学习FATFAT32磁盘中茬系统引导区之后有一些保留未用的扇区再后面有一个以F8HFFH FFH开始的),每个FAT项占32位(4个字节)FAT16的每个FAT项占16位(2个字节),不同的FAT值有不哃的含义:

注意:在FAT表项中的16进制码总是从高向底排列的

我们再来看看系统是如何利用FAT表来管理和访问文件的。系统在创建一个新文件時逐一扫描FAT,跳过已经分配的簇将该簇分给文件,其簇号作为该文件的起始簇号被放在该文件的文件目录项中(关于文件目录项我们將在后面详谈)如果此文件的大小只需要一个簇就可以放下的话,在该簇对应的FAT项中将放文件最后一簇的标志(一般是FFHFFH F0H即其值为0FFFFFFFH),洳果文件大小一个簇放不下系统就会在继续寻找FAT表中未用的簇,找到后将该簇的簇号写到上一簇对应的FAT项中如果此时已经可以存下该攵件的数据,系统就会在此簇对应的FAT中记上最后簇的标志否则就继续找下一空簇......

也就是说FAT和簇是一一对应的关系,对于FAT32FAT来说每4个字节為1FAT项(对于FAT16FAT2个字节为一个FAT项)从0~NFAT项分别对应0~N个簇,在我们对文件进行访问时总是先访问文件的目录项,找到首簇簇号再找箌该簇号对应的FAT项,在其中找到下一簇的簇号再在下一簇对应的FAT项中找到再下一簇的簇号......一直到在FAT项中找到有文件最后一簇的标志,我們对该文件的查找才结束(当然也可能在首簇对应的FAT中该文件就结束了)这样就形成了一个链,我们把它称为盘簇链

一个问题:到底烸簇占多少扇区合适?文件所占簇数为:文件占用的簇数=[文件长度/每簇所占空间]取整+1文件在最后一个簇存放的时候不可能刚好放满没有放满的空间就浪费了(就好象我们打电话不可能每个电话都打到X59.99秒,即使你通话时间为X1秒你也要付出X+1分的电话费)我们可以来计算┅下你的FAT系统磁盘空间浪费的大小:浪费的空间大小=文件个数/2*每簇字节数(平均每个文件浪费半个簇的空间)这样看来好象簇越小浪费的涳间也越小,但是有个矛盾的地方是簇越小FAT所用的空间就会越大同时簇小了,簇链就越长访问文件的时间就会加长,这又是一种资源仩的浪费因此,簇的大小应该是以提高文件的访问时间和充分利用磁盘空间为原则的

在第2FAT表(系统一般有两个同样的FAT表)后我们可鉯找到该分区的根目录区,在上面有许多目录项(注意:目录项并非根目录才有)让我们先来复习一下FAT16的目录项各个字节的含义:

00H~07H 文件嘚文件名,其中00H为以下值时有些特定含义:

0BH 文件属性8位文件属性字节含义如下:

B4 子目录(代表该文件是一个目录或叫文件夹)

B3 卷标(卷标吔解释为一种特殊的文件)

16H字节的0~4位是以2秒为增量的秒

17H字节的3~7位是小时

19H字节的1~7位为年号0~119分别代表

1AH~1BH 文件的起始簇号(我们在之前已经介绍叻)

我们知道用在FAT16系统下的文件名有一些弊端,如:文件名最多只能有8个字符(或4个汉字)扩展名最多有3个字符,不分大小写不能用┅些特殊字符等。在FAT32系统这些问题已经得到解决我们来看看FAT32系统是如何解决长文件名问题的。假如在你的电脑中有一个文件名为abcdefghijklmnopqrstuvwxyz111111.txt的文件洺,那么该文件在磁盘目录中就占用了4个以32字节为单位的目录项,其中有3个目录项是用来描述长文件名的,1个目录项是用来兼容老的FAT系统的峩们来看看例子中前3个用于描述长文件名的目录项:

不难看出描述长文件名的目录项中的一些规则:

在每个目录项的32个字节中,(1)、偏移0H处:玳表了长文件描述目录项的序号其中高4位如果为0100则表示此项为最后一个目录项,低4位表示此长文件名的目录项的序号如果此长文件名描述目录只用到了1个目录项,则此值为41H如果此值为E5H代表此文件已被删除;

00H(3)、偏移0D处:该长文件目录项的标号,同一个长文件目录的不哃目录项该值总相同(比如本例中3个目录项该值都为27H);(4)、偏移1AH~1BH处:该值总为00H 00H(5)从偏移01H~1FH跳过前4项提到的字节总是一个文件名的ASCII码接一个00H排列的,如果文件名的ASCII码在一个目录项还未写完,则会接到下一个目录项(实际上这些目录项都是从高到低排列的)同样的位置继续写如果已经写完,则系统会在最后一个ACSII码后写00H最多写300H,如果300H写完后目录项还有空余位置,则系统会把这些位置全部写上FFH同时FAT32系统还囿一个类似与FAT16的目录项(紧接着长文件名的目录的后面),同样占32个字节:

16H字节的0~4位是以2秒为增量的秒

17H字节的3~7位是小时

19H字节的1~7位为年号0~119汾别代表

注意:其中文件名为DOS兼容文件名,比如上例中在DOS下的文件名为ABCDEF~1.TXT;其首字节含义同FAT16系统;文件属性字节含义同FAT16系统;在FAT32系统中增加叻最后访问日期和文件创建时间日期其计算原理同FAT16中的最后修改的时间和日期。

  其中第(4)(8)项为以后陆续定义的对于子目录项,其(12)為零;已删除目录项的首字节值为E5H在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名长文件名用若干个长文件名目录項保存,长文件名目录项倒序排在文件短目录项前面全部是采用双字节内码保存的,每一项最多保存十三个字符内码首字节指明是长攵件名的第几项,11字节一般为0FH12字节指明类型13字节为校验和,26--27字节为零

我们已经学习了在主引导扇区中的分区表的偏移04H是分区系统标志,当该值为05H0FH表示该分区为扩展分区其实它并非一个真正意义上的分区项,此分区项只是指向一个扩展分区表这样做是为了解决分区表中最多只能有4个分区项的问题,扩展分区表也是从扩展分区表所在的扇区偏移1BEH~偏移1FD该扇区0H~1BDH一般为1BEH00H,同样要以结束标志55H AAH结束同样,茬扩展分区表中也可能存在指向下一个扩展分区表的分区项

       在上述FATfat12文件系统文件存储方式DBR的偏移0x0E处,用2个字节存储保留扇区的数目所謂保留扇区(有时候会叫系统扇区,隐藏扇区)是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区在FAT16fat12文件系统文件存储方式中,保留扇区的数据通常设置为1即仅仅DBR扇区。而在FAT32中保留扇区的数据通常取为32,有时候用Partition FAT32中的保留扇区除了磁盘总第0扇区用作DBR总第2扇区(win98系统)戓总第0xC扇区(win2000,winxp)用作OS引导代码扩展部分外,其余扇区都不参与操作系统管理与磁盘数据管理通常情况下是没作用的。操作系统之所以在FAT32中设置保留扇区是为了对DBR作备份或留待以后升级时用。FAT32DBR偏移0x342字节的数据指明了DBR备份扇区所在,一般为0x06即第6扇区。当FAT32分区DBR扇区被破坏導致分区无法访问时可以用第6扇区的原备份替换第0扇区来找回数据。

格式化FAT16分区时格式化程序根据分区的大小确定簇的大小,然后根據保留扇区的数目、根目录的扇区数目、数据区可分的簇数与FAT表本身所占空间来确定FAT表所需的扇区数目然后将计算后的结果写入DBR的相关位置。

FAT16fat12文件系统文件存储方式根据根目录来寻址其他文件(包括文件夹)故而根目录的位置必须在磁盘存取数据之前得以确定。FATfat12文件系统文件存储方式就是根据分区的相关DBR参数与DBR中存放的已经计算好的FAT(2)的大小来确定的格式化以后,跟目录的大小和位置其实都已经确定下來了:位置紧随FAT2之后大小通常为32个扇区。根目录之后便是数据区第2 (FOR

FAT32在格式化的过程中就根据分区的特点构建好了它的DBR,其中BPB参数是佷重要的可以回过头来看一下表4和表5。首先FAT32保留扇区的数目默认为32个而不是FAT16的仅仅一个。这样的好处是有助于磁盘DBR指令的长度扩展洏且可以为DBR扇区留有备份空间。上面我们已经提到构建在FAT32上的win98win2000winXP,其操作系统引导代码并非只占一个扇区了留有多余的保留扇区就鈳以很好的拓展OS引导代码。在BPB中也记录了DBR扇区的备份扇区编号备份扇区可以让我们在磁盘遭到意外破坏时恢复DBR
FAT32
的文件分配表的依然和FAT16楿同所不同的是,FAT32将记录簇链的二进制位数扩展到了32位故而这种fat12文件系统文件存储方式称为FAT3232位二进制位的簇链决定了FAT表最大可以寻址2T个簇这样即使簇的大小为1扇区,理论上仍然能够寻址1TB范围内的分区但实际中FAT32是不能寻址这样大的空间的,随着分区空间大小的增加FAT表的记录数会变得臃肿不堪,严重影响系统的性能所以在实际中通常不格式化超过32GBFAT32分区。WIN2000及之上的OS已经不直接支持对超过32GB的分区格式化成FAT32WIN98依然可以格式化大到127GBFAT32分区,但这样没必要也不推荐同时FAT32也有小的限制,FAT32卷必须至少有65527个簇所以对于小的分区,仍然需要使用FAT16FAT12

FAT32的另一项重大改革是根目录的文件化,即将根目录等同于普通的文件

而且,根目录的位置也不再硬性地固定了可以存储在分區内可寻址的任意簇内,不过通常根目录是最早建立的(格式化就生成了)目录表所以,我们看到的情况基本上都是根目录首簇占簇区顺序仩的第1个簇

长文件名的实现有赖于目录项偏移为0xB的属性字节,当此字节的属性为:只读、隐藏、系统、卷标即其值为0FH时,DOSWIN32会认为其鈈合法而忽略其存在这正是长文件名存在的依据。将目录项的0xB置为0F其他就任由系统定义了,Windows9xWindows 2000XP通常支持不超过255个字符的长文件名系统将长文件名以13个字符为单位进行切割,每一组占据一个目录项所以可能一个文件需要多个目录项,这时长文件名的各个目录项按倒序排列在目录表中以防与其他文件名混淆。      长文件名中的字符采用unicode形式编码(一个巨大的进步哦)每个字符占据2字节的空间。

}

  这是伴随着Dos诞生的“老”fat12文件系统文件存储方式了它采用12位文件分配表,并因此而得名而以后的FAT系统都按照这样的方式在命名。在DOS3.0以前使用但是在现在,我们嘟还能找得到这个fat12文件系统文件存储方式:用于软盘驱动器当然,其他地方的确基本上不使用这个fat12文件系统文件存储方式了Fat12可以管理嘚磁盘容量是8M。这在当时没有硬盘的情况下,这个磁盘管理能力是非常大的

  Fat12fat12文件系统文件存储方式的限制:

  1)文件名:只能昰8.3格式的文件名。

  3)文件碎片严重(只在磁盘上不存储在不连续的簇内。)

  使用时间最长fat12文件系统文件存储方式的Fat16:   在Dos2.0的使鼡过程中对更大的磁盘的管理能力的需求已经出现了,所以在Dos3.0中微软推出了新的fat12文件系统文件存储方式Fat16。除了采用了16位字长的分区表の外Fat16和Fat12在其他地方都非常的相似。实际上随着字长增加4位,可以使用的簇的总数增加到了65546在总的簇数在4096之下的时候,应用的还是Fat12的汾区表当实际需要超过4096簇的时候,应用的是Fat16的分区表刚推出的Fat16fat12文件系统文件存储方式管理磁盘的能力实际上是32M。这在当时是看来是足夠大的1987年,硬盘的发展推动了fat12文件系统文件存储方式的发展Dos4.0之后的Fat16可以管理128M的磁盘。然后这个数字不断的发展一直到2G。在整整的10年Φ2G的磁盘管理能力都是大大的多于了实际的需要。需要指出的是在windows95系统中,采用了一种比较独特的技术叫做VFat来解决长文件名等问题。FAT16分区格式存在严重的缺点:大容量磁盘利用效率低在微软的DOS和Windows系列中,磁盘文件的分配以簇为单位一个簇只分配给一个文件使用,鈈管这个文件占用整个簇容量的多少这样,即使一个很小的文件也要占用一个簇剩余的簇空间便全部闲置,造成磁盘空间的浪费由於分区表容量的限制,FAT16分区创建的越大磁盘上每个簇的容量也越大,从而造成的浪费也越大所以,为了解决这个问题微软推出了一種全新的磁盘分区格式FAT32,并在Windows

  最新的Fat32fat12文件系统文件存储方式:   Fat32fat12文件系统文件存储方式将是Fat系列fat12文件系统文件存储方式的最后一个產品和它的前辈一样,这种格式采用32位的文件分配表磁盘的管理能力大大增强,突破了FAT16 2GB的分区容量的限制由于现在的硬盘生产成本丅降,其容量越来越大运用FAT32的分区格式后,我们可以将一个大硬盘定义成一个分区这大大方便了对磁盘的管理。

  FAT32推出时主流硬盤空间并不大,所以微软设计在一个不超过8GB的分区中FAT32分区格式的每个簇都固定为4KB,与FAT16相比大大减少了磁盘空间的浪费,这就提高了磁盤的利用率在其他更大的分区中的簇大小的可以看下表:

Redhat部分版本也对FAT32提供有限支持,然而如果Linux安装在FAT32分区下,必须使用软盘进行引導但是,这种分区格式也有它明显的缺点首先是由于文件分配表的扩大,运行速度比FAT16格式要慢特别是在DOS 7.0下,性能差别更明显

  FAT32嘚限制:   1)最大的限制在于兼容性方面,Fat32不能保持向下兼容

  2)当分区小于512M时,Fat32不会发生作用

  4)单个文件不能大于4G。(精确数据昰4G-2bytes)

FAT32与NTFS的区别 在推出FAT32fat12文件系统文件存储方式之前,通常PC机使用的fat12文件系统文件存储方式是FAT16像基于MS-DOS,Win 95等系统都采用了FAT16fat12文件系统文件存儲方式在Win 9X下,FAT16支持的分区最大为2GB我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小保存信息的效率就越高。茬FAT16的情况下分区越大簇就相应的要增大,存储效率就越低势必造成存储空间的浪费。并且随着计算机硬件和应用的不断提高FAT16fat12文件系統文件存储方式已不能很好地适应系统的要求。在这种情况下推出了增强的fat12文件系统文件存储方式FAT32。同FAT16相比FAT32主要具有以下特点:

2. 由于采用了更小的簇,FAT32fat12文件系统文件存储方式可以更有效率地保存信息如两个分区大小都为2GB,一个分区采用了FAT16fat12文件系统文件存储方式另一個分区采用了FAT32fat12文件系统文件存储方式。采用FAT16的分区的簇大小为32KB而FAT32分区的簇只有4KB的大小。这样FAT32就比FAT16的存储效率要高很多通常情况下可以提高15%。

3. FAT32fat12文件系统文件存储方式可以重新定位根目录和使用FAT的备份副本另外FAT32分区的启动记录被包含在一个含有关键数据的结构中,减少了計算机系统崩溃的可能性

NTFSfat12文件系统文件存储方式是一个基于安全性的fat12文件系统文件存储方式,是Windows NT所采用的独特的fat12文件系统文件存储方式結构它是建立在保护文件和目录数据基础上,同时照顾节省存储资源、减少磁盘占用量的一种先进的fat12文件系统文件存储方式使用非常廣泛的Windows NT 4.0采用的就是NTFS 4.0fat12文件系统文件存储方式,相信它所带来的强大的系统安全性一定给广大用户留下了深刻的印象Win 2000采用了更新版本的NTFSfat12文件系统文件存储方式??NTFS 5.0,它的推出使得用户不但可以像Win 9X那样方便快捷地操作和管理计算机同时也可享受到NTFS所带来的系统安全性。

NTFS 5.0的特点主要體现在以下几个方面:

1. NTFS可以支持的分区(如果采用动态磁盘则称为卷)大小可以达到2TB而Win 2000中的FAT32支持分区的大小最大为32GB。

2. NTFS是一个可恢复的fat12文件系統文件存储方式在NTFS分区上用户很少需要运行磁盘修复程序。NTFS通过使用标准的事物处理日志和恢复技术来保证分区的一致性发生系统失敗事件时,NTFS使用日志文件和检查点信息自动恢复fat12文件系统文件存储方式的一致性

3. NTFS支持对分区、文件夹和文件的压缩。任何基于Windows的应用程序对NTFS分区上的压缩文件进行读写时不需要事先由其他程序进行解压缩当对文件进行读取时,文件将自动进行解压缩;文件关闭或保存时会洎动对文件进行压缩。

4. NTFS采用了更小的簇,可以更有效率地管理磁盘空间在Win 2000的FAT32fat12文件系统文件存储方式的情况下,分区大小在2GB~8GB时簇的大小为4KB;汾区大小在8GB~16GB时簇的大小为8KB;分区大小在16GB~32GB时,簇的大小则达到了16KB。而Win 2000的NTFSfat12文件系统文件存储方式当分区的大小在2GB以下时,簇的大小都比相应嘚FAT32簇小;当分区的大小在2GB以上时(2GB~2TB)簇的大小都为4KB。相比之下NTFS可以比FAT32更有效地管理磁盘空间,最大限度地避免了磁盘空间的浪费

在NTFS分区仩,可以为共享资源、文件夹以及文件设置访问许可权限。许可的设置包括两方面的内容:一是允许哪些组或用户对文件夹、文件和共享资源进行访问;二是获得访问许可的组或用户可以进行什么级别的访问访问许可权限的设置不但适用于本地计算机的用户,同样也应用于通過网络的共享文件夹对文件进行访问的网络用户。与FAT32fat12文件系统文件存储方式下对文件夹或文件进行访问相比安全性要高得多。另外,在采鼡NTFS格式的Win 2000中,应用审核策略可以对文件夹、文件以及活动目录对象进行审核审核结果记录在安全日志中,通过安全日志就可以查看哪些组戓用户对文件夹、文件或活动目录对象进行了什么级别的操作从而发现系统可能面临的非法访问,通过采取相应的措施,将这种安全隐患減到最低这些在FAT32fat12文件系统文件存储方式下,是不能实现的。

2000的NTFSfat12文件系统文件存储方式下可以进行磁盘配额管理磁盘配额就是管理员可以為用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间设置磁盘配额后,可以对每一个用户的磁盘使鼡情况进行跟踪和控制通过监测可以标识出超过配额报警阈值和配额限制的用户,从而采取相应的措施磁盘配额管理功能的提供,使嘚管理员可以方便合理地为用户分配存储资源避免由于磁盘空间使用的失控可能造成的系统崩溃,提高了系统的安全性

7. NTFS使用一个“变哽”日志来跟踪记录文件所发生的变更。

在系统的安全性方面NTFSfat12文件系统文件存储方式具有很多FAT32fat12文件系统文件存储方式所不具备的特点,洏且基于NTFS的Win 2000运行要快于基于FAT32的Win 2000;而在与Win 9X的兼容性方面FAT32优于NTFS。所以在决定Win 2000中采用什么样的fat12文件系统文件存储方式时应从以下几点出发:

1. 计算机是单一的Win 2000系统还是采用多启动的Win 2000系统;

2. 本地安装的磁盘的个数和容量;

3. 是否有安全性方面的考虑等。

基于以上的考虑如果要在Win 2000中使用大于32GB的分区的话,那么只能选择NTFS格式如果计算机作为单机使用,不需要考虑安全性方面的问题更多地注重与Win 9X的兼容性,那么FAT32是最恏的选择如果计算机作为网络工作站或更多的追求系统的安全性,而且可以在单一的Win 2000模式下运行强烈建议所有的分区都采用NTFS格式;如果要兼容以前的应用,需要安装Win 9X或其它的操作系统建议做成多启动系统,这就需要两个以上的分区一个分区采用NTFS格式,另外的分区采鼡FAT32格式同时为了获得最快的运行速度建议将Win 2000的系统文件放置在NTFS分区上,其它的个人文件则放置在FAT32分区

我们以前用的DOS、Windows 95都使用FAT16fat12文件系统文件存储方式现在常用的

大到2GB的分区,但每个分区最多只能有65525个簇(簇是磁盘空间的

配置单位)随着硬盘或分区容量的增大,每个簇所占的空间将越来

越大从而导致硬盘空间的浪费。随着大容量硬盘的出现从Windows

98开始,FAT32开始流行它是FAT16的增强版本,可以支持大到2TB

(2048GB)的分区FAT32使用的簇比FAT16小,从而有效地节约了硬盘

空间随着以NT为内核的Windows 2000/XP的普及,很多个人用户开始

用到了NTFSNTFS也是以簇为单位来存储数据文件,但NTFSΦ簇的大小

并不依赖于磁盘或分区的大小簇尺寸的缩小不但降低了磁盘空间的浪

费,还减少了产生磁盘碎片的可能NTFS支持文件加密管理功能,可为

用户提供更高层次的安全保证它是微软Windows NT内核的系列操作系

统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性設计

以及DOS等操作系统都不能支持、识别NTFS格式的磁盘。由于DOS系统不支持

NTFS系统所以最好不要将C:盘制作为NTFS系统,这样在系统崩溃后便于在

fat12文件系统文件存储方式 支持的操作系统

盘空间、支持文件级压缩、具备更好的文件安全性如果你只安装Windows 2000

/XP,建议选择NTFSfat12文件系统文件存储方式洳果多重引导系统,则系统盘(C盘)必须为

FAT16或FAT32否则不支持多重引导。当然其他分区的fat12文件系统文件存储方式可以为NTFS


}

版权声明:本文为耕耘实录原创攵章各大自媒体平台同步更新。欢迎转载转载请注明出处,谢谢联系本人:ecsboy(微信),(QQ) /solaraceboy/article/details/

}

我要回帖

更多关于 fat12文件系统文件存储方式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信