第5章文件系统
1 文件的概念及实现
2 目录的概念及实现
3 文件系统
4 windows文件系统概述
5 NTFS文件系统
文件系统:操作系统中与管理文件有关的软件和数据称为文件系统。它负责为用户建立文件,撤消、读写、修改和复制文件,还负责完成对文件的按名存取和进行存取控制。
文件系统是操作系统中最直接可见的部分,是计算机组织、存取和保存信息的重要手段。讨论文件的组织结构、
存取结构、保护以及文件系统空间管理等问题。
文件:具有一定名称的一组相关数据的集合。
目录是由文件说明索引组成的用于文件检索的特殊文件。
1.文件命名
文件提供了一种将数据保存在外部存储介质上以便于访问的功能。用户就不必关心文件存储方法、物理位置以及访问方式等,而可以接通过文件名来使用文件。
文件属性
文件名称:文件名称是供用户使用的外部标识。
文件内部标识:有的文件系统不但为每个文件规定了一个外部标识,而且规定了一个内部标识。文件内部标识只是一个编号,可以方便管理和查找文件。
文件物理位置:具体标明文件在存储介质上所存放的物理位置。例如,对于按连续区域分配的文件,需要给出起始的物理块号和文件长度;对于按索引方式组织的文件,
需要给出索引表所在物理块号和索引长度。
文件拥有者:操作系统通常为多用户的,不同的用户也拥有各自不同的文件,对这些文件的操作权限也不同。通常文件创建者对自己所建的文件拥有一切权限,而对其他用户所建的文件则拥有有限的权限。
文件权限:通过文件权限,文件拥有者可以为自己的文件赋予各种权限,如可允许:
自己读写和执行,允许同组的用户读写,而只允许其他用户读。
文件类型:可以从不同的角度来对文件进行分类,例如普通文件或是设备文件,可执行文件或不可执行文件,等等。
文件长度:文件长度通常是其数据的长度,也可以是允许的最大长度。长度单位通常是字节,也可以是块。
文件时间:文件时间如创建时间,修改时间等。
按文件的用途进行分类:
系统文件:包括操作系统内核、系统应用程序等。这些通常都是可执行的二进制文件,但有的也可能是文本文件,如配置文件等。这些文件对于系统的正常运行是必不可少的。
库文件:这包括标准的和非标准的子程序库。标准的子程序库通常称为系统库,提供对系统内核的直接访问,而非标准的子程序库则是提供满足特定应用的库。库文件又分为两大类:一类是动态链接库,另一类是静态链接库。
用户文件:用户自己的文件,如用户的源程序、
可执行程序和文档等。
按文件的性质进行分类:
普通文件:主要是系统所规定的普通格式的文件,例如字符流组成的文件件、库函数文件、应用程序文件,等等。
目录文件:包含普通文件与目录的属性信息的特殊文件,这主要是为了更好地管理普通文件与目录。
特殊文件:在UNIX系统中,所有的输入输出设备都被看作是特殊的文件,甚至在使用形式上也和普通文件相同。通过对特殊文件的操作可完成相应设备的操作。
按文件的保护级别进行分类:
只读文件:允许授权用户读,但不能写。
读写文件:允许授权用户读写。
可执行文件:允许授权用户执行,但不能读写。
不保护文件:所有用户都有一切权限。
按文件数据的形式进行分类:
源文件:源代码和数据构成的文件。
目标文件:指的是源程序经过编译程序编译,但尚未链接成可执行代码的目标代码文件。
可执行文件:编译后的目标代码由连接程序连接后形成的可以运行的文件。
文件存取
文件顺序访问是按从前到后的顺序对文件进行读写操作。
这种存取方式最为简单。有的存储设备如磁带只能支持顺序访问。
文件随机访问,也称为直接访问,可以按任意的次序对文件进行读写操作。有的存储设备如磁盘能支持随机访问
(当然也能支持顺序访问)。
文件索引访问,也称按键访问,这种方式对文件中的记录按某个数据项(通常称为键)的值来排列,从而可以根据键值来快速存取。如索引表很长,则可以将索引表再加以索引,以形成具有层次结构的多级索引。如果将记录块的物理位置作为键值,那么可以将随机访问作为索引访问的特例。
文件操作
文件创建:创建文件时,系统会进行各项子操作。首先,系统会为新文件分配所需的外存空间,并且在文件系统的相应目录中,建立一个目录项,该目录项记录了新文件的文件名及其在外存中的地址等文件属性。
文件删除:当已经不再需要某个文件时,便可以把它从文件系统中删除。这时执行的是和创建新文件相反的操作。系统先从目录牛找到要删除的文件项,使之成为空项,
紧接着回收该文件的存储空间,用于下次分配。
文件截断:如果一个文件的内容已经很陈旧而需要进行全部更新时,虽然我们可以先删除文件再建立一个新文件,但是如果文件名及其属性并没有发生变化时,可截断文件。即将原有文件的长度设为o,也可以说是放弃文件的内容。
文件读:通过读指针,将位于外部存储介质上的数据读人到内存缓冲区。
文件写:通过写指针,将内存缓冲区中的数据写入到位于外部存储介质上的文件中。
文件的读写定位:前面介绍的读写操作只是提供了文件的/顷序存取手段,而若对文件的读写进行定位操作,也即改变读写指针的位置,则可以从文件的任意位置开始读写,为文件提供随机存取的能力。
文件打开:在开始使用文件时,旨先必须打开文件。这可以将文件属性信息装入内存,以便以后快速查用。
文件关闭:在完成文件使用后,应该关闭文件。这不但是为了释放内存空间,而且也因为许多系统常常限制可以同时打开的文件数。
文件结构
文件结构是指文件的组织形式。文件结构分为文件的逻辑结构和文件的物理结构
文件的逻辑结构对用户而言是透明的,以方便用户存取。
文件的逻辑结构较简单,一般可分为记录式文件和流式文件两种。前者是指用户把每个文件分为若干记录单位,存取文件是以记录为单位来进行的,而后者则是指文件由字符流组成,文件内部的信息不再划分单位。
文件的物理结构则是指文件在外部存储介质上如何存放,
也叫文件的存储结构。它对文件的存取方法有较大的影响。
文件管理的目的
方便的文件访问和控制:以符号名称作为文件标识,便于用户使用;
并发文件访问和控制:在多道程系统中支持对文件的并发访问和控制;
统一的用户接口:在不同设备上提供同样的接口,方便用户操作和编程;
多种文件访问权限:在多用户系统中的不同用户对同一文件会有不同的访问权限;
优化性能:存储效率、检索性能、读写性能;
差错恢复:能够验证文件的正确性,并具有一定的差错恢复能力;
文件系统的结构和功能元素
1,文件系统的结构应用程序多种文件类型(划分记录,顺序或索引等)
基本I/O管理(I/O缓存和调度,性能优化)
物理I/O(基本文件系统)
外部存储器文件系统
文件系统的功能:
(1)为了合理的存放文件,必需对磁盘等辅助存储器空间(或称文件空间) 进行统一管理。在用户创建新文件时为其分配空闲区,而在用户删除或修改某个文件时,回收和调整存储区。
(2) 为了实现按名存取,需要有一个用户可见的文件逻辑结构
(3) 为了便于存放和加工信息,文件在存储设备上应按一定的顺序存放。
存取方法
(1)顺序存取方式:其中的记录是按序排列的,记录的存取也是按顺序进行的。
(2)直接存取方式:用户对记录的存取是不按顺序的,即用户可以直接指定某一记录进行存取。
(3)按键存取方式:用户对文件内容的访问不是根据记录的编号或地址,而是根据记录的某项内容
(关键字)来进行的。
文件的组织(file organization)
文件组织讨论文件的内部逻辑结构,主要考虑因素是文件存储性能和访问性能。
文件的组织
文件逻辑结构的设计要求:
– 访问性能:便于检索;便于修改
– 存储性能:向物理存储转换方便,节省空间
文件的不同组织层次:域、记录、文件文件的组织是指从用户观点出发讨论文件内部的逻辑结构(logical structure)或用户访问模式;它可以独立于在外存上的物理存储。
文件的逻辑结构文件的逻辑结构指用户概念中的文件,用户可以根据自己对信息的使用要求来组织文件,它独立于物理结构,又称逻辑文件。逻辑文件有两种形式,一种是无结构的流式文件——有序相关信息项的集合,其基本单位是字节或字;另一种是有结构的记录式文件——数据记录的集合,其基本单位是逻辑记录,记录的长度有等长或变长之分。
对记录式文件,通常所有的记录都是描述一个实体集的,有着相同或不同数目的数据项。因此,
流式文件也可视为记录式文件的特例。
文件的物理结构
(1)顺序结构:是把一个在逻辑上连续的记录构成的文件分配到连续的物理块中。这种方式管理简单,存取速度快,但空间利用率低,文件记录的插人或删除操作不方便,只能在文件末尾进行。
(2)链接结构:把文件信息存放在非连续的物理块中,在每个物理块中均设有一个指针指向其后续连续的另一个物理块,从而使得存放同一文件的物理块链接成一个串联队列。链接方式又分为显式链接和隐式链接。显式链接的链接指针在专门的链接表中,隐式链接的指针在存放文件信息的物理块中。链接结构空间利用率高且易于文件扩充,但搜索效率低。
(3)索引结构:也称随机结构,指为每个文件建立一个索引表,其中每一个表项指出文件记录所在的物理块号,表目按逻辑记录编写顺序排列或按记录内某一关键字顺序排列。为检索方便,对于大文件,可以建立多级索引,还可以把文件索引表也作为一个文件,称为索引表文件。该方式可以满足文件动态增长的要求且存取方便。但建立索引表增加了存储空间的开销,对于多级索引,访问时间开销也较大。
文件的连续结构文件的链接结构文件的索引结构文件目录
1 目录内容
2 目录结构类型
3 文件别名的实现目录是由文件说明索引组成的用于文件检索的特殊文件。文件目录的内容主要是文件访问的控制信息(不包括文件内容)。
目录内容
文件名:字符串,通常在不同系统中允许不同的最大长度。可以修改。有些系统允许同一个文件有多个别名(alias);
别名的数目;
文件类型:可有多种不同的划分方法,如:
– 有无结构(记录文件,流式文件)
– 内容(二进制,文本)
– 用途(源代码,目标代码,可执行文件,数据)
– 属性attribute(如系统,隐含等)
– 文件组织(如顺序,索引等)
目录的内容是文件属性信息(properties),其中的一部分是用户可获取的。
1,基本信息
2,地址信息
存放位置:包括哪个设备或文件卷volume,以及各个存储块位置;
文件长度(当前和上限):以字节、字或存储块为单位。可以通过写入或创建、打开、关闭等操作而变化。
3,访问控制信息文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主;
访问权限(控制各用户可使用的访问方式):
如读、写、执行、删除等;
4,使用信息
创建时间
最后一次读访问的时间和用户
最后一次写访问的时间和用户目录结构类型
一级目录:整个目录组织是一个线性结构,系统中的所有文件都建立在一张目录表中。它主要用于单用户操作系统。它具有如下的特点:
– 结构简单;
– 文件多时,目录检索时间长;
– 有命名冲突:如重名(多个文件有相同的文件名) 或别名(一个文件有多个不同的文件名)
二级目录:在根目录下,每个用户对应一个目录(第二级目录);在用户目录下是该用户的文件,而不再有下级目录。适用于多用户系统,各用户可有自己的专用目录。
目录结构讨论目录的组织结构,设计目标是检索效率。
多级目录:或称为树状目录(tree-like)。
在文件数目较多时,便于系统和用户将文件分散管理。适用于较大的文件系统管理。目录级别太多时,会增加路径检索时间。
–目录名:可以修改。
–目录树:中间结点是目录,叶子结点是目录或文件。
–目录的上下级关系:当前目录(current
directory,working directory)、父目录
(parent directory)、子目录(subdirectory)、
根目录(root directory)等;
–路径(path):每个目录或文件,可以由根目录开始依次经由的各级目录名,加上最终的目录名或文件名来表示;
A B C根目录
E P
A B D F E D B G A E
H I J K A B C D E
L M N A
多级目录组织
改进的多级目录:为了提高目录检索速度,可把目录中的文件说明(文件描述符)信息分成两个部分:
–符号文件目录:由文件名和文件内部标识组成的树状结构,按文件名排序;
–基本文件目录(索引节点目录):由其余文件说明信息组成的线性结构,按文件内部标识排序;
基本文件目录
Tu-Lide的目录(ID3)
Products RoomsSoftware Tools
根目录(ID2)
Tu-Lide Tu-Qi
Tu-Lide的目录(ID8)
Univer ClassroomTools
Tools的目录(ID6)
SA-SDUniverID4 ID5ID7 ID9
ID10ID11
符号文件目录的层次结构文件实现
空间分配策略连续空间分配链接空间分配索引空间分配组合空间分配空闲空间管理
1.空闲文件目录
2.空闲块链
3.位示图文件访问
打开open:为文件读写所进行的准备。给出文件路径,获得文件句柄(file handle),或文件描述符(file descriptor)。需将该文件的目录项读入到内存中。
关闭close:释放文件描述符,把该文件在内存缓冲区的内容更新到外存上。
复制文件句柄dup:用于子进程与父进程间的文件共享,复制前后的文件句柄有相同的文件名、文件指针和访问权限;
文件访问是指围绕文件内容读写进行的文件操作。
读read、写write和移动文件读写指针lseek:
系统为每个打开文件维护一个读写指针(read-
write pointer),它是相对于文件开头的偏移地址(offset)。读写指针指向每次文件读写的开始位置,在每次读写完成后,读写指针按照读写的数据量自动后移相应数值。
执行exec:执行一个可执行文件;
修改文件的访问模式(fcntl和ioctl):提供对打开文件的控制,如:文件句柄复制、读写文件句柄标志、读写文件状态标志、文件锁定控制、流(stream)的控制;
文件控制
创建(creat和open):给出文件路径,获得新文件的文件句柄;
删除unlink:对于symbolic link和hard link,删除效果是不同的;
获取文件属性(stat和fstat):stat的参数为文件名,fstat的参数为文件句柄;
修改文件名rename;
修改文件属主chown,修改访问权限chmod:
与相应系统命令类似;
文件别名控制:创建symlink或link,读取链接路径readlink;
文件控制是指围绕文件属性控制进行的文件操作。
文件的访问权限
文件访问类型:
–读read:可读出文件内容;
–写write(修改update或添加append):
可把数据写入文件;
–执行execute:可由系统读出文件内容,
作为代码执行;
–删除delete:可删除文件;
–修改访问权限change protection:修改文件属主或访问权限设置文件访问权限的目的是为了在多个用户间提供有效的文件共享机制;
文件存储空间分配(file allocation)
预分配(preallocation):创建时(这时已知文件长度)一次分配指定的存储空间,如文件复制时的目标文件。
动态分配(dynamic allocation):需要存储空间时才分配(创建时无法确定文件长度),
如写入数据到文件。
1,新创建文件的存储空间(文件长度)分配方法
2,文件存储单位:簇(cluster)
簇的大小
–两个极端:大到能容纳整个文件,小到一个外存存储块;
–簇较大:提高I/O访问性能,减小管理开销;但簇内碎片浪费问题较严重;
–簇较小:簇内的碎片浪费较小,特别是大量小文件时有利;但存在簇编号空间不够的问题(如FAT12、16、32);
文件的存储空间通常由多个分立的簇组成,而每个簇包含若干个连续的扇区(sector)。
簇的分配方法:两种
– 簇大小可变,其上限较大:I/O访问性能较好,文件存储空间的管理困难(类似于动态分区存储管理)
– 簇大小固定,较小:文件存储空间使用灵活,但
I/O访问性能下降,文件管理所需空间开销较大
文件巻容量与簇大小的关系
– 文件卷容量越大,若簇的总数保持不变即簇编号所需位数保持不变,则簇越大。缺点:簇内碎片浪费越多
– 文件卷容量越大,若簇大小不变,则簇总数越多,
相应簇编号所需位数越多。如簇编号长度为12、
16、32二进制位,即构成FAT12、FAT16、
FAT32。
3,文件存储分配数据结构
连续分配(contiguous):只需记录第一个簇的位置,适用于预分配方法。可以通过紧缩
(compact)将外存空闲空间合并成连续的区域。
链式分配(chained):在每个簇中有指向下一个簇的指针。可以通过合并(consolidation)将一个文件的各个簇连续存放,以提高I/O访问性能。
索引分配(indexed):文件的第一个簇中记录了该文件的其他簇的位置。可以每处存放一个簇或连续多个簇(只需在索引中记录连续簇的数目)。
采用怎样的数据结构来记录一个文件的各个部分的位置。
外存空闲空间管理(free space management)方法
位示图(bitmap):每一位表示一个簇,取值0和1分别表示空闲和占用。
空闲空间链接(chained free space):每个空闲簇中有指向下一个空闲簇的指针,所有空闲簇构成一个链表。不需要磁盘分配表,节省空间。每次申请空闲簇只需取出链表开头的空闲簇即可。
空闲空间索引(indexed free space):在一个空闲簇中记录其他几个空闲簇的位置。
外存空闲空间管理的数据结构通常称为磁盘分配表(disk allocation table),分配的基本单位是簇。文件系统可靠性包括检错和差错恢复。空闲空间的管理方法:三种,均适用于上述几种文件存储分配数据结构;
注:可以上述方法结合,应用于不同的场合。如:位示图应用于索引结点表格,链接和索引结合应用于文件区的空闲空间。
文件卷
磁盘分区(partition):通常把一个物理磁盘的存储空间划分为几个相互独立的部分,称为"分区
"。一个分区的参数包括:磁盘参数(如每道扇区数和磁头数),分区的起始和结束柱面等。
文件卷(volume):或称为"逻辑驱动器(logical
drive)"。在同一个文件卷中使用同一份管理数据进行文件分配和外存空闲空间管理,而在不同的文件卷中使用相互独立的管理数据。
– 一个文件不能分散存放在多个文件卷中,其最大长度不超过所在文件卷的容量。
– 通常一个文件卷只能存放在一个物理外设上(并不绝对),如一个磁盘分区或一盘磁带。
格式化(format):在一个文件卷上建立文件系统,即:
–建立并初始化用于进行文件分配和外存空闲空间管理的管理数据。
–通常,进行格式化操作使得一个文件卷上原有的文件都被删除。
扩展文件卷集(extended volume set):
一个文件卷由一个或几个磁盘上的多个磁盘分区依次连接组成。可以容纳长度大于磁盘分区容量的文件。
–实例:Windows NT中的扩展文件卷集。
磁盘交叉存储(disk interleaving):将一个文件卷的存储块依次分散在多个磁盘上。如4个磁盘,则磁盘0上是文件卷块0,4,8,…,磁盘1
上是文件卷块1,5,9,…。
– 优点:提高I/O效率。如果需要访问一个文件的多个存储块,而它们分散在多个磁盘上,则可以并发地向多个磁盘发出请求,并可在此基础上提供文件系统的容错功能。关键:磁盘访问时间大部分由旋转等待时间组成。
– 需要相应硬件设备:如多个硬盘连接在同一个或不同的SCSI接口上,或者两个硬盘连接在一个或不同的IDE接口上(两个硬盘连接在同一个IDE接口上,
不能提高I/O效率)
– 实例:Windows 2000中的条带卷(stripe set),每个文件卷块的大小是64KB。
– 类似例子:在虚拟存储器中建立多个交换区,分散在多个磁盘上
MS DOS的文件系统多级目录,不支持文件别名,无用户访问权限控制
1,磁盘文件卷结构
FAT 1 FAT 2 Root
Directory
Data
(File & Directory)
Boot
Record
Volume Structure in MS DOS
Sector # 0 N1 2N
文件卷(volume)信息:记录在引导记录的扇区中。包括:簇大小,根目录项数目,FAT表大小,磁盘参数(每道扇区数,磁头数),文件卷中的扇区总数,
簇编号长度等
–逻辑扇区号:三元组(柱面号,磁头号,扇区号)->一个文件卷中从0开始对每个扇区编号,优点:屏蔽了物理磁盘参数的不同
–允许同时访问的文件卷数目上限可以由
config.sys文件中的LASTDRIVE= 语句指定
–簇(cluster):由若干个扇区组成。在一个文件卷中从0开始对每个簇编号。
FAT表:两个镜像,互为备份。文件卷中的每个簇均对应一个FAT表项,文件分配采用链式分配方法。
–每个FAT表项所占位数是簇编号的位数,其值是(以FAT12为例):
0:表示该簇空闲
FF7h:物理坏扇区
FF8h~FFFh:表示该簇是文件的最后一个簇
其他值:表示该簇被文件占用,而且表项中的值是文件下一个簇的编号。
– FAT表大小占文件卷容量的比例:
簇编号位数/ ( 8*512*每个簇的扇区数)
目录:是目录项的顺序文件(即大小相同的排序记录序列),不对目录项排序。
– 若目录中包含的文件数目较多,则搜索效率低。
– 每个目录项大小为32字节,其内容包括:文件名
(8+3个字符),属性(包括文件、子目录和文件卷标识),最后一次修改时间和日期,文件长度,第一个簇的编号。
– 在目录项中,若第一个字节为E5h,则表示空目录项;若为05h,则表示文件名的第一个字符为E5h。
– 文件名不区分大小写
823h
800h
...
FAT
850h
823h
..,800hFF8h
850h
...
Dir Entry
File1
...
2,打开文件管理
系统文件表(SFT,System File Table)和任务文件表(JFT,Job File Table):
– SFT包含系统的所有打开文件,可以由几个表项依次连接组成。
– JFT包含该任务(进程)的所有打开文件。
JFT表项内容是到SFT表项的索引。
– SFT的表项数目可由config.sys文件中的
FILES= 来语句指定,默认是8。
Windows2000的文件系统
Windows2000(W2K)支持许多文件系统,
包括运行于Windows95、MS-DOS和OS/2
上的文件分配表(FAT)。W2K的开发者还设计了一个新的文件系统——W2K文件系统
(NTFS),用于满足工作站和服务器中的高级要求。
支持NTFS文件系统之外,也支持FAT文件系统和
CDFS文件系统。(注:CDFS是CD-ROM的文件系统,用于读取CD-ROM,是一种只读的文件系统,很少使用,这里不予介绍。)
NTFS文件系统同DOS下长期使用的FAT文件系统相比,有两个主要的方面优点:一是NTFS许可权限,即本地安全性,二是NTFS支持对单个文件或者文件夹进行压缩。
卷:建立在磁盘分区上。Windows2000常用两种卷:FAT卷和NTFS卷物理磁盘
40G空间 NTFS卷
20G
FAT卷
20G
FAT12、FAT16、FAT32
文件分配表(File Allocation Table,FAT)
每一种fat文件系统都用一个数字来标识磁盘上簇号的位数。
例如FAT12的簇标识为12位,单个分区最多存储
212(4096)个簇,FAT12簇大小在512B与8KB之间。FAT12卷至多有32MB.
用途:作为5.25英寸(1.2M)和3.5英寸(1.44MB)
软盘标准格式。
FAT16文件系统1982年应用于MS-DOS中,16位簇标识能够定位65536个簇
FAT16簇大小为512B到64KB,卷大小为
4GB,Windows限制在2GB
文件分配表包含一个卷上所有簇的条目,而且有一个备份其他文件目录根目录文件分配表2
文件分配表1
引导区
文件分配表的条目还定义了文件分配链来连接文件和目录。
链上的链接是文件存储的下一个族的标号。
FAT32,16位簇标识扩充为32位,FAT32
簇大小可达32KB,理论上有8TB的寻址能力。Windows2000/xp则限制它的卷大小为
32GB
NTFS的重要特征:
可恢复性:之所以需要建立新W2K文件系统,就是为了具备从系统崩溃和磁盘故障中恢复数据的能力。当发生这类故障时,NTFS能够重建文件卷,它是通过为文件系统的变化使用一个事务处理模型末实现这一点的。文件系统的每个重要的变化都被看作是一个原子动作,或者完全执行,或者根本就不执行。当发生故障时,每个正在处理的事务随后或者取消,或者完成。
安全性:NTFS使用W2K对象模型来实施安全机制。一个打开的文件作为一个文件对象来实现,并且有一个定义它的安全属性的安全描述符。安全描述符作为文件的一部分存储在磁盘上。
大磁盘和大文件:NTFS比包括FAT在内的其他大多数文件系统能够更有效地支持非常大的磁盘和非常大的文件。
多数据流:文件的实际内容被当作字节流处理。
在NTFS中可以为一个文件定义多个数据流,与文件相关的每个信息单元,包括文件名、文件拥有者、文件时间标记、文件内容等都当做NTFS对象属性。
Windows资源管理器也使用多数据流。右击NTFS
文件并选择属性,可以为文件关联标题、主题、
作者、关键词等,它们作为信息流加入文件中去
通用索引功能:NTFS中,每个文件都有一组属性与之相关联。文件管理系统中文件描述的集合组织成一个关系数据库,因而文件可以建立关于任何属性的索引。
NTFS文件系统能够在一个磁盘卷中索引文件属性。能够有效定位匹配某种条件的文件。
NTFS卷和文件结构?
NTFS使用下列磁盘存储概念:
扇区:磁盘中最小的物理存储单元。一个扇区中能存储的数据量字节数总是2的幂,并且通常为512个字节。
簇:作为磁盘空间分配和回收的基本单位。一个或多个连续的扇区(在同一磁道上一个接一个)。一个簇中扇区的数目也为2的幂。
卷:磁盘上的逻辑分区。由一个或多个簇组成,供文件系统分配空间时使用。
一个卷包括文件系统信息、一组文件以及卷中剩余的可以分配给文件的未分配空间。
NTFS并不识别扇区,簇是最基本的分配单位。例如,假设每个扇区为512个字节,并且系统为每个簇配置两个扇区(1簇=IKB)。如果一个用户创建了一个1600个字节的文件,则给该文件分配2
簇。如果用户后来又把文件修改成3200个字节,
则再分配另外2簇。分配给一个文件的簇不需要一定是连续的,即允许一个文件在磁盘上被分成几段。
使用簇进行分配使得NTFS不依赖于物理扇区的大小。这使得NTFS能够很容易地支持扇区大小不是512个字节的非标准磁盘,并且能够通过使用比较大的簇有效地支持非常大的磁盘和非常大的文件
NTFS使用逻辑簇号(LCN)和虚拟簇号(VCN)来进行簇的定位。
逻辑簇号:对整个卷从头到尾进行简单编号。簇大小*逻辑簇号就得到卷上的物理字节偏移量,从而得到物理磁盘地址。
虚拟簇号:对属于特定文件的簇从头到尾进行编号,以便引用文件中的数据。
VCN可以映射成为LCN
NTFS卷布局
1 分区引导扇区
2 主文件表
3 系统文件
4 文件区域分区引导扇区(partitionbootsector)(尽管它被称作一个扇区,但它可能有16个扇区那么长),引导扇区包含卷的布局信息、文件系统的结构以及引导启动信息和代码。
主文件表MFT,主文件表包含关于在这个
NTFS卷中所有文件和文件夹(目录)的信息以及关于可用的未分配空间的信息。事实上,MFT是这个NTFS卷中所有内容的列表,被组织成关系据库结构中的许多行
下面简要描述一下MFT的元数据文件。
MFT中的第1个记录就是MFT自身。为了确保文件系统结构的可靠性,系统专门为它准备了一个镜像文件($MftMirr),也就是MFT中的第2个记录。
第3个记录是日志文件(SLogFile)。该文件是NTFS
为实现可恢复性和安全性而设计的。当系统运行时,NTFS就会在日志文件中记录所有影响NTFS卷结构的操作,包括文件的创建和改变目录结构的命令,例如复制,从而在系统失败时能够恢复NTFS卷。
第4个记录是卷文件($Volume),它包含了卷名、被格式化的卷的NTFS版本和一个标明该磁盘是否损坏的标志位(NT-FS系统以此决定是否需要调用Chkdsk程序来进行修复)。
第5个记录是属性定义表($AttrDef),其中存放了卷所支持的所有文件属性,并指出它们是否可以被索引和恢复等。
第6个记录是根目录(\),,其中保存了存放于该卷根目录下所有文件和目录的索引。在访问了一个文件后,NTFS就保留该文件的MFT引用,第二次就能够直接进行对该文件的访问。
第7个记录是位图文件($Bitmap)。NTFS卷的分配状态都存放在位图文件中,其中每一位代表卷中的一簇,标识该簇是空闲的还是已被分配了的。
第8个记录是引导文件($Boot),它是另一个重要的系统文件,存放着Windows 2000/XP的引导程序代码。该文件必须位于特定的磁盘位置才能够正确地引导系统。该文件是在Format程序运行时创建的,可以通过普通的文件I/O操作来修改。
第9个记录是坏簇文件($BadClus),它记录了磁盘上该卷中所有的损坏的簇号,防止系统对其进行分配使用。
第10个记录是安全文件($Secure),它存储了整个卷的安全性描述符数据库。NTFS文件和目录都有各自的安全描述符第11个记录为大写文件($UpCaseUp,
uppercasefile),该文件包含一个大小写字符转换表。
第12个记录是扩展元数据目录
($Extendedmetadatadirectory)。
从第13到第16个记录为预留,尚未使用。 ·
系统文件,长度大约1M
包含:
1 关于MFT前三行的镜像,保证一个扇区失败仍可访问MFT
2 日志文件:事务处理,用于NTFS的恢复
3 簇的位映像:说明哪一簇正被使用
4 属性定义:每个文件包含一组属性