档案系统是作业系统用于明确存储设备(常见的是磁碟,也有基于NAND Flash的固态硬碟)或分区上的档案的方法和数据结构。档案系统是软体系统的一部分,它的存在使得套用可以方便的使用抽象命名的数据对象和大小可变的空间。
基本介绍
- 中文名:档案系统结构
- 外文名: File System Structure
- 学科:计算机科学与技术
- 类别:计算机系统
- 简称:FSS
- 主要系统:NTFS、Linux
基本概念
档案系统是作业系统用于明确存储设备(常见的是磁碟,也有基于NAND Flash的固态硬碟)或分区上的档案的方法和数据结构;即在存储设备上组织档案的方法。作业系统中负责管理和存储档案信息的软体机构称为档案管理系统,简称档案系统。档案系统由三部分组成:档案系统的接口,对对象操纵和管理的软体集合,对象及属性。从系统角度来看,档案系统是对档案存储设备的空间进行组织和分配,负责档案存储并对存入的档案进行保护和检索的系统。具体地说,它负责为用户建立档案,存入、读出、修改、转储档案,控制档案的存取,当用户不再使用时撤销档案等。
在计算机中,档案系统(file system)是命名档案及放置档案的逻辑存储和恢复的系统。DOS、Windows、OS/2、Macintosh和UNIX-based作业系统都有档案系统,在此系统中档案被放置在分等级的(树状)结构中的某一处。档案被放置进目录(Windows中的资料夹)或子目录,在树状结构中你希望的位置中。
档案系统指定命名档案的规则。这些规则包括档案名称的字元数最大量,哪种字元可以使用,以及某些系统中档案名称后缀可以有多长。档案系统还包括通过目录结构找到档案的指定路径的格式。
NTFS
NTFS(New Technology File System)是微软开发的具有较好容错性和安全性的档案系统。随着Windows作业系统的发展,基于NT平台的Windows NT4.0己经发展到5.0,其基本档案系统也升级为NTFS 5.0,己经全面取代了Windows 98的FAT32格式档案系统。在核心模式档案系统驱动程式的开发和核心相关程式的开发中,特别是不藉助W32子系统提供的档案操作功能,而需要直接操作档案系统的情况下,往往需要掌握NTFS档案系统的结构。本文对NTFS档案系统的磁碟结构、故障恢复和日誌系统进行了深入的分析。
NTFS的主要结构是卷,卷由硬碟上的逻辑分区组成。一个磁碟可能包含一个或多个卷。每个卷中又包含许多档案。在NTFS档案系统中,并没有特别为档案系统自身提供额外的空间。而将档案系统所需的全部数据,如记录卷的分配状态点阵图、档案、目录和系统引导程式等数据,像一般的档案一样储存在硬碟上。这些系统档案称为元档案(metafile),这些数据则称为元数据(metadata)磁碟上的档案使用簇连结在一起。一个簇的长度一定是物理扇区长度的整数倍,并总是2的幕。扇区对NTFS档案系统是透明的,因此它不限制扇区的大小(通常是512个位元组)。簇的大小可因卷的大小而改变,一般是由NTFS格式化程式自动决定。
一个档案在磁碟上的位置是通过主控档案表MFT来定位的。主控档案表MFT是NTFS中最重要的系统档案,它是一个关係资料库,由档案记录的数组组成,磁碟卷上的每一个档案都有一个档案记录,当然大的档案可能有多重记录。MFT本身也有一条记录自己的记录。每个档案记录的长度是固定的(一般是1KB)。每个档案由一个档案引用号来标识,这是一个64位的数,它由档案号(低48位)和档案顺序号(高16位)所组成。档案号记录着档案的档案记录在MFT中的位置,档案顺序号则记录着档案记录位置被重複使用的次数,即MFT档案记录被重複使用一次,则档案顺序号加1,这样可以让NTFS完成一致性检查。MFT中的元档案记录的情况如图1所示。
图1

