Linux文件系统结构分析
- 格式:pdf
- 大小:293.12 KB
- 文档页数:8
Linux文件系统结构分析
摘要:阐述了Linux系统的文件结构类型,指出了EXT2是在Linux系统中最为常用的文件系统。分析了EXT2文件系统的磁盘布局、索引结点及目录结构,研究了EXT2系统实现按名存取的方法,文件读取速度更高效。关键词:EXT2文件系统;索引结点;混合索引;文件目录Abstract:DescribethetypeofthefilestructureofLinuxsystems,pointingoutEXT2ismostcommonlyusedinLinuxfilesystem.Analysisofthedisklayout,indexnodesandEXT2filesystemdirectorystructure.StudyaboutthemethodtoachieveaccesstothefilebynameinEXT2systemwhichmakethefilereadmorespeedandefficient.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)区别