2008年(8065)
分类: 服务器与存储
2008-11-23 16:12:16
由于在360KB磁盘上有720个扇区,因此,表要做得足够大以能标识每个扇区,并预留一些空间以备未来采用更大存储空间的磁盘。表中的每个记录只用一个字节,这样只能有256个可能值,不能满足这么多扇区的需要。如果采用两个字节则最多可以有65,536个记录,但这样将浪费磁盘空间。因此,综合这两种情况,决定采用12位作为表记录的长度来跟踪磁盘上扇区的利用情况。采用12位长度可以有4,096个可能值,如果每个表记录对应一个512字节扇区,那么这个FAT表可以处理高达2MB存储容量的存储设备。
但要从这么长的表中得到需要的信息将花太长时间,因此,人们引入了簇(cluster)的概念。这使设备的最小存储单元从单个扇区增加到固定数量扇区,这些固定数量扇区称为簇。对于180KB磁盘,簇的大小为两个扇区(1,024字节)。因此,如果要保存一个500字节的文件,将占用磁盘上1,024个字节。这看上去会浪费,但实际上簇的概念在存储大文件时效果很好,而实际上多数系统和用户文件都是较大的。表1列出FAT所能代表簇的最大数字。
簇的概念
磁盘上最小可寻址存储单元称为扇区,通常每个扇区为512个字节(或字符)。由于多数文件比扇区大得多,因此如果对一个文件分配最小的存储空间,将使存储器能存储更多数据,这个最小存储空间即称为簇。根据存储设备(磁盘、闪卡和)的容量,簇的大小可以不同以使存储空间得到最有效的应用。在早期的360KB磁盘上,簇大小为2个扇区(1,024字节);第一批的10MB硬盘的簇大小增加到8个扇区(4,096字节);现在的小型闪存设备上的典型簇大小是8KB或16KB。2GB以上的硬盘驱动器有32KB的簇。表2列出在给定簇大小和FAT类型的最大分区。
FAT位数 |
簇数量 |
12 |
4096 |
16 |
65536 |
32 |
4294967296 |
为什么采用簇呢?通常,存储设备上的空间分配是随机的。在一个新存储设备上,文件连续存储,并知道开始和结束扇区和长度,在读取时可以根据这些信息重新得到所存储的文件。但是,过一段时间后,有些文件将会被擦掉,同时可能有些文件增大,这时不能保证同一个文件存储在连续的一系列扇区里。因此,需要一种方法来辨别哪个扇区被分配到某些文件,以及还有哪些扇区可用。这时可以采用一种表结构来实现这种功能,使每个扇区对应一个表记录。然而,由于大多数文件存储在多个扇区,一个记录对应一个扇区的作法将造成一些浪费。因此,采用每个
录代表一个固定数量扇区将更有意义,这个固定扇区被称为簇。
给文件分配扇区
如果给一个文件(簇)分配的最小存储空间大小取决于保存该文件的介质类型,我们必须有一种方法来标明某个簇是否可用或者已分配给一个文件。如果已将一个簇分配给一个文件,我们必须知道这个簇分配给文件的哪部分了,这就是通过一个链接列表来实现,即文件分配表(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的作用
那么FAT的重要意义是什么呢?当前的闪存设备使用12位FAT或16位FAT,相机和MP3播放器被设计成利用这种表结构进行读写。随着4GB微硬盘逐渐进入实际应用,16位FAT将不能够满足这种硬盘的需求,因为16位FAT只能实现65,536个簇,对于最大的32K字节的簇而言只能提供最大2.14GB的容量。对于更大容量存储设备有两个,即将FAT增加到32位或者将驱动器分成多个区。
总容量 簇大小(KB) |
FAT12(MB) |
FAT16(MB) |
FAT32(TB) |
1 |
4.1 |
67 |
4.398 |
4 |
16.7 |
268 |
17.59 |
8 |
33.4 |
536 |
35.16 |
16 |
66.8 |
1070 |
70.36 |
32 |
134.2 |
2140 |
140.7 |
存储器分区
一个存储设备可以分成多个区(其中每个区看起来像单独的存储设备),每个区有自己的目录和FAT。大多数工程师在自己的PC硬盘上已经体验过多分区,通常仅有一个硬盘的计算机具有“C:”和“D:”盘。
多数便携式设备如和MP3播放器都没有设计成采用存储器分区,而是真正的计算机,其文件系统程序是按分区来设计的。以数码市场为例,存储器必须只有单个分区才能兼容。对用户来说,每个区有自己的逻辑驱动器字母,通常指定为驱动器“C:”、 “D:”和“E:”等。
FAT兼容性
在一个兼容FAT32的主机里可以无缝使用FAT16存储设备,因为支持FAT32的操作系统也支持FAT16。唯一需要注意的是在对FAT16设备重新格式化的时候,有些兼容FAT32的主机(如一些PDA)在没有特别选择下会默认为FAT32格式。第一次对存储设备格式化时,必须认真观察提示以保证用的是FAT16格式,除非你的相机/PDA/MP3播放器支持FAT32。
在一个兼容FAT16的主机里使用FAT32设备会有几个可能结果,最普遍的是在显示屏上显示的“CF错误”指示。如果4GB的存储器在只兼容FAT16的主机里格式化,将可能不出现错误提示,但显示的容量将为2G。通常,不同的程序设计工程师会采用不同的方法来处理这个问题,对于这个特例,其结果不是总可预测的。如果4GB设备是用FAT16来格式化,就能在兼容FAT32的主机里对这个设备重新格式化,只要在格式化期间规定了FAT32。这样,用户可以在兼容FAT32的主机里恢复整个4GB容量。
本文小结
由于相机和MP3播放器在处理多分区上有困难,FAT32是提供它们超过2.14GB存储容量的唯一途径。所以,有些公司推出新的4GB微驱动器在出厂前将采用FAT32格式化。为实现与更多设备的兼容,2GB的微驱动器将继续使用FAT16,其他容量超过2GB的CF设备必须采用FAT32。目前,有几家公司已经在其相机和MP3播放器中支持FAT32,现在多数有CF插槽的PDA都支持FAT32。如果你计划要购买一台新的数码相机或MP3播放器,最好能验证它是否支持FAT32,以便将来与最新的CF存储设备兼容。