fat系统文件目录结构|FAT文件系统目录和子目录的关系是如何关联的

❶ 一、嵌入式之FAT32文件系统(1)

参考文件 FAT32文件系统有几个基本的几个概念: 先拿一个真实的4G SD卡分析数据: 使用winhex物理方式查看,截一部分图: 全称Master Boot Record,即主引导记录。 主引导记录分为两个部分,一个部分是前446字节,另外一个部分是后64字节。 前446个字节,一般取值为0,不过有的时候也会有其他的设置值。 这部分也叫DPT,全称Disk Partition Table,即磁盘分区表。 磁盘分区表有4个区,每个区有16字节,总体是64字节。因此,MBR字节数为512字节,刚好是一个扇区的数量。 DPT的4个部分,每一个部分的16字节含义如下表: 00 82 03 00 0B E6 DC CA 00 20 00 00 00 E0 ED 00(16进制) 这里,就贴出来上面截图的数据内容。(我们使用的是小字节序) 0x00 : 通常的取值。 0x82 : 开始磁头。 0x03 0x00 : 实际为0x0003,按照2进制编码为0000 0000 0000 0011。 那么开始扇区为:0。 开始柱面为:3。 0x0B : 分区类型,为Win95 FAT32类型。 0xE6 : 结束磁头为230。 0xDC 0xCA: 实际为0xCADC,按照2进制编码为1101 1100 1100 1010。 那么结束扇区为:55。 结束柱面为:220。 0x00 0x20 0x00 0x00 : 实际为:0x00002000,也就是8192,为分区的开始扇区地址。那么我们后面就可以从这里去找DBR。 0x00 0xE0 0xED 0x00 : 实际为:0x00EDE000,也就是15589376,为分区的总扇区数。 从这里其实可以算出SD卡的容量。 也就是: 分区大小:15589376×512 = 7981760512。这个值大约是7.612G。 从物理0地址到起始地址:8192*512 = 4194304 那么总容量为:7981760512+4194304 = 7985954816。 该部分包括一个叫BPB的内容。 先截出DBR部分的实际SD卡上的内容: 在WinHex下使用逻辑磁盘打开FAT32文件系统的存储介质来看,偏移位置与表示的含义有如下表所示: 25字节的分区块(BPB): 扩展分区BPB: 按照定义,将实际的图 MBR.png分析如下: 从偏移为0x0BH地址开始: 00 02 10 96 04 02 00 00 00 00 F8 00 00 3F 00 FF 00 00 20 00 00 00 E0 ED 00 B5 1D 00 00 00 02 : 即0x0200,表示扇区字节数,也就是512字节。 10: 即0x10,每簇扇区数为16。也就是16 512=8 1024=8K。 96 04: 即0x0496,保留扇区数为1174。 02: 即0x02,FAT表份数为2。 00 00: 即0x0000,为保留。 00 00: 即0x0000,为保留。 F8: 即为本地硬盘。 00 00: 即0x0000,为保留。 3F 00: 即0x003F,即每磁道扇区数为63。 FF 00: 即0x00FF,即磁头数为255。 00 20 00 00: 即0x00002000,即隐藏扇区数为8192。 00 E0 ED 00: 即0x00EDE000,即磁盘总扇区数为15589376。 B5 1D 00 00 : 即0x001DB5,即FAT表占用扇区数为7605。 好了,根据这些内容,可以计算出两个参数: FAT1的开始扇区 = 分区开始扇区+ 保留扇区=8192+1174 = 9366。 FAT2的开始扇区 = FAT1的开始扇区+FAT表占用的大小 = 9366 + 7605 = 16971。 首目录簇 = FAT1的开始扇区+FAT的表份数 x FAT表占用的大小=9366+2*7605 = 24576。 继续追踪,找到首目录簇中的已经新建的文件。 现在,先解析粘贴出来的每个部分的内容的含义。 具体内容下面的FAT中会说。 a.txt部分的解析: 41 20 20 20 20 20 20 20 54 58 54 20 18 8B 2A 90 96 4A A1 4A 00 00 0F 8C A1 4A 03 00 10 00 00 00 41 20 20 20 20 20 20 20: 表示文件名:“A TXT” 20 : 表示的是文件的属性。归档。 18: 为系统保留。 8B: 创建时间的10ms位。也就是1390ms。 2A 90: 也就是0x902A,换成2进制为1001 0000 0010 1010 。表示的是创建时间。 细分如下: 则时间值为: 时:0x12 = 18, 分:0x1 = 1, 秒:0xAx 2s + 1390ms= 10x 2s + (1390ms) = 21s, 所以创建时间为18:01:21。 96 4A: 也就是0x4A96,换成2进制为0100 1010 1001 0110,表示的是创建日期。 细分如下: 则日期值为: 年:1980+0x25 = 2017, 月:0x4 = 4, 日:0x16= 22, 所以,创建日期为2017年4月22日。 A1 4A: 也就是0x4AA1,换成2进制为0100 1010 1010 0001,表示的是最后访问日期。 则日期为: 年:1980+0x25 = 2017, 月:0x5 = 5, 日:0x1= 1, 所以,最后访问日期为2017年5月1日。 00 00: 起始簇高16位。 0F 8C: 也就是0x8C0F,换成2进制为1000 1100 0000 1111,表示的是最近修改时间。 时:0x11 = 17, 分:0x20 = 32, 秒:0xf x 2 = 30s, 所以最近修改时间为17:32:30。 A1 4A: 也就是0x4AA1,换成2进制为0100 1010 1010 0001,表示的是最近修改日期。 则日期为: 年:1980+0x25 = 2017, 月:0x5 = 5, 日:0x1= 1, 所以,最近修改日期为2017年5月1日。 03 00: 即0x0003,表示起始簇低16位,也就是说,起始簇高位与起始簇低位相或,得到0x00000003,起始簇为3。 10 00 00 00: 即0x00000010,表示文件数据长度,也就是16字节。 分析完a.txt,b.txt也一样分析即可。 从而可以得到的是,a.txt的内容位置在:(3-2)*16+24576 = 24592上。 后使用winhex进行验证,确认是正确的。 文件分配表(FAT),是FAT文件系统中用于磁盘数据索引和定位而引进的一种链式结构。在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。 如DBR所述,偏移0EH处存储了保留扇区的个数,而保留扇区数指的就是当前分区内DBR到FAT表之间的所有扇区的个数(包括DBR但不包括FAT表)。据此,可以定位FAT表所在的起始偏移位置了。 如DBR所述,偏移24H处存储了保留扇区的个数,知道FAT2是紧邻FAT1的。那么FAT2表的位置为:FAT1的起始偏移地址+FAT1的大小。 FAT表由一系列大小相等的FAT表项组成,它有如下特性: 在FAT32文件系统中,根目录的位置不再硬性地固定,可以存储在分区内可寻址的任意簇内,不过通常根目录是最早建立的(格式化就生成了)目录表。所以,我们看到的情况基本上都是根目录首簇紧邻FAT2,占簇区顺序上的第1个簇(即2号簇)。同时,FAT32文件系统将根目录当做普通的数据文件来看,所有没有了目录项数的限制,在需要的时候可以分配空簇,存储更多的目录项。 对于短文件名格式的目录项: 注意:*表示此字段在段文件目录项中,不可取值0FH。若取值为0FH,目录段为长文件名目录段。 0BH字段取值如下: FAT32的一个重要的特点是完全支持长文件名。长文件名依然是记录在目录项中的。为了低版本的OS或程序能正确读取长文件名文件,系统自动为所有长文件名文件创建了一个对应的短文件名,使对应数据既可以用长文件名寻址,也可以用短文件名寻址。不支持长文件名的OS或程序会忽略它认为不合法的长文件名字段,而支持长文件名的OS或程序则会以长文件名为显式项来记录和编辑,并隐藏起短文件名。 长文件名的实现有赖于目录项第12字节属性字节,当此字节的值为0FH时,支持长文件名的系统会将其当做长文件名的依据,而只支持短文件名的系统会认为是异常而忽略掉。系统将长文件名以13个字符为单位进行切割,每一组占据一个目录项。所以可能一个文件需要多个目录项,这时长文件名的各个目录项按倒序排列在目录表中,以防与其他文件名混淆。 长文件名中的字符采用unicode形式编码,每个字符占据2字节的空间。其目录项定义如:

