脂肪的历史
当时入门级磁盘5.25,单面,40磁道,每磁道8扇区,容量略小于160KB。上述限制超出了该容量一个或几个数量级,同时允许所有控制结构被放置在第一轨道上,从而在读和写操作期间移动磁头。这些限制在接下来的几年里逐渐增加。
由于唯一的根目录也必须放在第一个轨道上,所以可以存储的文件数量被限制在几十个。为了支持10MB硬盘的新型IBM PC XT电脑,MS-DOS 2.0在1983年初几乎与这台电脑同时发布,它引入了分层目录结构。除了允许更好地组织文件之外,目录还允许在硬盘上存储更多的文件,因为文件的最大数量不再受(仍然固定的)根目录大小的限制。这个数字现在可以等于簇的数量(甚至更大,考虑到长度为0的文件不占用任何FAT簇)。
FAT本身的格式并没有改变。PC XT的10MB硬盘有4KB簇。如果后来装了一个20 MB的硬盘,用MS-DOS 2.0格式化,最终的簇大小会变成8KB,硬盘容量会变成15.9MB,1984年IBM发布了PC AT,这是一个20MB的硬盘。微软也同步发布了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个扇区,这就给胖子留出了更多的空间。这可能促进簇大小的不确定优化,簇大小从2个扇区减少到1。这样做的最终结果就是高密度盘的速度远远低于老的双密度盘。除了改进FAT文件系统本身的结构,一个提高FAT存储空间的并行开发路线是支持多个磁盘分区。最初,由于主引导分区中文件分配表的固定结构,一个硬盘最多只能使用4个分区。但是,由于DOS设计要求只能有一个分区被标记为“活动的”,所以它也是主引导代码用来启动的分区。使用DOS工具不可能创建几个“主”DOS分区,第三方工具至少会警告这样的机制会与DOS不兼容。
为了以兼容的方式使用更多的分区,开发了新的分区类型(1986 65438+10月的MS-DOS 3.2),它实际上是一个叫做逻辑分区的容器。最初,它只允许一个逻辑分区,并支持最大64MB的硬盘。在MS-DOS 3.3(1987年8月)中,这个限制改为24个分区;它可能来自强制的C:-Z:磁盘命名规则。逻辑分区表由磁盘上的数据结构描述,可能是为了简化编码。它非常类似于主引导记录,并且它们被组织成类似于俄罗斯娃娃的结构。系统中只能有一个扩展分区。
在扩展分区推出之前,一些硬盘控制器(当时是独立的板卡,因为没有IDE标准)可以将大硬盘显示为两个独立的硬盘。作为替代,一些特殊的软件,如Ontrack[1]的磁盘管理器,也可以用于相同的目的。1987 11我们今天称之为FAT的格式终于来了,它去掉了Compaq 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也支持这种格式的读写操作,但其磁盘管理工具不支持这种格式。Windows 95设计者的一个用户体验目标是,除了传统的8.3文件名之外,在新的操作系统中使用长文件名(LFN)。长文件名是通过在排列目录条目时使用工作空间实现的(见下文)。根据Windows 95VxD设备驱动程序的命名规则,这个新扩展的文件系统通常被称为VFAT。
有意思的是,VFAT驱动在Windows 95之前就已经出现在Windows for Groups 3.11中了,但只是用来实现32位文件访问。一个绕过DOS的Windows有自己高性能的受保护文件管理系统,可以直接使用BIOS或者更好的32位磁盘访问,比如Windows自带的受保护磁盘驱动。这是一个后门;微软在Windows for Groups 3.11的广告中说,32位文件访问是基于“芝加哥项目的32位文件系统”。
在Windows NT中,FAT文件系统从版本3.5开始就支持长文件名。为了解决FAT16中对卷大小的限制,并使DOS的实模式在不减少可用常规内存的情况下处理这种格式,微软决定实现新一代FAT,称为FAT32,簇号为32位,有28位。
理论上,这将总共支持268,435,438(
FAT32是与Windows95 OSR2一起发布的,尽管它需要重新格式化才能使用这种格式,而驱动程序空间3(Windows 95 OSR 2和Windows 98的版本)从不支持这种格式。Windows98提供了一个在不丢失数据的情况下将现有硬盘从FAT16格式转换为FAT32格式的工具。在NT产品线上,它的支持是从Windows2000开始的。
Windows 2000和Windows XP可以读写任意大小的FAT32文件系统,但是这些平台上的格式化程序只能创建最大大小为32GB的FAT32文件系统。Thompson和Thompson (2003)写道“很奇怪,微软说这种现象是故意设计的”[3]微软的知识库文章184006[4]确实这么说了,但是并没有提出任何关于这种限制的合理解释。彼得·诺顿的观点是“微软在故意削弱FAT32文件系统”[5]。在FAT16中,采用16位宽的簇地址和32位宽的扇区地址。虽然32位扇区地址可以寻址2个32 * 512,容量约为2 TB,但每个簇的最大容量不超过1024*32,所以FAT16文件系统的容量限制为2个16 * 1024 *。
FAT32文件系统使用32位宽的簇地址,因此被称为FAT32。但在微软件的文件系统中,只使用了低28位,最大容量为2 ^ 28 * 1024 * 32,约为8.7TB,有人认为32位全部使用,最大容量为2 ^ 32 * 1024 * 32,这是不正确的。
虽然FAT32的容量接近8.7TB,但实际应用中通常不会使用超过32GB的FAT32分区。WIN2000及以上版本的OS不再直接支持将大于32GB的分区格式化为FAT32,但WIN98仍然可以将FAT32分区格式化为127GB,但不建议这样做。FAT文件系统本身并不是为支持ADS而设计的,但是一些高度依赖它的操作系统已经创建了不同的方法来处理FAT驱动器上的ADS。这些方法要么在附加文件或路径中存储附加信息(Mac OS),要么给磁盘数据结构中以前没有使用过的变量赋予新的含义(OS/2和Windows NT)。第二种设计虽然效率更高,但不知道这种格式的工具无法复制或备份;用不识别这种格式的磁盘工具(如碎片整理或CHKFSK)控制这些磁盘可能会破坏这些信息。
Mac OS使用PC Exchange来储存不同的数据。文件属性和文件名存储在一个名为FINDER的隐藏文件中。DAT和资源分支(ADS)存储在名为resource的子目录中。FRK这些数据存储在每个使用它们的目录中。从PC Exchange 2.1开始,他们将Mac OS的长文件名保存为标准的胖长文件名,并将超过31个字符的胖长文件名转换为Macintosh应用程序可以识别的31个字符的唯一文件名。
Mac OS X将元数据(资源分支、不同的ADS、文件属性)保存在一个隐藏文件中,该文件与everyone同名,以“”开头。_ ",Finder会将一些文件夹和文件元数据存储在名为"的隐藏文件中。DS_Store”。
OS/2高度依赖于扩展属性(EA ),并将它们存储在一个名为“EA DATA”的隐藏文件中。SF”位于FAT12或FAT16的根目录中。这个文件使用前一个文件(或目录)的目录列表中的两个保留字节索引。在FAT32格式中,这些字节包含文件或目录的簇号的高16位,这使得在FAT32上保存EA很困难。可以通过Workplace Shell桌面、REXX脚本、许多系统图形用户界面和命令行工具(如4dos | 4os2)来访问扩展属性。
Windows NT支持处理HPFS、NTFS和FAT中的所有扩展属性(使用的处理机制完全类似于OS/2),但不能处理NTFS驱动器中存储的其他ADS数据。试图将具有不同于NTFS驱动器属性的扩展属性的ADS复制到FAT驱动器将会报告一条警告消息,指出ADS将会丢失。
在Windows 2000之后,产品被视为Windows NT,但当它们被复制到FAT32时,它们会丢弃扩展属性,而不显示任何警告信息(但会报告由其他ADS(如“Macintosh Finder Info”和“Macintosh Resource Fork”)引起的警告)。微软获得了VFAT和FAT32的专利(但不是FAT的原始专利),这让人们担心微软会寻求向从Linux OS发布和初始化其产品的媒体厂商收取专利费(见下面的FAT许可协议)。虽然最初的裁决不利于微软,但微软还是赢了,被授予了专利。
既然微软已经宣布不再开发基于MS-DOS的消费者操作系统Windows Me的后续版本,那么已经不可能有新版本的FAT了。大多数情况下,为Windows NT系列开发的NTFS文件系统优于FAT效率、性能和可靠性。它的主要缺点是小容量文件占用的额外空间,以及除了基于NT的windows之外几乎没有其他操作系统支持。因为确切的规范是微软的商业秘密,所以很难使用DOS软盘进行恢复。微软提供了一个恢复接口来解决这个问题,出于安全考虑,这个接口严重限制了它默认可以解决的问题。
FAT仍然是活动介质(CD和DVD除外)的常用文件系统,FAT12用于软盘,而FAT16用于大多数其他活动介质(如数码相机的闪存卡和u盘)。很多活跃媒体还没有到可以享受FAT32的地步。出于兼容性和存储空间利用率的考虑,这些驱动器上仍然使用FAT,这也是由于这些活动介质上的文件的权限与其说更重要,不如说更麻烦。
Windows 2000和XP支持的FAT32格式的限制是32GB,这有效地迫使使用现代硬盘的用户要么使用NTFS,要么在Windows之外格式化驱动器。一种解决方案是使用mkdosfs版本,这是一种从Linux移植到Windows平台的工具。
这里还有一个免费的开源工具。