本文转载自:https://blog.csdn.net/tongyijia/article/details/52809281

先来提出三个概念: 
- superblock 
- inode 
- block

superblock:记录此文件系统的整体信息,包括inode,block总量,使用量,剩余量,以及文件系统的格式与相关信息等。 
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件数据所在的block号码。 
block:实际记录文件的内容,若文件太大,则会占用多个block。

inode和block都有编号,在文件系统最初格式化的时候就已经分好了inode和block块并编好号码。假设我们要在linux中存储一个文件,那么,文件的名称权限,各种属性都存储在它的inode中,每个文件只有一个inode,这个inode中还存储着这个文件数据的实际放置的block号码。例如我们要读取一个文件,先去读取这个文件的inode,对比权限等属性,若有权限读取,则根据inode中存储的block号码依次去block块读取数据。如下图: 

这种文件系统我们就叫做索引式文件系统(indexed allocation)

这里做一个对比,闪存的FAT格式,这种文件系统并没有inode的存在,所以,FAT没有办法将这个文件的所有block在一开始就读取出来,每个block的号码都记录在前一个block中,读取时如下: 

这样的话,在读取文件时,它需要一个个将block读出后,才会知道下一个block所处的位置,如果一个同一个文件数据写入的block分散的太过厉害,则我们的磁盘读取头无法在磁盘转一圈就得到所有数据,要多转好多圈才能够完整的读取到这个文件的内容。

碎片整理:文件如果写入的太过离散的话文件读取的效能将会变的很差,碎片整理就是将同一个文件所属的block汇整在一起,这样数据的读取会比较容易,FAT文件系统就经常需要碎片整理,EXT2是索引式文件系统,基本不太需要常常进行碎片整理,但文件系统使用的时间太久的话,常常删除/编辑/新增文件时还是会可能造成文件数据太过于离散的问题,所以偶尔还是需要进行整理。

linux的EXT2文件系统的学习:

当一个文件系统高达数百GB时,inode,block的数量太庞大不容易管理,因此EXT2文件系统在格式化是基本是区分成多个区块群组(block group),每个区块群组又有自己独立的inode/block/superblock系统,如图:

文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程序。

data block: 
放置文件内容的地方,在EXT2文件系统中支持的block大小有1K,2K,4K三种。在格式化时block就固定了,且每个block都有编号,便于inode记录。由于block大小的差异,会导致文件系统所能支持的最大磁盘容量与最大单一文件容量不同。如下: 

这里关于block有几点提示: 
原则上,block的大小与数量在格式化完成后就不能再改变了(除非重新格式化) 
每个block中最多只能放置一个文件的数据 
如果文件大于一个block大小,则一个文件将会占用多个block 
如果文件小于block,则该block的剩余容量就不能被使用了

inode table: 
inode记录的数据至少有:

  • 该文件的存取模式(rwx)
  • 该文件的拥有者与拥有群组
  • 该文件的容量大小
  • 该文件建立或状态改变的时间
  • 该文件最近一次读取的时间
  • 最近的修改时间
  • 定义文件特性的旗标(flag),如SetUID
  • 该文件真正的内容指向

inode的一些特色:

  • 每个inode大小固定为128bytes(新的ext4,xfs可设定到256bytes)
  • 每个文件只占用一个node
  • 文件系统能够建立的文件数量与inode的数量有关
  • 系统读取文件时需要先找到 inode,并分析 inode 所记录的权限与用户是否符合,若符合才能够开始实际读取 block 的内容

inode的大小是有限的,那么,如果一个文件的很大,block数量很多,inode需要记住的block号码也很多,那么,inode这时是如何记住的呢?看了下面这个图就会明白了: 

inode中的双简接与三间接就解决了这个问题。将block号存在block中,是不是就能存下了?

Superblock: 
Superblock也是一个很重要的地方,它记录了整个文件系统的相关信息。它记录的信息主要有:

  • inode与block的总量
  • 未使用的inode,block的数量
  • block与inode的大小(block为1K,2K,4K;inode为128bytes或256bytes)
  • filesystem的挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等文件系统的相关信息
  • 一个vaild bit数值,若此文件系统已经被挂载,此值为1,若为挂载则为0

    Superblock是非常重要的,因为整个文件系统的基本信息都存在于此。一般来说Superblock大小为1024bytes。

    其实,每个block group都可能含有superblock,但我们又说一个文件系统只有一个superblock,这是因为除了第一个block group含有superblock外,后续的block group也可能含有superblock作为第一个block group中的superblock的备份,这样,有利于superblock的救援。

Filesystem Description(文件系统描述说明):