❷ fat32的启动扇区系统由哪三部分组成

简单理解文件系统,就是文件的储存方式。也可以理解为一个门牌系统,为储存设备划分门牌号,每个文件分配一个门牌,然后就能按照门牌找到文件。今天主要介绍一下windows的三种文件系统。FAT32NTFSexFAT格式化硬盘的时候,Windows 系统会提供这三种文件系统让你选。这时应该选哪一种呢?1、FAT32FAT(File Allocation Table,文件分配表)文件系统是windows操作系统所使用的一种文件系统,它的发展过程经历了FAT12、FAT16、FAT32三个阶段。FAT文件系统用“簇”作为数据单元。一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂。簇的最大值为64个扇区,即32KB。所有簇从2开始进行编号,每个簇都有一个自己的地址编号。用户文件和目录都存储在簇中。FAT文件系统的数据结构中有两个重要的结构:文件分配表和目录项:文件分配表:文件和文件夹内容储存在簇中,如果一个文件或文件夹需要多于一个簇的空间,则用FAT表来描述,如何找到另外的簇。FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。FAT12、FAT16、FAT32这三种文件系统之间的主要区别在与FAT项的大小不同。目录项:FAT文件系统的每一个文件和文件夹都被分配到一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其他一些元数据。FAT32 是最老的文件系统,所有操作系统都支持,兼容性最好。但是,它是为32位计算机设计的,文件不能超过 2 32 – 1 个字节,也就是不能超过 4GB,分区不能超过 8TB。目前来看,这个文件系统有点过时了,只适合小文件,如果有大的视频文件,就不能使用它。特点:FAT32文件系统用4个字节(32位)空间来表示每个扇区配置文件的情形,所以叫FAT32。分区容量最低是512M,而上限的话不同的操作系统都不一样,WinXP系统最大可以做到2TB的FAT32分区。2、NTFSNTFS 是 Windows 的默认文件系统,用来替换 FAT32。Windows 的系统盘只能使用这个系统,移动硬盘买来装的也是它。与FAT32对比如下:特点:NTFS文件系统是windows NT核心和高级服务器网络操作系统环境的文件系统。NTFS系统比FAT32的可靠性更高,可以支持更大的分区和更大的文件,此外还有不少FAT32没有的功能,比如压缩分区、文件索引、数据保护和恢复、加密访问等。3、exFATexFAT 可以看作是 FAT32 的64位升级版, ex 就是 extended 的缩写(表示"扩展的 FAT32"),功能不如 NTFS,但是解决了文件和分区的大小问题,两者最大都可以到 128PB。由于 Mac 和 linux 电脑可以读写这种系统,所以移动硬盘的文件系统可以改成它。 (全称Extended File Allocation Table File System,扩展FAT,即扩展文件分配表)是Microsoft在 Windows Embeded 5.0 以上(包括 Windows CE 5.0 、6.0、 Windows Mobile5、6、6.1)中引入的一种适合于闪存的文件系统,为了解决 FAT32 等不支持4G及其更大的文件而推出。对于闪存, NTFS文件系统不适合使用,exFAT更为适用。特点:exFAT文件系统是微软在windows embeded5.0以上引入的一种适合于闪存的文件系统,主要是为了解决FAT32不支持4G或更大文件的问题而推出的。FAT32与exFAT可用4GB文件的区别大多数U盘在格式化时默认FAT32,最大优点就是在一个不超过8GB的分区中,FAT32的每个簇容量都固定为4KB,与前代相比可以大大地减少磁盘的浪费,提高磁盘利用率。虽然对于最大分区容量的支持上面,FAT32的2TB最大分区容量至今仍不过时,但FAT32无法传输并存放超过4GB容量的光盘ISO镜像、高清视频、各种图形作品文件等等,这是最致命的弊端。而exFAT格式在苹果本或者是Windows电脑上都可以格式化,并且在两个系统之间可以互相无障碍使用。相比之下,exFAT格式就没有4GB文件传输限制了。其实FAT32与exFAT存在着一个升级关系,这两种文件系统都支持OS X系统与Windows系统,如果你将U盘格式化成这两种文件系统,在不同操作系统电脑上可以畅通无阻地使用。NTFS相比FAT会让闪存性能降低NTFS是相当流行的,但多见于硬盘。XP、Vista、Win7默认都会将分区格式化为NTFS系统,可以说NTFS是目前最好的磁盘文件系统。U盘在格式化为NTFS时,实际可用容量与其他文件系统形式也有所差别,虽然使用中感受并不是很大。另外,在格式化U盘时,容量在64G甚至更大规格时,系统识别自动格式化为exFAT与NTFS格式,会便于优盘在不同操作系统电脑上无障碍使用。但是,NTFS也有他的缺点,NTFS分区采用“日志式”,因为要记录磁盘的详细读写操作,对U盘这种快闪存储介质会造成较大的负担,比如同样存取一个文件或目录,在NTFS上的读写次数就会比FAT32更多,理论上NTFS格式的U盘比较容易损坏。并且由于U盘带宽有限,NTFS频繁读写占据通道会让磁盘性能降低。总结FAT32与exFAT之间最大的差别在于能否支持4GB及以上容量单个文件的传输、查看与编辑;而FAT系列文件系统与NTFS之间最大的区分在于文件存取的方式,后者长期使用可能会让闪存类存储产品性能降低.

