Linux文件系统结构分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux文件系统结构分析
摘要:阐述了Linux系统的文件结构类型,指出了EXT2是在Linux系统中最为常用的文件系统。分析了EXT2文件系统的磁盘布局、索引结点及目录结构,研究了EXT2系统实现按名存取的方法,文件读取速度更高效。
关键词:EXT2文件系统;索引结点;混合索引;文件目录
Abstract:Describe the type of the file structure of Linux systems,pointing out EXT2is most commonly used in Linux file system.Analysis of the disk layout,index nodes and EXT2file system directory structure.Study about the method to achieve access to the file by name in EXT2 system which make the file read more speed and efficient.
Key words:EXT2file system,index node,mixed index,file directory
引言
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和VFS inode。
(1)磁盘索引节点
磁盘索引节点是指存放在磁盘上的索引节点。每个文件有唯一的一个磁盘索引节点,它主要包括以下内容:
文件所有者标识号:指拥有该文件的文件主或同组的标识符。
文件类型:指明文件是普通文件、目录文件还是特别文件等类型。
文件物理地址:指出数据文件所在的物理块号。如在Linux系统中,通过15个地址项来表明文件所在的物理块号。
文件存取权限:用户对文件的操作类型,如读、修改、执行等。
文件大小:文件所占有的字节个数。
文件连接计数:指明系统中共享该文件的进程个数。
文件存取时间:指出该文件最近被进程存取的时间、最近被修改的时间及索引节点最近被修改的时间等。
(2)内存索引节点
内存索引节点是指存放在内存的索引节点。当文件打开时,要将磁盘索引节点复制到内存索引节点中,便于以后使用。内存索引节点包括以下内容:
索引节点编号:标识内存索引节点。
索引节点状态:指示该节点是否已被修改或已被上锁。
访问计数:当进程访问该节点时,访问计数加1,访问完再减1。
链接指针:指向空闲链表和散列队列的指针。
逻辑设备名:含有该文件的文件系统的逻辑设备名。