更新时间:2023-12-16 20:16
FAT(File Allocation Table)是“文件分配表”的意思。顾名思义,就是用来记录文件所在位置的表格,它对于硬盘的使用是非常重要的,假若丢失文件分配表,那么硬盘上的数据就会因无法定位而不能使用了。不同的操作系统所使用的文件系统不尽相同,在个人计算机上常用的操作系统中,MS-DOS 6.x及以下版本使用FAT16。操作系统根据表现整个磁盘空间所需要的簇数量来确定使用多大的FAT。所谓簇就是磁盘空间的配置单位,就象图书馆内一格一格的书架一样。FAT16使用了16位的空间来表示每个扇区(Sector)配置文件的情形,故称之为FAT16。
FAT16由于受到先天的限制,因此每超过一定容量的分区之后,它所使用的簇(Cluster)大小就必须扩增,以适应更大的磁盘空间。所谓簇就是磁盘空间的配置单位,就象图书馆内一格一格的书架一样。每个要存到磁盘的文件都必须配置足够数量的簇,才能存放到磁盘中。FAT16各分区与簇大小的关系如下表:
分区大小 FAT16簇大小
16MB-127MB 2KB
128MB-255MB 4KB
256MB-511MB 8KB
512MB-1023MB16KB
1024MB-2047MB 32KB
如果你在一个1000MB的分区中存放50KB的文件,由于该分区簇的大小为16KB,因此它要用到4个簇才行。而如果是一个1KB的文件,它也必须使用一个簇来存放。那么每个簇中剩下的空间可否拿来使用呢?答案是不行的,所以在使用磁盘时,无形中都会或多或少损失一些磁盘空间。
由上可知,FAT16文件系统有两个最大的缺点:
(1)磁盘分区最大只能到2GB。当前只要你添购计算机的话,想必其中的硬盘大小必定至少有2GB,而现在300GB,700GB以上的硬盘比比皆是,且物美价廉。FAT16文件系统已不能适应当前这种大容量的硬盘,必须被迫分区成几个磁盘空间。而分区磁盘的大小又牵扯出簇的问题来,可谓影响颇大。
(2)使用簇的大小不恰当。试想,如果一个只有1KB大小的文件放置在一个1000MB的磁盘分区中,它所占的空间并不是1KB,而是16KB,足足浪费了15KB!当前流行的HTML文件,其大小几乎多为1KB、2KB,而制作一个网站往往用到数十个HTML文件。如果你的硬盘中有100个这种小文件的话,你浪费的磁盘空间可从700KB(511MB的分区),到3.1MB(2047MB的分区)。
以上这两个问题常常使得用户在“分多大的分区,才能节省空间,同时又可使硬盘的使用更加方便有效”的抉择中徘徊不定。
在Dos2.0的使用过程中,对更大的磁盘的管理能力的需求已经出现了,所以在Dos3.0中,微软推出了新的文件系统Fat16。除了采用了16位字长的分区表之外,Fat16和Fat12在其他地方都非常的相似。实际上,随着字长增加4位,可以使用的簇的总数增加到了65536。在总的簇数在4096之下的时候,应用的还是Fat12的分区表,当实际需要超过4096簇的时候,应用的是Fat16的分区表。刚推出的Fat16文件系统管理磁盘的能力实际上是32M。这在当时是看来是足够大的。1987年,硬盘的发展推动了文件系统的发展,Dos4.0之后的Fat16可以管理128M的磁盘。然后这个数字不断的发展,一直到2G。在整整的10年中,2G的磁盘管理能力都是大大的多于了实际的需要。需要指出的是,在windows95系统中,采用了一种比较独特的技术,叫做VFat来解决长文件名等问题。FAT16分区格式存在严重的缺点:大容量磁盘利用效率低。在微软的DOS和Windows系列中,磁盘文件的分配以簇为单位,一个簇只分配给一个文件使用,不管这个文件占用整个簇容量的多少。这样,即使一个很小的文件也要占用一个簇,剩余的簇空间便全部闲置,造成磁盘空间的浪费。由于分区表容量的限制,FAT16分区创建的越大,磁盘上每个簇的容量也越大,从而造成的浪费也越大。
磁盘上最小可寻址存储单元称为扇区,通常每个扇区为512个字节(或字符)。由于多数文件比扇区大得多,因此如果对一个文件分配最小的存储空间,将使存储器能存储更多数据,这个最小存储空间即称为簇。根据存储设备(磁盘、闪卡和硬盘)的容量,簇的大小可以不同以使存储空间得到最有效的应用。在早期的360KB磁盘上,簇大小为2个扇区(1,024字节);第一批的10MB硬盘的簇大小增加到8个扇区(4,096字节);小型闪存设备上的典型簇大小是8KB或16KB。2GB以上的硬盘驱动器有32KB的簇。表2列出在给定簇大小和FAT类型的最大分区。
为什么采用簇呢?通常,存储设备上的空间分配是随机的。在一个新存储设备上,文件连续存储,并知道开始和结束扇区和长度,在读取时可以根据这些信息重新得到所存储的文件。但是,过一段时间后,有些文件将会被擦掉,同时可能有些文件增大,这时不能保证同一个文件存储在连续的一系列扇区里。因此,需要一种方法来辨别哪个扇区被分配到某些文件,以及还有哪些扇区可用。这时可以采用一种表结构来实现这种功能,使每个扇区对应一个表记录。然而,由于大多数文件存储在多个扇区,一个记录对应一个扇区的作法将造成一些浪费。因此,采用每个记录代表一个固定数量扇区将更有意义,这个固定扇区被称为簇。
如果给一个文件(簇)分配的最小存储空间大小取决于保存该文件的介质类型,我们必须有一种方法来标明某个簇是否可用或者已分配给一个文件。如果已将一个簇分配给一个文件,我们必须知道这个簇分配给文件的哪部分了,这就是通过一个链接列表来实现,即文件分配表(FAT)。FAT仅仅是一个包含N个整数的列表,N是存储设备上最大的簇数。表中每个记录的位数称为FAT大小,是12、16或32三个数之一。早期的存储设备使用12位(1.5字节)FAT以减少浪费,12位可以提供4,096个簇。假定一个簇具有两个扇区(1,024字节),则代表存储设备将近有4.2MB存储容量。更大的簇就能实现更大的存储空间,但是在存储较小文件时,由于簇没有完全装满而将造成存储空间的浪费。
操作系统根据表现整个磁盘空间所需要的簇数量来确定使用多大的FAT。如果磁盘要求的簇少于4,096个,则可以使用12位FAT;如果小于65,536但大于4,096个簇,就使用16位FAT;否则,必须采用32位FAT。在存储设备的第一个扇区内以数据列表的形式定义了簇的大小,该数据列表被称为BIOS参数块。在系统引导期间操作系统可以读该扇区,这样就能设定如何从存储设备中读取文件。
FAT是一种链接列表,链接列表中相关记录之间互相指向对方。在存储设备目录中包含了FAT表名称、该文件大小和分配给该文件的第一个簇的编号。存储该文件的第一个簇所对应的表记录中包含了该文件的第二个簇号码。同样,第二个簇对应的记录里包含有存储该文件的第三个簇编号,以此类推直到该文件的最后一个簇。在新存储设备上存储的第一个文件将保存在连续的簇内,因此第一个簇会指向第二个,第二个指向第三个,如此类推。
实际上,第一个簇(簇0)总是保留用于存储操作系统信息、根目录和两份FAT。系统建立两份FAT,其目的是在当修改其中一个时如果系统发生中断(崩溃),另一份还完整无缺,恢复程序会检查FAT并使用这份FAT来恢复。
那么FAT的重要意义是什么呢?当前的闪存设备使用12位FAT或16位FAT,数码相机和MP3播放器被设计成利用这种表结构进行读写。随着4GB微硬盘逐渐进入实际应用,16位FAT将不能够满足这种硬盘的需求,因为16位FAT只能实现65,536个簇,对于最大的32K字节的簇而言只能提供最大2GB的容量。对于更大容量存储设备有两个解决方案,即将FAT增加到32位或者将驱动器分成多个区。
一个存储设备可以分成多个区(其中每个区看起来像单独的存储设备),每个区有自己的目录和FAT。大多数工程师在自己的PC硬盘上已经体验过多分区,通常仅有一个硬盘的计算机具有“C:”和“D:”盘。
多数便携式设备如数码相机和MP3播放器都没有设计成采用存储器分区,而PDA是真正的计算机,其文件系统程序是按分区来设计的。以数码相机市场为例,存储器必须只有单个分区才能兼容。对用户来说,每个区有自己的逻辑驱动器字母,通常指定为驱动器“C:”、 “D:”和“E:”等。
在一个兼容FAT32的主机里可以无缝使用FAT16存储设备,因为支持FAT32的操作系统也支持FAT16。唯一需要注意的是在对FAT16设备重新格式化的时候,有些兼容FAT32的主机(如一些PDA)在没有特别选择下会默认为FAT32格式。第一次对存储设备格式化时,必须认真观察提示以保证用的是FAT16格式,除非你的相机/PDA/MP3播放器支持FAT32。
在一个只兼容FAT16的主机里使用FAT32设备会有几个可能结果,最普遍的是在显示屏上显示的“CF错误”指示。如果4GB的存储器在只兼容FAT16的主机里格式化,将可能不出现错误提示,但显示的容量将为2G。通常,不同的程序设计工程师会采用不同的方法来处理这个问题,对于这个特例,其结果不是总可预测的。如果4GB设备是用FAT16来格式化,就能在兼容FAT32的主机里对这个设备重新格式化,只要在格式化期间规定了FAT32。这样,用户可以在兼容FAT32的主机里恢复整个4GB容量。
Microsoft MS-DOS 4.0 版及更新版本允许 FDISK 给硬盘划分最大为 4 千兆字节 (GB) 的分区。然而,MS-DOS 文件分配表 (FAT) 文件系统仅支持每分区为 2 GB 大小。基于这一事实,大小在 2 到 4 GB 的硬盘必须划分为多个分区,而且每一个分区都不能超过 2 GB。
注意:Windows 95 OEM Service Release 版本 2 和更新版本支持大小超过 2 GB 的使用 FAT32 文件系统的驱动器。有关 FAT32 文件系统的更多信息,请参见下面的 Microsoft 知识库文章:
文章 ID:154997
标题:FAT32 文件系统说明
FAT 文件系统支持的最大簇数目和簇的最大大小决定了 2-GB 这一分区限制。FAT 文件系统限于 65,525 个簇。簇大小必须为 2 的次方而且小于 65,536 字节,结果是最大簇大小为 32,768 字节 (32K)。将最大簇数 (65,525) 乘以最大簇大小 (32,768) 等于 2 GB。
注意:为用 FDISK 对硬盘进行分区,硬盘驱动器必须受计算机 ROM BIOS API 的支持,后者有 1024 柱面这一限制。
因为每个簇 32K 会浪费宝贵的硬盘空间,所以 FAT 文件系统并非总是最好的硬盘管理方案。Microsoft Windows NT 使用 NT 文件系统 (NTFS),它使用另一不同的文件/簇方案。Microsoft OS/2 版本 1.3 支持 HPFS,后者也使用了一种更保守的分配磁盘资源的方式。
注意:Microsoft Windows NT 也支持 FAT 驱动器。Windows NT 3.51支持最大 4 GB 大小的 FAT 驱动器。MS-DOS 或 Windows 不支持 2 GB 至 4 GB 大小的 FAT 驱动器。换句话说,如果希望从 MS-DOS 或 Windows 95/98 以及 Windows NT 都能访问 FAT 驱动器,那么 FAT 驱动器不能够大于 2 GB。如果只从 Windows NT 上访问 FAT 驱动器,则驱动器大小可以在 2 GB 到 4 GB 之间。
由于相机和MP3播放器在处理多分区上有困难,FAT32是提供它们超过2GB存储容量的唯一途径。所以,有些公司推出新的4GB微驱动器在出厂前将采用FAT32格式化。为实现与更多设备的兼容,2GB的微驱动器将继续使用FAT16,其他容量超过2GB的CF设备必须采用FAT32。有几家公司已经在其相机和MP3播放器中支持FAT32,多数有CF插槽的PDA都支持FAT32。如果你计划要购买一台新的数码相机或MP3播放器,最好能验证它是否支持FAT32,以便将来与最新的CF存储设备兼容。FAT32文件系统占大多数,还有更新的NTFS。