❸ FAT结构!

FAT 概述文件配置表(英文:File Allocation Table,首字母缩略字:FAT)又称文档分配表,是一种由微软发明并拥有部分专利的文档系统,供MS-DOS使用,也是所有非NT内核的微软窗口使用的文件系统。FAT文档系统考虑当时计算机性能有限,所以未被复杂化,因此几乎所有个人计算机的操作系统都支持。 历史FAT文件系统遵行已用了多年的软件方法来进行规范。它在1977年由比尔·盖茨和马斯·麦当劳为了管理磁盘而发明,并在1980年被添·彼得逊的86-DOS操作系统采用。这也是86-DOS操作系统与CP/M操作系统最大的不同点,若非此项差异,86-DOS操作系统与CP/M操作系统几乎可说完全相同。 FAT12 初期的FAT就是现在俗称的FAT12。作为软盘的文件系统,它有几项限制:不支持分层性结构,丛集寻址只有12位(这使得控制FAT有些棘手)而且只支持最多32M(216)的分区。 当时入门级的磁盘是5.25"、单面、40磁道、每个磁道8个扇区、容量略少于160KB。上面的限制超过了这个容量一个或几个数量级,同时允许将所有的控制结构放在第一个磁道,这样在读写操作时移动磁头。这些限制在随后的几年时间里被逐步增大。 由于唯一的根目录也必须放在第一个磁道,能够存放的文件个数就限制在了几十个。 目录 为了很好地支持以带有10MB硬盘为特色的IBM PC XT新计算机,在1983年年初MS-DOS 2.0几乎与该计算机在同时发布,它引进了层次目录结构。除了允许更好地组织文件外,目录允许在硬盘上存储更多的文件,这是因为最大文件个数不再受制于(仍然是固定的)根目录大小。这个数目现在能够等同于簇的数目(甚至更大,这是考虑到长度为0的文件并不占据任何FAT簇)。 FAT本身的格式并没有改变。PC XT的10MB的硬盘有4KB大小的簇。如果后来安装了一个20MB的硬盘,并且使用MS-DOS 2.0格式化,最后的簇大小将变为8KB,硬盘容量将变为15.9MB。 FAT16的开始 在1984年,IBM发布PC AT,这是一个20 MB的硬盘。微软公司也同步发布了MS-DOS 3.0。簇集地址增加至16位,允许更大数量的簇(最大 65,517),所以有更大的文件系统大小。但是,最大数量磁区及最大分割区(相当于磁盘)的大小仍是32 MB。所以,尽管技术上已经是“FAT16”,这种格式并不是我们今天常见到的这个名字所代表的格式。在MS-DOS 3.0格式化一个20 MB的硬盘,这硬盘将不能被MS-DOS 2.0或之前的版本所存取。当然,MS-DOS 3.0 仍然可存取MS-DOS 2.0的格式(8 KB簇的分割区)。 MS-DOS 3.0也开始支持高密度1.2MB 5.25"磁盘,最著名的是每个磁道有15个扇区,这样就允许FAT有更大的空间。这或许促进了一个对于簇大小的不确定的优化,簇大小从2个扇区减到1个。这样做的最后结果是高密度磁盘比旧的双密度磁盘的速度大幅度降低。 扩展分区和逻辑驱动器 除了改进FAT文件系统本身的结构之外,一个并行的提高FAT存储空间的开发路线是支持多个磁盘分区。最初,由于主引导分区中文件分配表的固定结构的原因一个硬盘只能使用多达4个分区。然而,由于DOS设计要求只能有一个分区标识为“活动的”,它也是主引导代码启动所用的分区。使用DOS工具不可能创建几个“主”DOS分区,并且第三方的工具也至少会警告这样一个机制将与DOS不兼容。 为了用一种兼容的方式使用更多的分区,一种新的分区类型被开发出来(1986年]1月的MS-DOS 3.2),扩展分区它实际上是另外称为逻辑分区的一个容器。最初它里面只允许有一个逻辑分区、支持最大64MB的硬盘。在MS-DOS 3.3(1987年8月)这个限制更改到24个分区;它可能来自于强制性的C:-Z:的磁盘命名规则。逻辑分区表使用盘上的数据结构来描述,可能是为了简化编码它与主引导记录非常相似,并且它们组织成类似于俄罗斯套娃那样的结构。系统中只能有一个扩展分区。 在扩展分区引入之前,一些硬盘控制器(当时是独立的板子,因为还没有IDE标准)能够将大硬盘显示为两个独立的硬盘。作为一种选择,如Ontrack[1]的磁盘管理员这样的一些特殊软件可以用于同样目的。 最终的FAT16 1987年11月我们今天称为FAT的格式最终到来,它在康柏 DOS 3.31中去掉了磁盘扇区的16位计数器。这个结果曾经一度被称为DOS 3.31大文件系统。尽管看起来磁盘上的变动很小,这个DOS的磁盘代码都必须检查并转换到32位的扇区数,由于它全部是16位的汇编语言这样一个现实,这项工作就变得非常复杂。 1988年这项改进通过MS-DOS 4.0得到广泛应用。现在分区大小受限于每个簇的8位有符号扇区计数,它最大能达到2的64次方,对于一个常用的有32KB个簇每扇区512字节的硬盘来说,将FAT16分区大小的“明显”限制扩充到2GB。在磁光盘媒体上,它能使用1或者2KB的扇区,这样大小限制也就成比例地增大。 后来,视窗NT通过将每个簇的扇区数当作无符号数将最大的簇大小增加到64KB。然而这个格式与当时其它的任何FAT实现都不兼容并且产生了大量内部碎片。视窗98也支持这种格式的读写操作但是它的磁盘管理工具不支持这种格式。 长文件名(VFAT, LFN) Windows 95设计人员的一个用户体验目标就是除了传统的8.3文件名以外在新操作系统中使用长文件名(LFN)。长文件名通过在目录条目排列时使用一个工作区来实现(参见下面)。按照Windows 95VxD设备驱动程序的命名规则这个新扩充的文件系统通常称为VFAT。 有意思的是,VFAT驱动在早于Windows 95的Windows for Groups 3.11中就已经出现,但它仅仅用于实现32位文件访问,一个绕过DOS的视窗自带高性能保护模式文件管理系统,它能够直接使用BIOS或者更好的32位磁盘访问,如视窗自带的保护模式磁盘驱动程序。它是一个后门;微软为Windows for Groups 3.11所作的广告说32位文件访问基于“芝加哥项目的32位文件系统”。 在Windows NT中,FAT文件系统对于长文件名的支持从3.5版就已经开始了。 FAT32 为了解决FAT16对于卷大小的限制同时让DOS的真实模式在非必要情况下不减少可用常规内存状况下处理这种格式,微软公司决定实施新一代的FAT,它被称为FAT32,带有32位的簇数,目前用了其中的28位。 理论上,这将支持总数达268,435,438(<228)的簇,允许磁盘容量达到2字节。然而,由于微软公司scandisk工具的限制,FAT不能大于4,177,920(<222)个簇,这将卷的容量限制在了124.55GB,除非不再使用“scandisk”。[2] FAT32随着视窗95 OSR2发布,尽管需要重新格式化才能使用这种格式并且DriverSpace 3(视窗95 OSR2和视窗98所带版本)从来都不支持这种格式。视窗98提供了一个工具用来在不丢失数据的情况下将现有的硬盘从FAT16转到FAT32格式。在NT产品线上对于它的支持从视窗2000开始。 视窗2000和视窗XP能够读写任何大小的FAT32文件系统,但是这些平台上的格式化程序只能创建最大32GB的FAT32文件系统。Thompson and Thompson (2003)写道“奇怪的是微软公司说这种现象是故意设计的”[3] 微软公司知识库文章 184006[4]的确是这么说的,但是没有提出任何关于这个限制的合理解释。Peter Norton的观点是“微软公司在有意地削弱FAT32文件系统”[5]。 第三方支持 其它IBM PC的可选操作系统—如Linux、FreeBSD和BeOS—都支持FAT格式,并且大部分都在相应的视窗版本发布以后很快就支持VFAT和FAT32格式。早期的Linux发布版本还包括称为UMSDOS的格式,它是保存在一个独立的称为–linux-.—的带有Unix文件属性(如长文件名和访问许可)的FAT。UMSDOS在VFAT发布以后就不再使用从Linux内核2.5.7开始就禁止了这项功能。Mac OS X操作系统在除启动盘之外的其它卷上也支持FAT文件系统。 FAT和其它数据流 FAT文件系统本身不是为支持ADS而设计的,但是一些高度依赖它们的操作系统创造出不同的方法在FAT驱动器上处理它们。这些方法或者在额外的文件或路径中存储附加的信息(Mac OS),或者给那些磁盘数据结构中以前没有使用的变量赋予新的含义(OS/2和视窗NT)。第二种设计,尽管想象起来会更有效率,但是它们不能被不认识这种格式的工具复制或者备份;使用不能识别这种格式的磁盘工具(如碎片整理或CHKFSK)控制这些磁盘可能会破坏这些信息。 Mac OS使用PC Exchange存储不同的数据,文件属性和文件名存在一个名为FINDER.DAT的隐藏文件中,资源分支(ADS)存在名为RESSOURCE.FRK的子目录中,这些数据都存在使用它们的每个目录中。从PC Exchange 2.1开始,它们将Mac OS的长文件名保存为标准的FAT长文件名,并且将超过31个字符的FAT长文件名转换为唯一的31字符能够被Macintosh应用程序识别的文件名。 Mac OS X将元数据(资源分支、不同的ADS、文件属性)保存在与所有人相同并以“._”开始的名字的隐藏文件中,并且Finder将一些文件夹和文件元数据存在名为“.DS_Store”的隐藏文件中。 OS/2高度依赖于扩展属性(EA)并且将它们存在位于FAT12或FAT16的根目录下名为“EA DATA. SF”的隐藏文件中。这个文件使用以前文件(或者目录)的目录清单中的两个保留字节索引。在FAT32格式中,这些字节中存有文件或者目录开始簇号的高16位,这样就使它难于在FAT32上保存EA。扩展属性可以通过Workplace Shell桌面、REXX脚本、许多系统图形用户接口和命令行工具(如4DOS|4OS2]]来访问。 Windows NT支持HPFS、NTFS和FAT中所有扩展属性的处理(所用处理机制完全类似于OS/2),但是不能处理其它一些存于NTFS驱动器的ADS数据。试图从复制带有与NTFS驱动器属性不同扩展属性的ADS到FAT驱动器将报告一个警告信息提示ADS将会丢失。 Windows 2000以后产品的处理类似于视窗NT但复制到FAT32时它们没有显示任何警告信息直接丢弃扩展属性(但报告其它象“Macintosh Finder Info”和“Macintosh Resource Fork”这些ADS引起的警告)。 前景 微软公司最近获得了VFAT和FAT32的专利(但没有得到最初的FAT的专利),这引起人们对于微软将会寻求从Linux OS发布和初始化他们产品的媒体厂商收取专利费的担忧(参见下面的FAT授权协议)。尽管最初的裁定不利于微软公司,但是微软仍然取得了胜利并且得到了专利授权。 由于微软公司已经宣布不再开发基于MS-DOS的消费用操作系统视窗Me的后续版本,所以不再有可能会有新版的FAT。对于大多数用途来说,为视窗NT系列开发的NTFS文件系统从效率、性能和可靠性来说都优于FAT;它的主要缺点是小容量文件所占的额外空间以及除了基于NT的视窗之外的很少有其他操作系统支持。由于确切的规范是微软公司的商业秘密,这就使得使用一个DOS软盘用于恢复目的很困难。微软公司提供了一个恢复界面来解决这个问题,由于安全的原因它严重限制了缺省情况下它能解决的问题。 FAT仍然是活动媒体的常用文件系统(CD和DVD是例外),软碟使用的是FAT12,其它多数活动媒体用的是FAT16(如用于数位相机的快闪记忆卡和USB随身碟)。许多活动媒体还没有达到能够享用FAT32。出于兼容性和存储空间利用率的考虑FAT仍然用在这些驱动器上,同时也是由于这些活动媒体上的文件的许可更容易遇到麻烦而不是更重要这样一个事实。 视窗2000和XP支持的FAT32格式化的限制是32GB,这非常有效地强迫使用现代硬盘的用户或者使用NTFS或者在视窗之外格式化驱动器。一个解决的办法是使用从Linux移植到视窗平台的一个工具version of mkdosfs。 这里也有一个自由开源的工具。

