Linux文件系统结构分析

  • 格式:pdf
  • 大小:293.12 KB
  • 文档页数:8

Linux文件系统结构分析

摘要:阐述了Linux系统的文件结构类型,指出了EXT2是在Linux系统中最为常

用的文件系统。分析了EXT2文件系统的磁盘布局、索引结点及目录结构,研究了

EXT2系统实现按名存取的方法,文件读取速度更高效。

关键词:EXT2文件系统;索引结点;混合索引;文件目录

Abstract:DescribethetypeofthefilestructureofLinuxsystems,pointingoutEXT2ismost

commonlyusedinLinuxfilesystem.Analysisofthedisklayout,indexnodesandEXT2file

systemdirectorystructure.StudyaboutthemethodtoachieveaccesstothefilebynameinEXT2

systemwhichmakethefilereadmorespeedandefficient.

Keywords:EXT2filesystem,indexnode,mixedindex,filedirectory

引言

Linux系统的一个重要的特征就是支持多种不同的文件系统,如:EXT、FAT、

EXT2、EXT3、SYSV等。目前,Linux主要使用的文件系统是EXT2和EXT3文件系

统,也是Linux用户最常用的文件系统。

Linux最早的文件系统是Minix,但是专门为Linux设计的文件系统——扩

展文件系统第二版或EXT2被设计出来并添加到Linux中,这对Linux产生了重

大影响。EXT2文件系统功能强大、易扩充、性能上进行了全面优化,也是所有

Linux发布和安装的标准文件系统类型。

每个实际文件系统从操作系统和系统服务中分离出来,它们之间通过一个接

口层:虚拟文件系统或VFS来通讯。VFS使得Linux可以支持多个不同的文件系

统,每个表示一个VFS的通用接口。由于软件将Linux文件系统的所有细节进

行了转换,所以Linux核心的其它部分及系统中运行的程序将看到统一的文件系

统。Linux的虚拟文件系统允许用户同时能透明地安装许多不同的文件系统。

在Linux文件系统中,作为一种特殊类型/proc文件系统只存在内存当中,

而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

/proc文件系统是一个伪文件系统,用户和应用程序可以通过/proc得到系统的

信息,并可以改变内核的某些参数。各种Linux的系统发布都将EXT2作为操作

系统的基础。EXT2文件系统支持标准UNIX文件类型:普通文件、目录文件、特

别文件和符号链接。

1.EXT2磁盘布局

EXT2和其他逻辑块文件一样,由逻辑块序列组成,根据用途划分,这些逻辑

块通常有:引导块、超级块、inode区及数据区等。

EXT2将其所占的逻辑分区划分为块组,由一个引导块和其他块组组成,每个块组

又由超级块、组描述符表、块位图、索引节点位图、索引节点表、数据区构成,

如图1所示。

图1EXT2磁盘布局在逻辑空间的映像每个块中保存的这些信息是有关EXT2文件系统的备份信息。当某个块组的超级

块或inode受损时,这些信息可以用来恢复文件系统。

2.EXT2索引结点

EXT2文件系统中的数据是以数据块的方式存储在文件中的。这些数据块的

大小相同,其大小在EXT2创建时设定。磁盘上存储文件的基本单位是簇。一个簇

也称为一个磁盘块,它通常是2n个磁盘扇区大小。

EXT2文件系统用一个inode数据结构描述系统中的每一个文件,定义系统的拓扑

结构。一个inode描述了一个文件中的数据占用了哪些块以及文件的访问权限、

文件的修改时间和文件的类型。EXT2文件系统中的每一个文件都用一个inode

描述,而每一个inode都用一个独一无二的数字标识。文件系统的inode都放在

一起,在inode索引表中。

EXT2块组中组描述符中的项称为组描述符,用于描述某个块组的整体信息。

每个块组都有一个相应的组描述符来描述它,所有的组描述符形成一个组描述符

表,并在使用时被调入块高速缓存。

EXT2中每个块组有两个位示图块,一个用于表示数据块的使用情况,叫数据

块位图;另一个用于表示索引结点的使用情况,叫索引结点位图。位图中的每一位

表示该组中一个数据块或一个索引块的使用情况,用0表示空闲,用1表示已分

配。

在Linux的EXT2文件系统中,索引结点inode分为两类,即磁盘索引结点和

内存索引结点,通常也分别叫做EXT2inode和VFSinode。

(1)磁盘索引节点

磁盘索引节点是指存放在磁盘上的索引节点。每个文件有唯一的一个磁盘索

引节点,它主要包括以下内容:

文件所有者标识号:指拥有该文件的文件主或同组的标识符。

文件类型:指明文件是普通文件、目录文件还是特别文件等类型。

文件物理地址:指出数据文件所在的物理块号。如在Linux系统中,通过15个地

址项来表明文件所在的物理块号。

文件存取权限:用户对文件的操作类型,如读、修改、执行等。

文件大小:文件所占有的字节个数。

文件连接计数:指明系统中共享该文件的进程个数。

文件存取时间:指出该文件最近被进程存取的时间、最近被修改的时间及索引节

点最近被修改的时间等。

(2)内存索引节点

