文件系统结构是什么

发布时间:阅读数:8


文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构。文件系统是软件系统的一部分,它的存在使得应用可以方便的使用抽象命名的数据对象和大小可变的空间。

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

Linux

Linux 系统的一个重要的特征就是支持多种不同的文件系统,如:EXT,FAT,EXT2,EXT3,SYSV 等。Linux 主要使用的文件系统是 EXT2 和 EXT3 文件系统,也是 Linux 用户最常用的文件系统。各种 Linux 的系统发布都将 EXT2 作为操作系统的基础。EXT2 文件系统支持标准 UNIX 文件类型:普通文件、目录文件、特别文件和符号链接。

EXT2 磁盘布局

EXT2 和其他逻辑块文件一样,由逻辑块序列组成,根据用途划分,这些逻辑块通常有:引导块、超级块、mode 区及数据区等。

EXT2 将其所占的逻辑分区划分为块组,由一个引导块和其他块组组成,每个块组又由超级块、组描述符表、块位图、索引节点位图、索引节点表、数据区构成。

每个块中保存的这些信息是有关 EXT2 文件系统的备份信息。当某个块组的超级块或 mode 受损时,这些信息可以用来恢复文件系统。

文件的目录结构

Linux 系统的目录结构采用了将文件名与文件描述信息分开的方法。文件目录由文件名和该文件的索引节点号构成,一个目录项共占 16B。其中,文件名占 14 个字节,索引节点号(或索引节点指针)占 2 个字节。因此,1 KB 的盘块中可以存放 64(1K/16)个目录项,这样就节省了系统查找及访问文件的时间。在一个共有 640 个 FCB 的文件目录中查找一个文件时,平均只需启动磁盘 5 次,因此大大减少了系统开销。

一个文件的磁盘索引节点占 64 个字节,主要包括文件标识符、文件存取权限、文件物理地址、文件长度、文件连接系数、文件存取时间等一些文件的重要信息。

文件的物理结构

Linux 系统文件的物理结构采用混合索引方式,对分配给文件的磁盘块进行管理。在 Linux 文件系统的索引节点中存在一项 i.addr,用于存放该文件的磁盘块号。

Linux 系统文件实现了按名查找。通过文件名访问文件的过程如下:通过文件名查找文件目录,找到该文件的索引结点号;通过索引结点号查找索引节点区,找到该文件的索引点;根据索引结点中提供 a. addr,找到该文件在磁盘的相应的块号序列;根据块号,找到文件内容。

由于 Linux 系统的 EXT2 文件系统采用了合理巧妙的文件系统结构,以及目录结构,使得该文件系统多项性能得到优化。采用 EXT2 系统,能够大大改善磁盘 I/O 速度,提高 I/O 组织的灵活性及编程效率。因此,EXT2 文件系统为开发嵌入式系统及实时应用系统提供了广泛的基础和手段。

FAT 文件系统与 NTFS 文件系统目录的比较:FAT 文件系统直接以文件控制块作为文件目录,这样文件系统目录相应较大,查询速度较慢。以索引结点作为文件目录,对于一些小的文件系统是可以的,但是对较大型的文件系统就不适用了。Linux 系统的文件目录为:文件名、索引结点号。这使得 Linux 系统的文件目录更小,查询速度更快。