`
M_ittrue
  • 浏览: 77009 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

ext2文件系统解构探析

阅读更多

 

内容要点:

  超级块

  块位图

  inode位图

  数据块

  inode结构

  VFS基本原理

    整理听课笔记及自己可与搜集的各种资料,按理解总结一些文件系统,并且其中部分内容可参看我的上篇笔记《硬盘存储结构小结》;

 

文件系统:

系统结构:
     块设备:文件组织管理以物理块为单位。物理块是块设备上大小相同的存储区域(如磁盘上的扇区)。一个块究竟多大是在格式化时确定的,例如mke2fs的-b选项可以设定块大小为1024、2048或4096字节。
    一个文件系统一般使用块设备上一个独立的逻辑分区;
    文件逻辑分区中除了有表示文件内容的逻辑块(称为数据块)外,还设置了包含管理和控制信息的逻辑块。
    磁盘上可能有多个逻辑分区,每个分区可以使用不同的文件子系统;
    ext2文件系统把逻辑分区划分为块组,并且从0开始编号。每个块组包含的等量的物理块(即块组大小是相同的;物理分区最后一个块组可能小些);在块组的数据块中存储文件或目录;
   


    上图中启动块(Boot Block)的大小是确定的,就是1KB,启动块是由PC标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启动块。启动块之后才是ext2文件系统的开始,ext2文件系统将整个分区划成若干个同样大小的块组(Block Group),每个块组都由以下部分组成:


            
超级块(Super Block)
    描述整个分区的文件系统信息,例如块大小、文件系统版本号、上次mount的时间等等。
    超级块位于每个块组的最前面,每个块组包含超级块的内容是相同的(超级块在每个块组的开头都有一份拷贝);
    系统运行期间,把超级块复制到系统缓冲区内,只需把块组0的超级块读入内存,其它块组的超级块做为备份


 
块组描述符表(GDT,Group Descriptor Table)
    由很多块组描述符组成,Linux组描述符为32字节,整个分区分成多少个块组就对应有多少个块组描述符。
    每个块组描述符(Group Descriptor)存储一个块组的描述信息,例如在这个块组中从哪里开始是inode表,从哪里开始是数据块等等。
    和超级块类似,块组描 述符表在每个块组的开头也都有一份拷贝,具有相同内容的组描述符表放在每个块组中做为备份,这些信息是非常重要的,一旦超级块意外损坏就会丢失整个分区的数据,一旦块组描述符意外损坏就会丢失整个块组的数 据,因此它们都有多份拷贝。通常内核只用到第0个块组中的拷贝,当执行e2fsck检查文件系统一致性时,第0个块组中的超级块和块组描述符表就会拷贝到其它块组,这样当第0个块组的开头意外损坏时就可以用其它拷贝来恢复,从而减少损失。
 


块位图(Block Bitmap)
    每个块组都有一个块位图,位于组描述符表之后,用来描述本块组中数据块的使用状况,它本身占一个逻辑块,其中的每个bit 代表本块组中的一个块,这个bit为1表示该块已用,这个bit为0表示该块空闲可用;各位的顺序与块组中数据块顺序一致;
    为什么用df命令统计整个磁盘的已用空间非常快呢?因为只需要查看每个块组的块位图即可,而不需要搜遍整个分区。相反,用du命令查看一个较大目录的已用空间就非常慢,因为不可避免地要搜遍整个目录的所有文件。
    调优:与此相联系的另一个问题是:在格式化一个分区时究竟会划出多少个块组呢?主要的限制在于块位图本身必须只占一个块。用mke2fs格式化时默认块大小是1024字节,可以用-b参数指定块大小,现在设块大小指定为b字节,那么一个块可以有8b个bit,这样大小的一个块位图就可以表示8b个块的占用情况,因此一个块组最多可以有8b个块,如果整个分区有s个块,那么就可以有s/(8b)个块组。格式化时可以用-g参数指定一个块组有多少个块,但是通常不需要手动指定,mke2fs工具会计算出最优的数值。
inode位图(inode Bitmap)
    和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。
inode表(inode Table)
    一个块组中所有文件的inode形成了inode表, 表项序号是inode号;
    我们知道,一个文件除了数据需要存储之外,一些描述信息也需要存储,例如文件类型(常规、目录、符号链接等),权限,文件大小,创建/修改/访问时间等,也就是ls -l命令看到的那些信息,这些信息存在inode中而不是数据块中。每个文件都有一个inode,一个块组中的所有inode组成了inode表。
    inode表占多少个块在格式化时就要决定并写入块组描述符中,mke2fs格 式化工具的默认策略是一个块组有多少个8KB就分配多少个inode。由于数据块占了整个块组的绝大部分,也可以近似认为数据块有多少个8KB就分配多少 个inode,换句话说,如果平均每个文件的大小是8KB,当分区存满的时候inode表会得到比较充分的利用,数据块也不浪费。如果这个分区存的都是很 大的文件(比如电影),则数据块用完的时候inode会有一些浪费,如果这个分区存的都是很小的文件(比如源代码),则有可能数据块还没用完inode就 已经用完了,数据块可能有很大的浪费。如果用户在格式化时能够对这个分区以后要存储的文件大小做一个预测,也可以用mke2fs的-i参数手动指定每多少个字节分配一个inode。
数据块(Data Block)
    根据不同的文件类型有以下几种情况
    1.  对于常规文件,文件的数据存储在数据块中。
    2.  对于目录,该目录下的所有文件名和目录名存储在数据块中,注意文件名保存在它所在目录的数据块中,除文件名之外,ls -l命令看到的其它信息都保存在该文件的inode中。注意这个概念:目录也是一种文件,是一种特殊类型的文件。
    3.  对于符号链接,如果目标路径名较短则直接保存在inode中以便更快地查找,如果目标路径名较长则分配一个数据块来保存。
    4.  设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备号和次设备号保存在inode中。



  inode结构:
   inode是EXT2基本构件,表示文件系统树型结构的节点。
   EXT2文件系统中的每个文件由一个inode描述,且只能由一个inode描述。
   inode与文件一起存放在外存,系统运行时,把inode写入内存建立映像,加快文件系统速度。



虚拟文件系统VFS简介:
  作用:
     Linux的虚拟文件系统VFS屏蔽了各种文件系统的差别,为处理各种不同文件系统提供了统一的接口。
  工作原理:
     



描述:
   VFS并不是一种实际文件系统
   EXT2等物理文件系统是存在于外存空间的,而VFS 仅存在于内存
   VFS是在系统启动时建立,在系统关闭时消失的,物理文件系统是长期存在于外存。
   VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的inode等、各种操作函数的转换入口。
文件系统注册:
  向系统内核注册文件系统的两种方式:
     1. 系统引导时在VFS中注册,在系统关闭时注销。
     2. 把文件系统做为可装卸模块,安装时在VFS中注册,并在模块卸载时注销
文件系统的安装(也可称为mount挂载):
    文件系统除在VFS中注册,还必须安装到系统中。
    要安装的文件系统必须已经存在于外存磁盘空间上,每个文件系统占用一个独立的磁盘分区,并且具有各自的树型层次结构。
    EXT3是RedHat Linux 5的标准文件系统,所以系统把EXT3文件系统的磁盘分区做为系统根文件系统
    EXT2以外的文件系统安装在根文件系统下的某个目录下,成为系统树型结构中的一个分枝。
    用于安装其它文件系统的目录称为安装点或安装目录
图示:
     


参考:http://www.chinaup.org/man/linux_c/ch29s02.html

 

本文出自 “Mo” 博客,请务必保留此出处http://molinux.blog.51cto.com/2536040/505485

分享到:
评论

相关推荐

    linux ext2 文件系统模拟 c语言实现

    Linux的EXT2(第二扩展文件系统)是早期广泛使用的文件系统之一,特别是在嵌入式系统和Linux服务器上。EXT2的C语言实现是一项技术性极强的任务,涉及到对操作系统底层机制的理解,包括文件系统的结构、inode、超级块...

    制作ext2文件系统的方法 .

    在Linux操作系统中,EXT2(Second Extended File System)是一种经典的文件系统,由Rene Rebeau于1992年开发。它最初是为了解决当时存在的MINIX和EXT文件系统的局限性而设计的,特别是在处理大文件和大量小文件方面...

    EXT2文件系统

    EXT2文件系统存取结构详细介绍 EXT2文件系统是 Linux 系统中的标准文件系统,由 Minix 文件系统扩展而来,具有高效的存取性能。在 EXT2 文件系统中,文件由 inode 进行唯一标识,每个文件可能对应多个文件名,只有...

    认识ext2文件系统

    在深入理解ext2文件系统之前,我们首先要了解文件系统的基本概念。文件系统是操作系统用于组织和管理数据的一种机制,它决定了文件如何被创建、命名、存储和访问。文件系统包含了文件的元数据,即文件的权限、属性、...

    模拟EXT2文件系统.zip

    这个压缩包“模拟EXT2文件系统.zip”包含了几个关键的源代码文件,如`init.c`、`main.c`、`init.h`和`main.h`,这暗示着它们可能是用于创建一个简单的EXT2文件系统模拟器的代码。 EXT2文件系统的结构和原理是这样的...

    模拟Linux ext2文件系统

    Linux的ext2(第二扩展文件系统)是早期广泛使用的文件系统之一,它的设计简洁,适合小型设备和资源有限的环境。这个C语言实现的工程旨在模拟ext2文件系统,为学习者提供一个直观的平台来理解和研究其工作原理。下面...

    Linux下Ext2文件系统的精剪与优化设计.pdf

    本文主要介绍了 Linux 下 Ext2 文件系统的精剪与优化设计,提出了基于 Linux 系统的 Ext2 文件系统的精剪和优化设计,通过精细剪裁和优化设计,构建了一个 Linux 多级用户的 Ext2 二级文件系统,以作 GPS 等专业...

    Linux内核源代码导读-陈香兰-ext2文件系统

    Linux内核源代码导读-陈香兰-中国科学技术大学-ext2文件系统

    ext2 and ext3文件系统

    ### ext2 和 ext3 文件系统详解 #### 一、概述 `ext2` 和 `ext3` 是广泛应用于 Linux 操作系统中的文件系统格式。它们的设计目标是在保持高性能的同时提供可靠性和稳定性。`ext2` 是第二扩展文件系统,而 `ext3` ...

    Ext4文件系统

    Ext4文件系统在Ext3的基础之上做了很多改进,引入了大量新功能,这些改进主要是为了提高未来的Linux系统的性能。 虽然Ext4做了很多改进,但依然能够与Ext3实现向后和向前的兼容性,这一点的确很难得。 因为Ext3文件...

    本科毕业论文(EXT2文件系统的磁盘布局)

    EXT2 文件系统是GNU/Linux操作系统中的标准文件系统,其磁盘布局是理解EXT2运作机制的关键。EXT2在Linux中扮演着重要角色,它负责管理和存储数据,为用户提供统一的文件操作接口。Linux支持多种文件系统,如EXT、EXT...

    android ext4文件系统打包详解

    同时,文档也会涉及使用simg2img工具对ext4文件系统进行解包和修改。 ### make_ext4fs工具详解 make_ext4fs是Android平台上用于打包ext4文件系统的工具。它位于特定平台路径下,如AC8217平台的`out/host/linux-x86...

    Linux EXT2 文件系统介绍和实例分析

    Linux EXT2 文件系统是Linux操作系统中的一个重要组成部分,它是由Rey Card设计的,旨在为Linux提供一个强大且可扩展的文件系统。EXT2是Linux早期广泛使用的文件系统,它的成功在于其简洁的设计和高效的性能。EXT3...

    ext2文件系统

    ext2文件系统是Linux操作系统中使用的一种磁盘文件系统,它在1993年首次被引入,作为对原来minix文件系统的一种改进。ext2文件系统对文件系统管理、文件存储与检索等操作进行优化,提供更好的性能,尤其是在处理大...

    Linux系统环境Ext3文件系统的使用介绍

    Linux系统环境下的Ext3文件系统是一种广泛使用的日志文件系统,它是从早期的Ext2文件系统发展而来的。Ext3的出现主要是为了弥补Ext2在关键业务应用中的不足,特别是Ext2缺乏日志功能的问题。Ext3文件系统通过引入...

    EXT3文件系统下的手工定位文件 .docx

    EXT3文件系统是一种广泛用于Linux操作系统的日志型文件系统,由Linux内核开发者Stephen Tweedie设计。它提供了一种可靠的方式来组织和管理磁盘上的数据,支持大容量存储和快速的数据恢复。EXT3的主要特点是其日志式...

    linux类EXT2文件系统源码

    用文件仿硬盘的C语言程序——模仿linux下的EXT2文件系统,类EXT2文件系统

    Linux EXT4文件系统分析.pdf

    Linux EXT4文件系统分析.pdf

    深入理解linux内核(中文第三版) 第18章+Ext2和Ext3文件系统

    Ext2(第二扩展文件系统)和Ext3(第三扩展文件系统)是Linux系统中最早和最常用的文件系统格式之一,对它们的理解有助于深入掌握Linux文件系统的管理和优化。 Ext2文件系统以其高效性和稳定性著称,为Linux系统...

    ext2文件系统 linux 下的文件系统说明

    **EXT2文件系统详解** EXT2,全称是Second Extended File System,是Linux操作系统中最早广泛使用的日志文件系统之一。它由法国程序员Rene Rebeau开发,并于1992年首次引入Linux内核。EXT2在当时是作为EXT...

Global site tag (gtag.js) - Google Analytics