这个区段可以描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock,bitmap, inodemap, data block) 分别介于哪一个 block 号码之间。

block bitmap (区块对照表):

block bitmap当中可以知道哪些block是空的,我们可以根据这个快速的找到可以存放数据的空block。 
当你删除文件的时候,这个文件原本占用的block号码就必须释放出来,此时,在block bitmap中,相对应的block号码就要修改成【未使用】的状态。

inode bitmap (inode对照表) 
与block bitmap功能类似,这里不做说明。

感谢阅读,欢迎指正。

文件系统的特性,linux的EXT2文件系统【转】的更多相关文章

  1. Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里

    这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争.最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间.学习吧又不想学习,看电视娱乐吧也 ...

  2. Linux中ext2文件系统的结构

    1.ext2产生的历史 最早的Linux内核是从MINIX系统过渡发展而来的.Linux最早的文件系统就是MINIX文件系统.MINIX文件系统几乎到处都是bug,采用的是16bit偏移量,最大容量为 ...

  3. (十三)linux文件系统详解(基于ext2文件系统)【转】

    本文转载自:https://blog.csdn.net/FadeFarAway/article/details/53959639 我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如 ...

  4. 认识 EXT2 文件系统

    认识ext文件系统 硬盘组成与分割 文件系统特性 Linux 的 EXT2 文件系统(inode) 与目录树的关系 EXT2/EXT3 文件的存取与日志式文件系统的功能 Linux 文件系统的运行 挂 ...

  5. EXT2 文件系统

    转自:http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2651641.html#ext2_filesystem 认识ext文件系统 硬盘组成与分 ...

  6. linux ext2 文件系统学习

    Linux  ext2文件系统理解 硬盘组成: 硬盘由多个圆形硬盘片组成.按照硬盘片能够容纳的数据量分为单盘和多盘.硬盘的数据读取主要靠机械手臂上的磁头,在机械手臂上有多个磁头.机械手臂不动硬盘旋转一 ...

  7. 漫谈Linux标准的文件系统(Ext2/Ext3/Ext4)

    Ext 全称Linux extended file system, extfs,即Linux扩展文件系统,Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版,只不过 ...

  8. Linux 磁盘与文件系统(EXT2)简介

    Linux 中,一切(或几乎一切)都是文件. 一.Linux 磁盘分区与文件系统 1.1 磁盘分区 磁盘的分区主要分为主分区和扩展分区 1)主分区:总共最多只能有四个主分区: 2)扩展分区:只能有一个 ...

  9. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

随机推荐

  1. MDL原理理解

    转载自:http://blog.csdn.net/xiaoyu714543065/article/details/8445221 最小描述长度(MDL)        最小描述长度( MDL) 原理是 ...

  2. UML Rose2003完美破解攻略

    Rational Rose 2003 软件project画图软件 ,当然还不止画图,对于那些不想用英文版Rational Rose2003的同志们.这个Rational Rose2003 版本号已经汉 ...

  3. hdu 2460(tarjan求边双连通分量+LCA)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2460 思路:题目的意思是要求在原图中加边后桥的数量,首先我们可以通过Tarjan求边双连通分量,对于边 ...

  4. POJ 2479 Maximum sum(双向DP)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 36100   Accepted: 11213 Des ...

  5. cocos2D 虚拟摇杆Joystick功能实现

        @implementation InputLayer        - (id)init    {        if(self = [super init])        {        ...

  6. 关于new HashMap<>(1)中1的理解(hashMap的加载因子)

    新入公司,阅读代码的时候发现了一行代码,为 Map<String, String> map=new HashMap<>(1); 对于这个括号里面的1不能理解,于是查了资料,大概 ...

  7. POJ3487[稳定婚姻]

    The Stable Marriage Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2974 Accepted ...

  8. 《从零开始学Swift》学习笔记(Day 21)——函数返回值

    原创文章,欢迎转载.转载请注明:关东升的博客 返回值3种形式:无返回值.单一返回值和多返回值. 无返回值函数 所谓无返回结果,事实上是Void类型,即表示没有数据的类型. 无返回值函数的语法格式有如下 ...

  9. Ramsey's_theorem Friendship Theorem 友谊定理

    w https://en.wikipedia.org/wiki/Ramsey's_theorem https://zh.wikipedia.org/wiki/拉姆齐定理 在组合数学上,拉姆齐(Rams ...

  10. <2013 07 06> Future and Near Future

    试图了解     量子力学 近现代基础物理学理论 量子计算机   脑科学 近现代生物学 遗传变异与进化   复杂工程学 系统工程 管理科学   人工智能 智能算法 机器学习 深度学习 大数据 云计算 ...