文件分配表

FAT文件系统遵行已用了多年的软件方法来进行规范。它在1977年由比尔·盖茨和马斯·麦当劳为了管理磁盘而发明,并在1980年被添·彼得逊的86-DOS操作系统采用。这也是86-DOS操作系统与CP/M操作系统最大的不同点,若非此项差异,86-DOS操作系统与CP/M操作系统几乎可说完全相同。[3]

FAT12

编辑

初期的FAT就是现在俗称的FAT12。作为软盘的文件系统,它有几项限制:不支持分层性结构,簇寻址只有12位(这使得控制FAT有些棘手)而且只支持最多32M(216)的分区。

当时入门级的磁盘是5.25"、单面、40磁道、每个磁道8个扇区、容量略少于160KB。上面的限制超过了这个容量一个或几个数量级,同时允许将所有的控制结构放在第一个磁道,这样在读写操作时移动磁头。这些限制在随后的几年时间里被逐步增大。

由于唯一的根目录也必须放在第一个磁道,能够存放的文件个数就限制在几十个。

目录

编辑

MS-DOS 2.0为了支持以内置10MB硬盘为特色的IBM PC XT,因此几乎与该计算机同时在1983年初发布。它引进了层次目录结构,除了允许更有效率地组织文件外,目录允许在硬盘上存储更多的文件,这是因为最大文件个数不再受制于(仍然是固定且有限的)根目录大小。这个数目现在能够等同于簇的数目(甚至更大,这是考虑到长度为0的文件并不占据任何FAT簇)。

FAT本身的格式并没有改变。PC XT的10MB的硬盘有4KB大小的簇。如果后来安装了一个20MB的硬盘,并且使用MS-DOS 2.0格式化,最后的簇大小将变为8KB,硬盘容量将变为15.9MB。

FAT16的开始

编辑

在1984年,IBM发布PC AT,内含一个20MB的硬盘。微软公司也同步发布了MS-DOS 3.0。簇集地址增加至16位,允许更大数量的簇(最大65,517),所以有更大的文件系统大小。但是,最大数量扇区及最大分区(相当于磁盘)的大小仍是32MB。所以,尽管技术上已经是“FAT16”,这种格式并不是我们今天常见到的这个名字所代表的格式。在MS-DOS 3.0格式化一个20 MB的硬盘,这硬盘将不能被MS-DOS 2.0或之前的版本所访问。当然,MS-DOS 3.0仍然可访问MS-DOS 2.0的格式(8KB簇的分区)。

MS-DOS 3.0也开始支持高密度1.2MB 5.25"磁盘,最著名的是每个磁道有15个扇区,这样就允许FAT有更大的空间。这或许促进了一个对于簇大小的不确定的优化,簇大小从2个扇区减到1个。这样做的最后结果是高密度磁盘比旧的双密度磁盘的速度大幅度降低。

扩展分区和逻辑驱动器

编辑

除了改进FAT文件系统本身的结构之外,另一个提高FAT存储空间的方式是支持多个磁盘分区。最初,受限于主引导记录中文件分配表的固定结构一个硬盘最多只能切出多达4个分区。然而,由于DOS设计要求只能有一个分区标识为“活动的(Active)”,它也是主引导代码启动所用的分区。使用DOS工具不可能创建几个“主”DOS分区,并且第三方的工具也至少会警告这样一个机制将与DOS不兼容。

为了用一种兼容的方式使用更多的分区,一种新的分区类型被开发出来(1986年1月的MS-DOS 3.2),扩展分区它实际上是另外称为逻辑分区的一个容器。最初它里面只允许有一个逻辑分区、支持最大64MB的硬盘。在MS-DOS 3.3(1987年8月)这个限制更改到24个分区;它可能来自于强制性的C:-Z:的磁盘命名规则。逻辑分区表使用盘上的数据结构来描述,可能是为了简化编码它与主引导记录非常相似,并且它们组织成类似于俄罗斯套娃那样的结构。一颗硬盘中只能有一个扩展分区。

在扩展分区观念导入之前,一些硬盘控制器(当时采用独立的硬盘控制卡,IDE标准尚未出现)能够将大硬盘显示为两个独立的硬盘。

最终的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的扇区,这样大小限制也就成比例地增大。

后来,Windows NT通过将每个簇的扇区数当作无符号数将最大的簇大小增加到64KB。然而这个格式与当时其它任何格式的FAT都不兼容,并且这样的操作会产生大量的内部碎片。Windows 98也支持这种格式的读写操作,但是它的磁盘管理工具不支持这种格式。

长文件名(VFAT, LFN)

编辑

主条目:长文件名

Windows 95设计人员的一个用户体验目标就是:除了传统的8.3文件名以外,在新操作系统中使用长文件名(LFN)。长文件名通过在目录条目排列时,使用一个工作区来实现(参见下面)。按照Windows 95VxD设备驱动程序的命名规则,这个新扩充的文件系统通常称为VFAT。

有意思的是,VFAT驱动在早于Windows 95的Windows for Groups 3.11中就已经出现,但它仅仅用于实现32位文件访问,一个绕过DOS的视窗自带高性能保护模式文件管理系统,它能够直接使用BIOS或者更好的32位磁盘访问,如Windows自带的保护模式磁盘驱动程序。它是一个后门;微软为Windows for Groups 3.11所作的广告说32位文件访问基于“芝加哥项目的32位文件系统”。

