3.1 文件系统总论
从本章开始,我们将使用几个章节详细介绍各种文件系统的工作原理及结构布局。由于FAT文件系统是普及面非常广泛的Windows操作系统所使用的一种文件系统,所以我们由FAT 文件系统开始。又因为FAT32是日前使用最多的FAT类型文件系统,因此,我们主要以FAT32 为对象进行讲解。在正式介绍特定的义件系统前,我们有必要先对文件系统有个大致的了解。
到底什么是文件系统?文件系统就是对数据进行存储与管理的方式。文件系统是为了长久地存储和访问数据而为用户提供的一种基于文件和目录的存储机制。我们都知道,在使用硬盘存储数据前,首先要进行分区,然后对分区进行格式化。格式化的过程就是在分区内建立一定的文件系统的过程。一个文件系统由系统结构和按一定规则存放的用户数据组成,以使计算机可以找到并访问它们。大多数情况下,丈件系统并不依赖于特定的计算机。
文件系统的种类繁多,每种文件系统都有自己特定的结构和管理数据的方式,但所有的文件系统也都有- 定的共性。在此,我们简单介绍一下文件系统中的一些基本概念和共性。
1 数据单元
建立一个文件系统后,就可以进行数据的存储了。数据在写入磁盘或从磁盘读取时每次操作的数据量称为数据单元,它的大小在建立文件系统时确定。数据单元在不同的文件系统中有不同的称呼方式,例如FAT和NTFS 文件系统中的“簇”,ExtX中的“块(Block) ”等,
其实都是一种数据单元。一个数据单元由若干个连续的扇区组成,大小总是2的整数次幂个扇区。存储数据时,系统以数据单元为单位为其分配存储空间,也就是说,总是为其分配整
数个数据单元大小的空间。
2 坏数据单元
坏数据单元也就是包含缺陷扇区的数据单元。许多文件系统可将一个数据单元标记为坏单元,这对于那些没有能力处理错误的老硬盘比较有用。当一个数据单元中出现缺陷扇区时,即使缺陷扇区的数最只有一个,操作系统也会将整个数据单元标记为已损坏,不再分配给文
件使用。现在的硬盘可以自己检测到坏扇区的存在并用备用扇区对其进行替换,所以文件系
统的这一功能已很少使用。
利用文件系统的坏单元标记功能可以很容易地隐藏数据。许多检查工具并不对文件系统报告的坏单元进行验证以确认其是否真的存存缺陷,因此用户可以手工将一些数据单元添加到坏单元列表中,然后将数据隐藏进这些单元内。但许多数据提取工具支持对坏单元列表进行检测以确认其中是否存隐藏的数据。
3. 逻辑文件系统地址
?每个扇区都会有一个LBA地址,也就是物理地址。?每个物理卷内的扇区又有一个物理卷地址。?在逻辑卷内部的扇区会有一个逻辑卷地址。建立了文件系统后,文件系统既使用逻辑卷地址,也使用一种“逻辑文件系统地址”。文件系统存储数据时是以数据单元为存储单位,每个单位被分配一个逻辑文件系统地址。
4 逻辑文件地址
对于每个文件来讲,将它按所在的文件系统中数据单元的大小为单位进行分割,分割后
的每个部分由0 开始进行编号,这个编号就是其对应的数据单元的逻辑文件地址,一个文件
前后相邻的两个数据单元在物理上的存储地址可能是不连续的,但它的逻辑文件地址却一定
是连续的。
5 分配策略
不同的操作系统在为文件分配存储单元时可能会使用不同的分配方法。通常操作系统会
为其分配连续的存储空问,但并不总是能够实现。 白提豇趣出幽螳删剑幽摊甑麟础一捌匕 4触划到
lEil 提示:当文件无法被分配到连续的存储单元时被称为“片段化”
为文件分配存储单元时的方法或算法,我们称之为“分配策略” 为三种:第一可用分配策略、下一可用分配策略和最佳分配策略。
(i )笫一可用分配策略,即当为一个文件分配了一个存储单元后还需要继续为其分配时, 操作系统会重新从文件
系统的起始处搜索可使用的空间。这种分配方式很容易使文件片段 化,因为文件并不是被作为整体一次性分配连续存储空问的。
举例来讲,假如有一个文件需要 4个存储单元,文件系统内的 1、2、3、5、10号存储 单元已经有数据,4、6、
7、8、9号存储单元空闲,按第一分配策略为这个文件的
4个部分
分配空问时,分配步骤如下。
①第一部分分配到 4号存储单元,如罔1所示。
4:
图1文件第一部分存储在 4号存储单元
②为文件的第一部分分配好存储位置后,又从
1号存储单元)始向后寻找空位置,找到
6号后分配给文件的第二部分,如例
2所示。
为文件的第二部分分配好存储位置后,又从
1号存储单元开始向后寻找空位置,恰 好这时2号存储单元的文件内容被删除了,就把 2号位置分配给第三部分,如图
3所示。
图3文件第三部分存储在2号存储单元
④为文件的第三部分分配刚好存储位置后, 又从1号存储单元开始向后寻找孔位置,
找
到7号存储单元后分配给第四部分,如图 4所示。
图4文件第四部分存储在 7号单元
所以这个文件的4个部分存储的位置就是 4—6 — 2 — 7。 因此这种分配策略不只容易使文件片段化,而且也使被删除数据的恢复可能性大大降低。
(2)下一可用分配策略,即为文件分配了一个存储单元后并不再回到卷起始重新寻找 可用空间,而是直接向
后进行搜索。 对于前面的例子,使用下一可用策略进行分配的结果会 是4— 6—7— 8,如图5所示。
,即产生文件碎片。 ,分配策略通常可以分
存储单元号_1
文件分配
存惱单元号1234 5 67S9Id 文件分配1234
提示:这种分配策略有助于数据的恢复,因为2号位空出后,除非在向后的搜索过
程中没找到足够的分配空间,否则不会很快被覆盖掉。
(3最佳分配策略,即在文件分配空间时,会尽可能找到足够的连续空间以避免其片段化。
但这种分配策略需要事先知道文件所需要空间的大小,而且如果以后文件增大需要增加分配
单元时,新分配的单元有可能处于其他位置而使该文件片段化。对于前面的例子,使用最佳
匹配策略分配时,结果则是6-7-8 —9,如图6所示。
存福单養号123 4 5 £7S g10文件分配1234
提示:在使用最佳分配策略进行可用空间搜索时,如果没有找到可以存放下整个文
件的连续空间,就会使用第一可用或下一可用策略进行分配。
每种操作系统会选择对某文件系统使用何种分配策略,有的文件系统也会指定要求使用
哪种分配策略,但一般不会强制执行。
6文件更新策略
对数据可恢复性进行分析时,除需要考虑它的分配策略外,还需要考虑到文件更新方式
的问题:
?有的程序在对文件更新时,直接打开原文件,更新后,直接用新文件覆盖原文件进行
保存。
?有的程序则是先产生一个原文件的副本,对副本进行更新,然后将副本以原文件名保
存在新的位置同时删除原文件.
(3提示:如果文件的更新方式是在原文件上直接修改并覆盖旧文件,当进行了错误修
改并保存后,原数据将无法恢复。如果文件的更新方式使对副本进行修改并保存为新的文件,然后删除旧文件,当进行了错误修改并保存后,可以试图寻找已被删除的旧文件。
7松弛空间
松弛空问分为两种,一种是数据的结尾与为其分配的空间结束处的未被使用的部分,还
有一种是位于分区结尾的卷松弛空间:
?前面提到,系统在为数据分配存储空间时总是为其分配整数个数据单元大小的空间,但文件的大小未必恰好是整数个数据单元,这样就会在文件结尾与为其分配的存储空间结尾
间产生部分未使用的空闲空间,这种空闲空间称为"松弛空间”。
?卷松弛空间位于卷的结尾。--个文件系统的扇区数也可能并不恰好是数据单元的整数倍,因此在卷的结尾也可能会有未被分配数据单元号的空间存在,这部分空间被称为卷松弛
空间。
松弛空间中有可能存在以前被删除的数据,这取决于操作系统存储数据时的操作方式。
例如,一个文件的人小为100个字节,一个文件系统的数据单元大小为4096个字节,也就
是8个扇区,将该文件存储进这个文件系统时,会为其分配8个扇区的存储空间,但是它只
使用了第一个扇区的前100个字节,第一个扇区的后412个字节和后7个扇区都为松弛空间。如图7所示。
写入磁盘时会一次写入一个扇区的数据。
较老的操作系统,象DOS 或早期的Windows 操作系
统通常会直接将内存中的数据填充写入磁盘,现在的操作系统则通常是将第一个扇区的后
412个字节用0进行填充。对于后7个扇区,有的操作系统可能会对其进行清零操作,但走 部分操作系统不对其进行任何
操作,这就有可能在这部分扇区中存在着以前被删除的数据。
8 ?压缩和稀疏文件
很多文件系统允许对文件进行压缩存储以减少它所占用的数据单元。 对于文件,可以存
在三种级别的压缩:
?最高级别的压缩式在文件内部发生的,例如 IPEG 格式的文件它将图像信息进行压缩
后保存进文件中,不过文件头是不被压缩的。
?次级别的压缩是使用外部程序对整个文件进行压缩后保存成一个新的文件, 当需要使
用这个文件时,就必须先对其进行压缩。
?晟后一种,也是最低级别的压缩, 是由操作系统进行的压缩处理。
操作系统在存储文
件时,不为连续为 0的部分分配存储空间,以这种方式处理过的文件称为"稀疏文件”
。 9.加密文件
为了数据内容的安全与隐私性, 文件可以被加密以阻止未被授权的访问。
对文件进行加
密可以通过三种方式:
?使用第三方加密程序。读取加密前的文件并对文件内容进行加密后建立一个新的加密 文件。 ?也可以通过操作系统对文件进行加密。 这种加密方式只是对文件内容进行加密,
通常
文件名、时间值等信息不会被加密。
?还有一种加密方式是对整个卷进行加密。 对卷进行加密后,卷中所有的数据都处于加 密状态,而不只是文件内容被加密。 使用对整个卷进行加密的方式时, 不能对包含操作系统 的卷进行加密。
10元数据
任何文件或目录,都会有一个名字,我们将其统称为“文件名”
。除文件名外,文件或
目录还会有其他一些描述信息,如大小、时间信息、是否加密或压缩、存储位置信息等,我 们将这些描述信息统称为文件或口录的原数据。
3.2 FAT
文件系统概述
,文件分配表)文件系统是 Win dows 操作系统所使用
FAT12、FAT16和 FAT32三个阶段。
I 提示:FAT 文件系统的名字由来就是因为它使用文件分配表描述文件系统内存
储单元的分配状态及文件内容的前后链接关系。另外,截止到目前,
Microsoft 又推出了扩
展FAT 文件系统exFAT ,它在原有FAT 文件系统的基础上进行了改进,支持超大容量存储。 由于其刚刚推出,对其结构尚未完全清楚,故在本书中将暂不涉及。
因为对磁盘的操作以扇区为单位,所以,虽然文件大小只有
100个字节,但
FAT(File Allocati on Table
的一种文件系统,它的发展过程经历了
图7松弛空间
提示:
? FAT 文件系统用“簇”作为数据单元。一个“簇”由一组连续的扇区组成,簇所含的 扇区数必须是2的整数次幕,如1,2,4,8,16,
32或64。簇的最大值为 64个扇区,即
32KB 所有的簇从2开始进行编号,每个簇都有一个自己的地址编号。
用户文件和目录都存
储在簇中。
使用簇做为它的存储单元。不同的是,在 FAT 文件系统内,簇号由 2开始:在NTFS 文件系
统内,簇号由0开始。
? FAT 文件系统的数据结构类型比较少, 其中有两种重要的结构一一文件分配表和目录
项:
?文件和文件夹内容存储在簇中,如果一个文件或文件夹需要多于一个簇的空问,则 用FAT 表来描述如何找到另外
的簇。
FAT 结构用于指出文件的下一个簇,
同时也说明了
簇的分配状态。FAT12、FAT16和FAT32这三种文件系统之间的主要区别在于 FAT 项的
大小小同。
? FAT 文件系统的每个文件和文件夹都被分配一个目录项, 小、文件内容起始地址以及其他一些元数据。
?在FAT 文件系统中,文件系统的数据记录在
“引导扇区”中。引导扇区位于整个文件
系统的0号扇区,是文件系统隐藏区域(也称为保留区)的一部分,我们称其为DBR[DOS3oot Recordel-DOS 引导记录)扇区,DBR 中记录着文件系统在磁盘上的起始位置、大小、 FAT 表 个数及大小等相关信息。
?在FAT 文件系统中,同时使用“扇区地址”和“簇地址”两种地址管理方式。这是因 为只有存储用户数据的数据区使用簇进行管理
(FAT12和FAT16的根目录除外),所有的簇都
位于数据区内。其他文件系统管理数据区域是不以簇进行管理的, 这部分区域使用扇区地址
进行管理。文件系统的起始扇区为
0号扇区。
3.3 FAT 文件系统整体布局
总体来讲,一个FAT 文件系统可以分为三个部分:保留区、
FAT 区和数据区(如图 8所
示)。这三个区域在建立文件系统(格式化)时即被创建,且在文件系统存续期间不可被更 改。
保
留区
I - FAT1 1 PAT2 1
<—阿T 区f
?保留区中包含一个重要的数据结构一一系统引导扇区
(DBR ),弓I 导扇区中存储着有关
文件系统的重要信息。FAT12和FAT16的保留区通常为1个扇区,也就是引导扇区本身。FAT32 的保留区则要多些,并且除 0号扇区的引导扇区外,还为其保留了一个引导扇区备份。
? FAT 区由两个大小相等、内容相同的 FAT 表组成,我们将其称为 FAT1和FAT2 FAT1
紧跟在保留区域之后,
FAT2紧跟在FAT1之后。FAT 表用以描述数据区中存储单元的分配状
态及为文件或目录内容分配的存储单元的前后连接关系。 FAT2后面即为数据区的起始位置,
数据区被划分成一个个的簇,用于存储用户数据。
@妙注意:FAT12/16的根目录虽然也属于数据区,但并不由簇进行管理,也就是说,
盘,随着软盘的消逝,FAT12文件系统也几乎难以见到了。 随着数据存储容量的剧增, FATI6 也正在逐渐淡出人们的视线。因此,我们以 FAT32为主要对象进行讲解。然后再对
FAT12
和FAT16进行简单的介绍。
不只FAT 文件系统使用簇做为数据单元,
Windows 系列的NTFS 文件系统也
目录项巾记录着文件名、
大
FAT 文件系统对多字节数据使用
Little-e ndian
顺序进行存储。
FAT12/16的根目录是没有簇号的,它们的2号簇由根目录之后开始。
FAT32文件系统前部有一个由若干个个扇区组成的保留区,保尉区的大小会记录主引导
扇区(文件系统的0{扇区,也称为DBR扇区)中,比较常见的为32、34、或38个扇区。
3.4.1引导扇区
引导扇区是FAT32文件系统的笫一个扇区,也称为DBR扇区。它包含文件系统的下列基本信息。
(1 )每扇区字节数。
(2)每簇扇区数。
(3)保留扇区数。
(4)FAT表个数。
(5)文件系统大小(扇区数)。
(6 )每FAT表大小(扇区数)。
(7)根目录起始簇号。
(8)其他附加信息。
★引导扇区中的某些参数是至关重要的,例如文件系统的大小(扇区数)、保留扇区数每簇扇区数、FAT表的个数及每个FAT表的大小(扇区数)、根目录的起始簇号等。
它们的重要性表现在:
?通过每个FAT表的大小扇区数乘以FAT表的个数可以得到FAT区域的大小。
?通过保留扇区数和FAT区域的大小就可以得知数据区的起始位置,也就得到了文件系统第一簇的位置。
?由根目录的簇号和第一簇的位置就可以得到根目录的位置。
★除了布局结构信息外,引导扇区中还有一些非实质性数据。非实质性数据是指那些文件系统在存取数据过程中并不需要的数据,这些数据只是提供一些附加的信息而己。例如引导扇区巾有一个8字符的“OEM版本号”,这个版本号只是用来说明是什么工具创建了这个文件系统。例如,Windows 95将此处设置为“ MSWIN4.0 ”,Windows 98则设置
为“ MSWIN4.1 ”,Windows XP/2000 设置为“ MSDOS5.0 ”,Linux 的mdfs.msdos 则将其设置为“ mkdosfs”,一些USB则会取任意值,而有的数码相机中的闪存卡则被设置为相机型号。使川任何十六进制编辑工具都可以改变这个版本值,而且并不影响文件系
统的使用。不过这个版本号可以帮助我们识别一张软盘是被哪种机器格式化的,有些版本的系统需要根据此值进行相应的设置。
★FAT文件系统有一个4字节的卷序号,这个序号是遵循微软定义,将文件系统建立
的时问按一定方式组合而成的。Windows的不同版本所用的操作方式也不同,
Windows 98是将日期和时间按一定顺序相加,而Windows XP则使用不同的计算方
法。Windows还利用这个值对移动媒体进行识别。
★引导扇区中还有一个8个字符的类型标志,内容为“FAT12”、“FAT16”、“FAT32”
或“ FAT”大多数工具在创建文件系统时会对此处进行相应的设置,不过此处的标志是否正确并不影响文件系统的正常运行。因此我们应该计算文件系统的某些特征数据来确定它的实际类型,而不只是依据此处的标志值。
★ 最后,引导扇区中还有一个11个字符的卷标,这个卷标由用户在创建文件系统的过程中指定。同时,这个卷标也保存在该卷的根目录中,不过Windows XP则只是将
此卷标存放在根目录中,而并不将其写入引导扇区。
1?引导扇区数据结构
FAT32引导扇区的数据结构如表 3.1所示。
表3.1 FAT32引导扇区的结构