❹ FAT文件系统目录和子目录的关系是如何关联的

一个文件系统包括四个不同的部分。保留扇区,位于最开始的位置。第一个保留扇区是引导区(分区启动记录)。它包括一个称为基本输入输出参数块的区域(包括一些基本的文件系统信息尤其是它的类型和其它指向其它扇区的指针),通常包括操作系统的启动调用代码。保留扇区的总数记录在引导扇区中的一个参数中。引导扇区中的重要信息可以被DOS和OS/2中称为驱动器参数块的操作系统结构访问。 FAT区域。它包含有两份文件分配表,这是出于系统冗余考虑,尽管它很少使用,即使是磁盘修复工具也很少使用它。它是分区信息的映射表,指示簇是如何存储的。 根目录区域。它是在根目录中存储文件和目录信息的目录表。在FAT32下它可以存在分区中的任何位置,但是在早期的版本中它永远紧随FAT区域之后。 数据区域。这是实际的文件和目录数据存储的区域,它占据了分区的绝大部分。通过简单地在FAT中添加文件链接的个数可以任意增加文件大小和子目录个数(只要有空簇存在)。然而需要注意的是每个簇只能被一个文件占有,这样的话如果在32KB大小的簇中有一个1KB大小的文件,那么31KB的空间就浪费掉了。 例外情况Apricot PC的MS-DOS所用FAT的实现有一个不同的启动扇区组织以使用计算机与IBM不兼容的基本输入输出系统。跳转指令和OEM名被省略并且MS-DOS文件系统参数位于0x50(在标准扇区中偏移为0x0B – 0x17)。后来的Apricot MS-DOS版本除了Apricot特有的引导区之外也具有了读写标准启动分区的能力。BBC Master 512 上的DOS Plus根本就不使用传统的引导区。数据磁盘省略了引导区并且以一个单份的FAT开始(FAT的第一个字节用来确定磁盘容量),启动磁盘使用一个包含启动调用程序的小型ADFS文件系统,后面跟随一个单份的FAT。文件分配表一个分区分成同等大小的簇,也就是连续空间的小块。簇的大小随着FAT文件系统的类型以及分区大小而不同,典型的簇大小介于2KB到32KB之间。每个文件根据它的大小可能占有一个或者多个簇;这样,一个文件就由这些这些(称为单链表)簇链所表示。然而,这些链并不一定一个接着一个在磁盘上存储,它们经常是在整个数据区域零散的储存。文件分配表(FAT)是映射到分区每个簇的条目列表。每个条目记录下面五种信息中的一种。链中下一个簇的地址 一个特殊的文件结束符(EOF)符号指示链的结束 一个特殊的符号标示坏簇 一个特殊的符号标示保留簇 0来表示空闲簇 每个版本的FAT文件系统使用不同大小的FAT条目。这个大小已经由名字表示出来,例如FAT16文件系统的每个条目使用16位表示,32位文件系统使用32位表示。这个不同意味着FAT32系统的文件分配表能比FAT16映射更多的簇,它也允许FAT32有更大的分区大小。这也使得FAT32比FAT16更能有效地利用磁盘空间,因为每个驱动器能够寻址更小的簇,这也就意味着更少的空间浪费。目录表目录表是一个表示目录的特殊类型文件(现今通常称为文件夹)。它里面保存的每个文件或目录使用表中的32位条目表示。每个条目记录名字、扩展名、属性(档案、目录、隐藏、只读、系统和卷)、创建的日期和时间、文件/目录数据第一个簇的地址,最后是文件/目录的大小。除了FAT12和FAT16文件系统中的根目录表占据特殊的根目录区域位置之外,所有其它的目录表都存在数据区域。合法的DOS文件名包括下面一些字符:大写字母A-Z 数字0-9 空格(尽管结尾的空格被作为填充而不是文件名的一部分) ! # $ % & ( ) – @ ^ _ ` { } ~ ' 数值 128-255 DOS文件名位于OEM字符集。长文件名(LFN)使用一个技巧存储在FAT文件系统上——在目录表中添加假的条目。这些条目使用一个普通文件无法使用的卷标属性标识,普通文件无法使用是由于它们被大多数旧的MS-DOS程序忽略。很显然,一个只包含卷标的目录被当作空卷,这样就允许删除;使用长文件名创建的文件在从普通的DOS删除就会发生这样的情形。校验和也允许检验长文件名是否与8.3文件名匹配;当一个文件删除之后使用DOS在同一个目录位置重新创建之后就会出现不匹配现象。校验和使用下面的算法计算。(注意pFcbName是指向如正常目录条目中所显示的文件名的指针,例如前八个字符是文件名,最后三个是扩展名。点是隐含的。文件名中没有使用的空间将使用空格(ASCII 0x20)补齐。例如,“Readme.txt”将记录为"README TXT"。unsigned char lfn_checksum(const unsigned char *pFcbName){int i;unsigned char sum=0;for (i=11; i; i–)sum = ((sum & 1) ? 0x80 : 0) + (sum >> 1) + *pFcbName++;return sum;}旧版的PC-DOS错误地将根目录中的长文件名当作卷标,这样它们就会显示错误的卷标。每个假条目包含13UTF-16个字符(26字节),通过使用包含文件大小或者时间记录的区域获得除了旧的8+3之外的另外15个字节(但是出于安全和磁盘检查工具的考虑开始簇的区域没有使用保留值为0)。参见8.3中另外的解释。如果一个文件名只包含小写字母、或者是一个小写字母的名加上大写扩展名的混合或者与此相反,没有特殊的字符并且满足8.3的限制,在视窗NT上就不创建VFAT的条目。相反,在目录条目的偏移0x0c处的没有说明的位用来指示文件名全部或者部分是小写字母。特别明确的是,位4意味着小写字母的扩展名,位3意味着名是小写字母,这样就允许如“example.TXT”和“HELLO.txt”这样的组合,但是不允许“Mixed.txt”这样的组合。很少有操作系统支持这种功能。非NT视窗版本当这个扩展使用时将把文件名当作大写字母。缺省情况下,Linux的最近版本将认识这个扩展但是在写时并不使用它。第三方扩展在微软公司添加长文件名和创建/访问时间戳之前,其它的操作系统使用目录表字节0x0C-0x15存储其它的元数据。