在Windows NT中,FAT文件系统对于长文件名的支持从3.5版就已经开始了。在MS-DOS 7.0以后的版本中,则可使用类似DOSLFN这样的软件使得DIR等命令显示出长文件名。

FAT32

编辑

为了解决FAT16对于卷大小的限制同时让DOS的实模式在非必要情况下不减少可用常规内存状况下处理这种格式,微软公司决定实施新一代的FAT,它被称为FAT32,带有32位的簇数,目前用了其中的28位。

理论上,这将支持总数达268,435,438(<228)的簇,允许磁盘容量达到8TB。

FAT32随着Windows 95 OSR2发布,尽管需要重新格式化才能使用这种格式并且DriveSpace 3(Windows 95 OSR2和Windows 98所带版本)从来都不支持这种格式。Windows 98提供了一个工具用来在不丢失数据的情况下将现有的硬盘从FAT16转到FAT32格式。在NT产品线上对于它的支持从Windows 2000开始。

Windows 2000和Windows XP能够读写任何大小的FAT32文件系统,但是这些平台上的格式化程序只能创建最大32GB的FAT32文件系统。Thompson and Thompson(2003)写道“奇怪的是微软公司说这种现象是故意设计的”[4]微软公司知识库文章184006[5]的确是这么说的,但是没有提出任何关于这个限制的合理解释。Peter Norton的观点是“微软公司在有意地削弱FAT32文件系统”[6]。

原微软开发者Dave Plummer于2024年3月25日在twitter称,将FAT卷的大小限制在32GB是他临时设定的,相关格式化对话框就是他写的[7]。

2024年8月15日,微软在Windows 11 Insider Preview Build 27686发布公告中,宣布取消了FAT32分区大小限制,用户可以在命令行中使用format命令格式化最大2TB的FAT32分区,但图形界面的格式化对话框仍然只支持32GB[8]。

exFAT

编辑

主条目:exFAT

在Windows Embedded CE 6.0中引入,Windows XP SP3 以及 Windows Vista SP1也引入了exFAT的支持。在很多方面exFAT有了相当大的改进,特别适合用于闪存。

第三方支持

编辑

其它IBM PC的可选操作系统,如Linux、FreeBSD和BeOS都支持FAT格式,并且大部分都在相应的Windows版本发布以后很快就支持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和Windows NT)。第二种设计,尽管想像起来会更有效率,但是它们不能被不认识这种格式的工具复制或者备份;使用不能识别这种格式的磁盘工具(如碎片整理或CHKDSK)操控这些磁盘时可能会破坏这些信息。

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脚本、许多系统图形用户接口和命令行工具(如4OS2)来访问。

Windows NT支持HPFS、NTFS和FAT中所有扩展属性的处理(所用处理机制完全类似于OS/2),但是不能处理其它一些存于NTFS驱动器的ADS数据。试图从复制带有与NTFS驱动器属性不同扩展属性的ADS到FAT驱动器将报告一个警告信息提示ADS将会丢失。

Windows 2000以后产品的处理类似于Windows NT但复制到FAT32时它们没有显示任何警告信息直接丢弃扩展属性(但报告其他像“Macintosh Finder Info”和“Macintosh Resource Fork”这些ADS引起的警告)。

前景

编辑

微软公司最近获得了VFAT和FAT32的专利(但没有得到最初的FAT的专利),这引起了人们对于微软将会对Linux OS发布和初始化他们产品的媒体厂商收取专利费的担忧(参见下面的FAT授权协议)。尽管最初的裁定不利于微软公司,但是微软仍然获取了胜利并且得到了专利授权。

由于微软公司已经宣布不再开发基于MS-DOS作业系统Windows Me的后续版本,所以不再有可能会有新版的FAT。对于大多数用途来说,为Windows NT系列开发的NTFS文件系统从效率、性能、安全性及可靠性来说都优于FAT;它的主要缺点是小容量文件所占的额外空间以及除了基于NT的Windows操作系统之外的很少有其他操作系统支持。由于确切的规范是微软公司的商业秘密,这就使得使用一个DOS软盘用于恢复目的很困难(根据微软MCSE训练教材帮助此点是刻意保密,以确保NTFS文件系统不易被盗取资料)。微软公司提供了一个恢复界面来解决这个问题,由于安全的原因它严重限制了缺省情况下它所能解决的问题。

FAT仍然是移动媒体所常用的一种文件系统(CD和DVD是例外),软盘使用的是FAT12,其他多数活动媒体用的是FAT32(如用于数位相机的快闪存储卡和USBU盘,Windows格式化的默认选项仍为FAT32),除非其容量超出FAT32的限制。出于兼容性和存储空间利用率的考虑FAT仍然用在这些驱动器上,同时也是由于这些活动媒体上的文件的许可更容易遇到麻烦而不是更重要这样一个事实。

Windows 2000和XP支持的FAT32格式化的限制是32GB,这导致使用现代硬盘的用户必须要么使用NTFS要么使用其它程序格式化驱动器。一个解决的办法是使用从Linux移植到Windows平台的一个工具mkdosfs。

今日头条我的收藏在哪里?收藏怎么找不到了?2024-04-23 09:51:1520511浏览
数据 | 2023年中国送了多少颗“星星”上太空?