当目录的属性值存放在MFT表的基本档案记录中,该属性就称为常驻属性(resident attribute)。对于常驻属性,属性值存放在属性名的后面。如果一个目录的属性值太大,不能存放在一个档案记录中,那幺NTFS将从Data区为该属性值分配存储空间。这些存储空间通常称为一个运行(run),用来存放属性值,存储在运行中的属性称为非常驻属性(non-re sident attribute) 。MFT中的基本档案记录有一个指针指向大小为 2KB的运行(4KB是对应着4KB的簇尺寸),那是一个非常驻索引缓冲区,包含着下一层的目录或档案。採用b+树结构储存目录信息,可以以很快的速度对目录进行查询,并且不需要去读档案自身的档案记录。在存储大量的小档案时,NTFS档案系统能节约存储空间,访问速度也比较快的主要原因即在此。MFT中的目录结构情况如图2所示。
图2

Linux
Linux系统的一个重要的特徵就是支持多种不同的档案系统,如:EXT,FAT,EXT2,EXT3,SYSV等。目前,Linux主要使用的档案系统是EXT2和EXT3档案系统,也是Linux用户最常用的档案系统。各种Linux的系统发布都将EXT2作为作业系统的基础。EXT2档案系统支持标準UNIX档案类型:普通档案、目录档案、特别档案和符号连结。
EXT2磁碟布局
EXT2和其他逻辑块档案一样,由逻辑块序列组成,根据用途划分,这些逻辑块通常有:引导块、超级块、mode区及数据区等。
EXT2将其所占的逻辑分区划分为块组,由一个引导块和其他块组组成,每个块组又由超级块、组描述符表、块点阵图、索引节点点阵图、索引节点表、数据区构成,如图3所示。
图3

每个块中保存的这些信息是有关EXT2档案系统的备份信息。当某个块组的超级块或mode受损时,这些信息可以用来恢复档案系统。
档案的目录结构
Linux系统的目录结构採用了将档案名称与档案描述信息分开的方法。档案目录由档案名称和该档案的索引节点号构成,一个目录项共占16B。其中,档案名称占14个位元组,索引节点号(或索引节点指针)占2个位元组。因此,1 KB的盘块中可以存放64(1K/16)个目录项,这样就节省了系统查找及访问档案的时间。在一个共有640个FCB的档案目录中查找一个档案时,平均只需启动磁碟5次,因此大大减少了系统开销。如表1所示为一个档案目录的实例。
表1

一个档案的磁碟索引节点占64个位元组,主要包括档案标识符、档案存取许可权、档案物理地址、档案长度、档案连线係数、档案存取时间等一些档案的重要信息。
档案的物理结构
Linux系统档案的物理结构採用混合索引方式,对分配给档案的磁碟块进行管理。在Linux档案系统的索引节点中存在一项i.addr[14],用于存放该档案的磁碟块号。如图4所示为Linux系统的混合索引档案结构。
图4

Linux系统档案实现了按名查找。通过档案名称访问档案的过程如下:通过档案名称查找档案目录,找到该档案的索引结点号;通过索引结点号查找索引节点区,找到该档案的索引点;根据索引结点中提供a. addr,找到该档案在磁碟的相应的块号序列;根据块号,找到档案内容。
由于Linux系统的EXT2档案系统採用了合理巧妙的档案系统结构,以及目录结构,使得该档案系统多项性能得到最佳化。採用EXT2系统,能够大大改善磁碟I/O速度,提高I/O组织的灵活性及编程效率。因此,EXT2档案系统为开发嵌入式系统及实时套用系统提供了广泛的基础和手段。
FAT档案系统与NTFS档案系统目录的比较:FAT档案系统直接以档案控制块作为档案目录,这样档案系统目录相应较大,查询速度较慢。以索引结点作为档案目录,对于一些小的档案系统是可以的,但是对较大型的档案系统就不适用了。Linux系统的档案目录为:档案名称、索引结点号。这使得Linux系统的档案目录更小,查询速度更快。