内存索引节点是指存放在内存的索引节点。当文件打开时,要将磁盘索引节点复

制到内存索引节点中,便于以后使用。内存索引节点包括以下内容:

索引节点编号:标识内存索引节点。

索引节点状态:指示该节点是否已被修改或已被上锁。

访问计数:当进程访问该节点时,访问计数加1,访问完再减1。

链接指针:指向空闲链表和散列队列的指针。

逻辑设备名:含有该文件的文件系统的逻辑设备名。

3.文件的目录结构

Linux文件系统采用带链接的树形目录结构,即只有一个根目录(通常用

“/”表示),其中含有下级子目录或文件的信息;子目录中又可含有更下级的子

目录或者文件的信息。这样一层一层地延伸下去,构成一棵倒置的树,如图2所示。

图2:linux树形目录结构目录树中,根节点和中间节点(用圆圈表示)都必须是目录,而普通文件和特别

文件只能作为“叶子”出现。当然,目录也可以作为叶子。

Linux系统的目录结构采用了将文件名与文件描述信息分开的方法。文件目

录由文件名和该文件的索引节点号构成,一个目录项共占16B。其中,文件名占14

个字节,索引节点号(或索引节点指针)占2个字节。因此,1KB的盘块中可以存放

64(1K/16)个目录项,这样就节省了系统查找及访问文件的时间。在一个共有640

个FCB的文件目录中查找一个文件时,平均只需启动磁盘5次,因此大大减少了

系统开销。如表1所示为一个文件目录的实例。

表1Linux系统的文件目录一个文件的磁盘索引节点占64个字节,主要包括文件标识符、文件存取权限、文

件物理地址、文件长度、文件连接系数、文件存取时间等一些文件的重要信息。

4.文件的物理结构

Linux系统文件的物理结构采用混合索引方式,对分配给文件的磁盘块进行

管理。在Linux文件系统的索引节点中存在一项i.addr[14],用于存放该文件的

磁盘块号。如图3所示为Linux系统的混合索引文件结构。

图3Linux的混合索引文件结构(1)直接寻址。i.addr[0]—i.addr[9]这10项用于直接存放该文件所占用的磁盘

块号,文件的前10个磁盘块号依次放入其中。如果磁盘块的大小为1KB,则当文

件长度不大于10K时,操作系统可采用直接索引文件的方式对文件进行访问,直

接从索引节点中找出该文件所在的磁盘块号,访问速度较快。

(2)一次间接寻址方式。i.addr[10]项中存放的磁盘块号所指向的磁盘块再用来

存放下一级的磁盘块号。假设一个磁块大小为1KB,每个磁盘块号占4个字节,则

一个磁盘块可存放256个(1KB/4B)磁盘块号。这样,通过一次间接寻

址,i.addr[10]项就引出了256个磁盘块号,所以,这一级可支持的文件长度为

256K。

(3)二次间接寻址方式。i.addr[11]存放的磁盘块号采用两级索引的方式,如果沿

用以上的假设,则该项可引出2562个磁盘块,可支持的文件长度为2562K。

(4)三次间接寻址方式。i.addr[12]存放的磁盘块号采用三级索引的方式,如果仍

沿用以上的假设,则该项可引出2563个磁盘块,可支持的文件长度为2563K。

由以上分析可以看出,UNIX系统对于长度较小的文件具有较快的读写速度,同时

又具有支持大文件的功能。

Linux系统文件实现了按名查找。通过文件名访问文件的过程如下:通过文

件名查找文件目录,找到该文件的索引结点号;通过索引结点号查找索引节点区,

找到该文件的索引点;根据索引结点中提供a.ad-dr,找到该文件在磁盘的相应

的块号序列;根据块号,找到文件内容。

FAT文件系统与NTFS文件系统目录的比较:FAT文件系统直接以文件控制块

作为文件目录,这样文件系统目录相应较大,查询速度较慢。以索引结点作为文件

目录,对于一些小的文件系统是可以的,但是对较大型的文件系统就不适用了。

Linux系统的文件目录为:文件名、索引结点号。这使得Linux系统的文件目录

更小,查询速度更快。

5.与windows的比较

a)相同点Linux和Windows都支持多种文件系统。文件资源可以通过NetBIOS、FTP

或者其他协议与其他客户机共享。可以很灵活地对各个独立的文件系统进行组

织,由管理员来决定它们在何处可以以何种方式被访问。

两种操作系统都支持各种物理设备端口,比如并口、串口和USB接口。支

持各种控制器,比如IDE和SCSI控制器。Linux还支持很多“刚刚上市”的

标准硬件。

Linux和Windows都支持多种网络协议,比如TCP/IP、NetBIOS和IPX。都

支持多种类型的网络适配器。都具备通过网络共享资源的能力,比如共享文件和

打印。都可以提供网络服务能力,比如DHCP和DNS。

Linux和Windows都提供服务。所谓服务,指的是那些在后台运行的应用程

序,可以为系统和远程调用该服务的计算机提供一些功能。在系统引导的时候可

以单独控制并自动启动这些程序。(注意:Linux中沿用了Unix的习惯,称这

种应用程序为daemon)

b)区别