❺ FAT是什么格式

FAT不是指格式,FAT是文件配置表(全称是File Allocation Table),是一种由微软发明并拥有部分专利的文件系统,供MS-DOS使用,也是所有非NT核心的微软窗口使用的文件系统。

一个FAT文件系统包括四个不同的部分。保留扇区,位于最开始的位置。第一个保留扇区是引导区(分区启动记录);FAT区域,它包含有两份文件分配表,是分区信息的映射表;根目录区域,它是在根目录中存储文件和目录信息的目录表;数据区域,是实际的文件和目录数据存储的区域。

(5)fat系统文件目录结构扩展阅读:

FAT的最大分区

在FAT16中,采用了16bit宽的簇地址,32bit宽扇区地址。虽然32bit的扇区地址可以寻址2^32*512,约2个TB的容量,但于由规定每簇最大的容量不超过1024*32,所以FAT16文件系统的容量也就限制到了2^16*1024*32,大约2.1GB的空量。

FAT32文件系统使用了32bit宽的簇地址,所以称为FAT32。但在微软件的文件系统中只使用了低28位,最大容量为2^28*1024*32,约8.7TB的空量。

虽然FAT32具有容纳近乎8.7TB的容量,但实际应用中通常不使用超过32GB的FAT32分区。WIN2000及之上的OS已经不直接支持对超过32GB的分区格式化成FAT32,但WIN98依然可以格式化大到127GB的FAT32分区。


赞 (0)