发信人: m9412()
整理人: smallhors(1999-07-18 18:47:25), 站内信件
|
整理:Haody 作者:??? Barry Simon/高秀美译
(近来关于FAT32 的讨论不少. 但从中看到部分战友对FAT32的认识不够清楚.
俺特从权威杂志摘来有关文章, 希望大家读后能对FAT32 有个正确的理解)
Windows 95的加强型档案系统
----------------------------------------------------------------------
曾几何时,那看起来似乎永远用不完的2GB上限,现在已经变成另一个
需要克服的难题了, FAT32为FAT档案系统注入新生命
----------------------------------------------------------------------
在1987年时,个人电脑的世界中出现了一个危机。微软公司十年前为其自己
的基本磁碟转换程式 (Standalone Disk Basic
interpreter),也就是後来的 DOS所发展出来的 FAT档案系统已经到达了它的极
限。当时的 FAT档案系统只能支援最多32MB的硬
碟,因此使用者都无法利用新一代高密度硬碟所多出来的容量。而一些独立厂商
便使用它们自己的程式以便存取更高的容量,整
个危机一直到微软推出了DOS 4.0 之後才,暂时地得到了解决。 微软的DOS
4.0 大幅改变了档案系统的架构,使得作业程式
得以处理高达 128MB的容量;而其稍後所做的少许扩充又将整个处理上限提高到
2GB。在当时,这个容量看起来超大,很难想像
有谁会用到它。但是个人电脑的历史如果有立下任何真理的话,那就是任何「看
起来远远超过需求」的事物很快的会变成「完全
赶不上需求」。事实上容量超过 2.5GB的?磁碟现在已经随处可见。曾几何时,
那看起来似乎永远用不完的 2GB上限现在已经变成另一个需要克服的难题了。
现在微软已经针对Windows 95系统,发展出 FAT32,一个新的扩充型FAT档案
系统,并且悄悄的将其附在OEMService Pack 2
中一起发行。FAT32只提供给新装机的PC而无法从现有的Windows95升级上取得,
然而微软指出它将会包含在预计在年底推出的下
一版的Windows 95之中(代号Memphis)。本文中,我们将回顾FAT档案系统的一般
架构,然後再探讨 FAT32里到底增加了那些东西
。为了避免混淆,我们将使用 FAT16来表示先前旧版的16位元档案系统。磁碟区
域 当磁碟机被格式化之後,档案系统需要用到一些特殊的区域
来组织它本身的资料;包括主开机记录 (Master Boot Record)
、磁区分割表(Partition Table)、开机纪录(Boot Record)、档
案配置表(File Allocation Table,这也是FAT的名称由来)以及根目录 (RootDi
rectory)。在低阶的部份,磁片被分割成一块块
512-byte的区域,称为磁区(Sector)。FAT 档案系统将数个磁区合并成一个磁丛
(Cluster)当成配置档案时的基本单位。磁丛里
的磁区数目必须是 2的次方。(你可以用CHKDSK或者SCANDISK指令查看你系统里
的磁丛大小)。微软把这些磁丛称为配置单元(
AllocationUnit),而SCANDISK则会回报给你它们的大小,例如「各个配置单元
共有16,384个位元组」等。通常你可以藉著将磁
碟机的容量除以64K(65,536 个位元组),再将得出来的数据进位到最接近2的次
方数以求得磁丛大小。例如一个1.2GB的磁碟其
磁丛的大小可以由1.2GB(1,258,291.2K)除以65,536得到19.2K再进位到最接近的
2的次方数得知为32K。FAT连结
FAT 是一个记录磁碟机上头档案大小及其所相对映磁丛的资料库。它对每一
个磁丛都有一个相对的记录表(EntryPoint)。最
前面两个记录点包含了 FAT本身的资料。第三个及後续的记录表则被分配为 为
档案所使用的磁碟空间。FAT 记录表会包含一些特殊的值来表示∶
■磁丛为空白的-表示没有任何档案使用到它(在 FAT16时其值 为0000H)■磁
丛包含了一个或数个不可使用的受损磁区(在 FAT16时其值 为FFF7H)
■此磁丛为档案的最後一个磁丛 (在FAT16时其值为FFFFH) 如果磁丛已经被使
用但不是档案的最後一个磁丛,那么FAT记录表会记录其下一个磁丛的位置。
每一个目录,无论是根目录或者是子目录,也都是一个资料库。一个 DOS的
目录针对每一个档案都会有一个主要的记录表 (
Windows95 使用额外的记录表来记录长档名)。跟 FAT不同的是,在 FAT里每一
个记录表只有一个 独的栏位 (field),然而在
目录中的每一个档案的记录表都包含了许多的栏位。其中某些栏位,像是名称(N
ame)、附属档名 (Extension)、档案大小(Size)
、日期(Date)以及时间(Time)等,可以用 DOS中的 DIR指令来显示。但是FAT档案
系统用到的是那些DIR命令无法显示的栏位-档
案所配置到的第一个磁丛号码。 当一个程式对作业系统要求提供某一个档案
的内容时,作业系统会到此档案的目录记录表去寻找它的第一个磁丛号码,然後
再到FAT记录表里去找在此一联结(Chain)里的下一个磁丛。此动作不断的重覆直
到找到档案的最後一个磁丛为止,作业系统可以
精确的计算那些磁丛属於这个档案及其先後顺序。经由此方式,作业系统可以提
供程式所要求之档案的任何部份。这种组织档案的方式称为 FAT联结(FAT Chain
)。
在 FAT档案系统下,档案永远被分配到整数单位的磁丛。在一个每一磁丛大
小为32K的1.2GB磁碟机中,一个只包含「Hello,
World 」这几个字的文字档,在其目录记录表中可能只记载其档案大小为12个位
元组,但是这个档案还是要在磁碟机中占上32K
的空间。在磁丛中没有用到的部份称为耗损 (Slack)。小档案的耗损几乎与整个
磁丛相当;平均来说,一个档案会有一半左右的耗损。
在一个每一磁丛为16K的850MB硬碟中,其中平均档案大小为50K 的话,大概
有 16%配置给档案的硬碟空间实际上浪费掉了而
并未被真正用到。一般硬碟压缩程式,如DriveSpace,增加磁碟机容量的方式之
一是将那些虚损的空间转换出来以供其他档案使用。计算磁区与磁丛
最早用在 DOS 1.0上使用的是12-bit FAT档案系统。(目前12-bitFAT 系统
仍旧在软碟上使用) 。从DOS2.0开始,由於加入
了对硬碟的支援,因此改用 16-bitFAT记录方式。而在1987年时碰到了第一个问
题,这个问题是根源於作业系统低阶呼叫的方式
,因为当时的 DOS作业系统是以16-bit为参数来记录磁区数目以便存取档案,而
16-bit的记录方式最多只能有65,536个不同的数
值,而65,536乘上每个磁区为512bytes,则最多只能定址到32MB。这是作业系统所
能记录的最多磁区数目。而当时的硬碟容量已
经开始超出这个数目,因而从 DOS 4.0开始,改以32-bit方式来记录低阶段磁区
数目。 目前DOS的2GB容量上限严格来讲并不是作业系统的问题,而
是现有应用程式的问题。一颗硬碟当其容量超过 2GB时,其磁丛大小为64K,也就
是65,536 bytes(参考图二)。但是 16-bit的最
大值只到 65,535,64K就变的太大了。微软发现许多应用程式根本就直接假设每
个磁丛的位元数目可以塞进16-bit的数值中。
就算在硬碟容量 2GB时没有这个16-bit的问题发生,作业系统也会拒绝存取
超过 4GB容量以上的硬碟。在 FAT16的系统中,
作业系统本身会在其设置的磁碟参数表中用一个byte储存每个磁丛包含多少磁区
的数目。这个数字必须是 2的次方,而其值不可
以大於 256。因此磁丛的最大可能大小为128个磁区,也就是64K。所以即使没有
2GB的上限,FAT16 也仅能使用在 4GB以下容量
的硬碟之中。在FAT32系统上市之後,FAT记录表及磁区数目现在都变成了32-bit
。这表示你可以存取到最大的硬碟空间为2的32
次方(也就是4,294,967,296)乘上每个磁区 512byte,结果得到2 terabytes (2
,199,023,255,552 bytes)。
减少无谓的耗损 现在由於最大的磁丛数目跟最大磁区数目已经一样,你可能
希望 FAT32可以减低无谓的损耗空间,将磁丛的数目直接对映到
每一个磁区。但是现实总是有妥协的,目前 FAT32的规格将 8GB容量以下硬碟的
磁丛大小定为4K。
会这么做,主要是因为 FAT本身大小的问题。因为作业系统会保持两份 FAT
记录,所以每个磁丛的 FAT记录表会占据8bytes
空间。在一颗 2GB的硬碟中,如果每个磁丛大小都只有512bytes的话,FAT 记录
表将会占去32MB的硬碟空间。然而如果每个磁丛
大小为4K的话,这两份FAT记录表将会只占掉4MB的空间,足足节省了28MB。
但硬碟空间并不是做此妥协的主要原因,还有一个原因是硬
碟效率的问题。VCACHE,这个内建的磁碟快取程式,会尽其可能的将整个 FAT记
录放在 RAM上头以便增加磁碟机的存取速度。很
显然地, 存一个 2MB大小的 FAT记录会比放一个16MB FAT记录来的容易许多。你
可能会担心要存取一个这么大数目的磁丛跟双份
的 FAT记录表会使的VCACHE的效率不佳,但是根据微软的说法,由於FAT32使用了
新的快取方式,因此其整体效能变的更好。FAT32的其他改变
为了容纳增加了以後所可能出现的大量磁丛数目,每一个档案的目录记录表
中的磁丛开始位置必须用到 4 bytes来记录,而
不再像 FAT16只需要 2 bytes。传统上,每个目录记录表皆是一个32 bytes的记
录。在其中间有10个 byte (bytes 12到21),微
软将其保留下来以供其未来扩充之用。现在其中两个byte被用来容纳 FAT32扩充
磁丛数目之後所需的额外空间。
作业系统虽然在硬碟上保存了两份 FAT记录,但是只使用到一份而已。有了
FAT32後,作业系统现在可以使用其中任何一份
。另外一项改变是根目录的改变,以前根目录必须放在特定的位置且只能占用固
定的硬碟容量,现在则可以跟子目录一样随著需
要增减。而根目录的数目在也不再有任何限制。由於每一个长档名要用掉好几个
目录记录,因此这项改变显得格外重要。
可移动式根目录以及可使用任意一份的 FAT记录表这两样东西的结合,使得
FAT32可以提供更平顺且动态的硬碟分割能力,
譬如它可以为了其他作业系统挪出空间来使用。这个新方法比起在 FAT16之下用
独立厂商的公用程式来分割硬碟来得更为安全。
虽然 Windows中并没有包含任何公用程式以便将 FAT32的这项功能发挥出来
,然而 Third-Party厂商已经发表了这类的产品
。它们包含了PowerQuest公司的 Partition Magic 3.0及Quart-erdeck公司的Pa
rtitionIt)结语
FAT32只有在Windows 95才有支援。微软并没有承诺WindowsNT会支援它,而
且还暗示其将来可能也不会这样做。然而该公司
也声称如果 NT5.0不支将AT32的话,他们将会提供一个公用程式以便将 FAT32转
成NTFS (WindowNT 的内建档案系统),所以升级
的人将不会有任何问题。 但是目前为止,如果你想在同一部机器上既跑Wind
ows 95也跑Windows NT的话,你必须先确定这两个作业系统所共用的磁碟
是使用 FAT16而不是 FAT32,否则Windows NT会看不懂 FAT32,而同样的Window
s95也无法读取NTFS。
你也必须知道由於目录表中的档案大小栏位为32bits,因此单一档案的大小
也不能超过4GB。 最後,每次档案系统做大幅度改变时,你将会无法使用一些
低阶的磁碟工具程式,如Norton Utilities等。请准备将它们升级吧。而档案管
理程式及(像是Norton Navigator等)应该可以
继续在FAT32中使用。 如果我们选择采用 FAT32的话,可能要再等上15年我们
才会碰到它的2-terabyte上限,那时才需要再次转移到 FAT64。但是
如果讲到目标导向档案系统的话,我们可以肯定的预测那时我们早就不再使用 F
AT档案系统了,如同在1987年时我们就已经预测
在 FAT达到其 2GB的上限之前将会消失。
---------------------------------------------------------------------- --
曾几何时,那看起来似乎永远用不完的2GB上限, 现在已经变成 另一个需要克服的难题了, FAT32为FAT档案系统注入新生命
---------------------------------------------------------------------- --
在1987年时,个人电脑的世界中出现了一个危机。微软公司十年前为其自己 的基本磁碟转换程式 (Standalone Disk Basic
interpreter),也就是後来的 DOS所发展出来的 FAT档案系统已经到达了它的极 限。当时的 FAT档案系统只能支援最多32MB的硬
碟,因此使用者都无法利用新一代高密度硬碟所多出来的容量。而一些独立厂商 便使用它们自己的程式以便存取更高的容量,整
个危机一直到微软推出了DOS 4.0 之後才,暂时地得到了解决。 微软的DOS 4.0 大幅改变了档案系统的架构,使得作业程式
得以处理高达 128MB的容量;而其稍後所做的少许扩充又将整个处理上限提高到 2GB。在当时,这个容量看起来超大,很难想像
有谁会用到它。但是个人电脑的历史如果有立下任何真理的话,那就是任何「看 起来远远超过需求」的事物很快的会变成「完全
赶不上需求」。事实上容量超过 2.5GB的?磁碟现在已经随处可见。曾几何时, 那看起来似乎永远用不完的 2GB上限现在已经变成另一个需要克服的难题了。
现在微软已经针对Windows 95系统,发展出 FAT32,一个新的扩充型FAT档案 系统,并且悄悄的将其附在OEMService Pack 2
中一起发行。FAT32只提供给新装机的PC而无法从现有的Windows95升级上取得, 然而微软指出它将会包含在预计在年底推出的下
一版的Windows 95之中(代号Memphis)。本文中,我们将回顾FAT档案系统的一般 架构,然後再探讨 FAT32里到底增加了那些东西
。为了避免混淆,我们将使用 FAT16来表示先前旧版的16位元档案系统。磁碟区 域 当磁碟机被格式化之後,档案系统需要用到一些特殊的区域
来组织它本身的资料;包括主开机记录 (Master Boot Record)
、磁区分割表(Partition Table)、开机纪录(Boot Record)、档
案配置表(File Allocation Table,这也是FAT的名称由来)以及根目录 (RootDi rectory)。在低阶的部份,磁片被分割成一块块
512-byte的区域,称为磁区(Sector)。FAT 档案系统将数个磁区合并成一个磁丛 (Cluster)当成配置档案时的基本单位。磁丛里
的磁区数目必须是 2的次方。(你可以用CHKDSK或者SCANDISK指令查看你系统里 的磁丛大小)。微软把这些磁丛称为配置单元(
AllocationUnit),而SCANDISK则会回报给你它们的大小,例如「各个配置单元 共有16,384个位元组」等。通常你可以藉著将磁
碟机的容量除以64K(65,536 个位元组),再将得出来的数据进位到最接近2的次 方数以求得磁丛大小。例如一个1.2GB的磁碟其
磁丛的大小可以由1.2GB(1,258,291.2K)除以65,536得到19.2K再进位到最接近的 2的次方数得知为32K。FAT连结
FAT 是一个记录磁碟机上头档案大小及其所相对映磁丛的资料库。它对每一 个磁丛都有一个相对的记录表(EntryPoint)。最
前面两个记录点包含了 FAT本身的资料。第三个及後续的记录表则被分配为 为 档案所使用的磁碟空间。FAT 记录表会包含一些特殊的值来表示∶
■磁丛为空白的-表示没有任何档案使用到它(在 FAT16时其值 为0000H)■磁 丛包含了一个或数个不可使用的受损磁区(在 FAT16时其值 为FFF7H)
■此磁丛为档案的最後一个磁丛 (在FAT16时其值为FFFFH) 如果磁丛已经被使 用但不是档案的最後一个磁丛,那么FAT记录表会记录其下一个磁丛的位置。
每一个目录,无论是根目录或者是子目录,也都是一个资料库。一个 DOS的 目录针对每一个档案都会有一个主要的记录表 (
Windows95 使用额外的记录表来记录长档名)。跟 FAT不同的是,在 FAT里每一 个记录表只有一个 独的栏位 (field),然而在
目录中的每一个档案的记录表都包含了许多的栏位。其中某些栏位,像是名称(N ame)、附属档名 (Extension)、档案大小(Size)
、日期(Date)以及时间(Time)等,可以用 DOS中的 DIR指令来显示。但是FAT档案 系统用到的是那些DIR命令无法显示的栏位-档
案所配置到的第一个磁丛号码。 当一个程式对作业系统要求提供某一个档案 的内容时,作业系统会到此档案的目录记录表去寻找它的第一个磁丛号码,然後
再到FAT记录表里去找在此一联结(Chain)里的下一个磁丛。此动作不断的重覆直 到找到档案的最後一个磁丛为止,作业系统可以
精确的计算那些磁丛属於这个档案及其先後顺序。经由此方式,作业系统可以提 供程式所要求之档案的任何部份。这种组织档案的方式称为 FAT联结(FAT Chain )。
在 FAT档案系统下,档案永远被分配到整数单位的磁丛。在一个每一磁丛大 小为32K的1.2GB磁碟机中,一个只包含「Hello,
World 」这几个字的文字档,在其目录记录表中可能只记载其档案大小为12个位 元组,但是这个档案还是要在磁碟机中占上32K
的空间。在磁丛中没有用到的部份称为耗损 (Slack)。小档案的耗损几乎与整个 磁丛相当;平均来说,一个档案会有一半左右的耗损。
在一个每一磁丛为16K的850MB硬碟中,其中平均档案大小为50K 的话,大概 有 16%配置给档案的硬碟空间实际上浪费掉了而
并未被真正用到。一般硬碟压缩程式,如DriveSpace,增加磁碟机容量的方式之 一是将那些虚损的空间转换出来以供其他档案使用。计算磁区与磁丛
最早用在 DOS 1.0上使用的是12-bit FAT档案系统。(目前12-bitFAT 系统 仍旧在软碟上使用) 。从DOS2.0开始,由於加入
了对硬碟的支援,因此改用 16-bitFAT记录方式。而在1987年时碰到了第一个问 题,这个问题是根源於作业系统低阶呼叫的方式
,因为当时的 DOS作业系统是以16-bit为参数来记录磁区数目以便存取档案,而 16-bit的记录方式最多只能有65,536个不同的数
值,而65,536乘上每个磁区为512bytes,则最多只能定址到32MB。这是作业系统所 能记录的最多磁区数目。而当时的硬碟容量已
经开始超出这个数目,因而从 DOS 4.0开始,改以32-bit方式来记录低阶段磁区 数目。 目前DOS的2GB容量上限严格来讲并不是作业系统的问题,而
是现有应用程式的问题。一颗硬碟当其容量超过 2GB时,其磁丛大小为64K,也就 是65,536 bytes(参考图二)。但是 16-bit的最
大值只到 65,535,64K就变的太大了。微软发现许多应用程式根本就直接假设每 个磁丛的位元数目可以塞进16-bit的数值中。
就算在硬碟容量 2GB时没有这个16-bit的问题发生,作业系统也会拒绝存取 超过 4GB容量以上的硬碟。在 FAT16的系统中,
作业系统本身会在其设置的磁碟参数表中用一个byte储存每个磁丛包含多少磁区 的数目。这个数字必须是 2的次方,而其值不可
以大於 256。因此磁丛的最大可能大小为128个磁区,也就是64K。所以即使没有 2GB的上限,FAT16 也仅能使用在 4GB以下容量
的硬碟之中。在FAT32系统上市之後,FAT记录表及磁区数目现在都变成了32-bit 。这表示你可以存取到最大的硬碟空间为2的32
次方(也就是4,294,967,296)乘上每个磁区 512byte,结果得到2 terabytes (2 ,199,023,255,552 bytes)。
减少无谓的耗损 现在由於最大的磁丛数目跟最大磁区数目已经一样,你可能 希望 FAT32可以减低无谓的损耗空间,将磁丛的数目直接对映到
每一个磁区。但是现实总是有妥协的,目前 FAT32的规格将 8GB容量以下硬碟的 磁丛大小定为4K。
会这么做,主要是因为 FAT本身大小的问题。因为作业系统会保持两份 FAT 记录,所以每个磁丛的 FAT记录表会占据8bytes
空间。在一颗 2GB的硬碟中,如果每个磁丛大小都只有512bytes的话,FAT 记录 表将会占去32MB的硬碟空间。然而如果每个磁丛
大小为4K的话,这两份FAT记录表将会只占掉4MB的空间,足足节省了28MB。 但硬碟空间并不是做此妥协的主要原因,还有一个原因是硬
碟效率的问题。VCACHE,这个内建的磁碟快取程式,会尽其可能的将整个 FAT记 录放在 RAM上头以便增加磁碟机的存取速度。很
显然地, 存一个 2MB大小的 FAT记录会比放一个16MB FAT记录来的容易许多。你 可能会担心要存取一个这么大数目的磁丛跟双份
的 FAT记录表会使的VCACHE的效率不佳,但是根据微软的说法,由於FAT32使用了 新的快取方式,因此其整体效能变的更好。FAT32的其他改变
为了容纳增加了以後所可能出现的大量磁丛数目,每一个档案的目录记录表 中的磁丛开始位置必须用到 4 bytes来记录,而
不再像 FAT16只需要 2 bytes。传统上,每个目录记录表皆是一个32 bytes的记 录。在其中间有10个 byte (bytes 12到21),微
软将其保留下来以供其未来扩充之用。现在其中两个byte被用来容纳 FAT32扩充 磁丛数目之後所需的额外空间。
作业系统虽然在硬碟上保存了两份 FAT记录,但是只使用到一份而已。有了 FAT32後,作业系统现在可以使用其中任何一份
。另外一项改变是根目录的改变,以前根目录必须放在特定的位置且只能占用固 定的硬碟容量,现在则可以跟子目录一样随著需
要增减。而根目录的数目在也不再有任何限制。由於每一个长档名要用掉好几个 目录记录,因此这项改变显得格外重要。
可移动式根目录以及可使用任意一份的 FAT记录表这两样东西的结合,使得 FAT32可以提供更平顺且动态的硬碟分割能力,
譬如它可以为了其他作业系统挪出空间来使用。这个新方法比起在 FAT16之下用 独立厂商的公用程式来分割硬碟来得更为安全。
虽然 Windows中并没有包含任何公用程式以便将 FAT32的这项功能发挥出来 ,然而 Third-Party厂商已经发表了这类的产品
。它们包含了PowerQuest公司的 Partition Magic 3.0及Quart-erdeck公司的Pa rtitionIt)结语
FAT32只有在Windows 95才有支援。微软并没有承诺WindowsNT会支援它,而 且还暗示其将来可能也不会这样做。然而该公司
也声称如果 NT5.0不支将AT32的话,他们将会提供一个公用程式以便将 FAT32转 成NTFS (WindowNT 的内建档案系统),所以升级
的人将不会有任何问题。 但是目前为止,如果你想在同一部机器上既跑Wind ows 95也跑Windows NT的话,你必须先确定这两个作业系统所共用的磁碟
是使用 FAT16而不是 FAT32,否则Windows NT会看不懂 FAT32,而同样的Window s95也无法读取NTFS。
你也必须知道由於目录表中的档案大小栏位为32bits,因此单一档案的大小 也不能超过4GB。 最後,每次档案系统做大幅度改变时,你将会无法使用一些
低阶的磁碟工具程式,如Norton Utilities等。请准备将它们升级吧。而档案管 理程式及(像是Norton Navigator等)应该可以
继续在FAT32中使用。 如果我们选择采用 FAT32的话,可能要再等上15年我们 才会碰到它的2-terabyte上限,那时才需要再次转移到 FAT64。但是
如果讲到目标导向档案系统的话,我们可以肯定的预测那时我们早就不再使用 F AT档案系统了,如同在1987年时我们就已经预测
在 FAT达到其 2GB的上限之前将会消失。
-- ※ 修改:.m9412 于 Jul 18 18:45:39 修改本文.[FROM: 202.100.71.68] ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.100.71.68]
|
|