[linux文件系统]ext2文件系统

前言

如何快速高效的寻到在硬盘存储的数据,于是文件系统就诞生了。文件系统是逻辑层面的,那么文件系统是如何管理好硬件层提供的磁盘空间的?

文件系统的技术方案

  • 1.连续分配 创建文件时,分配一组连续的数据块。然后再单独的地方存储文件信息
  • 2.链式分配 将文件块像链表一样管理起来,每个块放指针,指针指向下一个文件块位置
  • 3.索引分配 通过文件索引找到存放文件的信息的数据块(数据库中有文件名,数据块位置等),然后再找到数据块的位置,类似图书馆中查找一本书的过程

现在,大部分文件系统采用索引分配方案
优点:
1.能够保持好大部分文件的局部性
2.满足文件插入,删除的高效
3.随机读写不需要沿着指针前行
缺点
1.会有较多的磁盘寻道次数
2.索引表本身管理复杂,会带来额外的系统开销

ext2文件系统

ext类有ext2、ext3、ext4文件系统,是ext类版本的升级
这里介绍ext2文件系统,当然它是属于索引分配的

基本概念

  1. 块. 即Block, 数据存储的最小单元, 每个块都有一个唯一的地址, 从0开始编号, 起源于第一个可以用来存储数据的扇区
  2. 超级块. 超级块保存了各种文件系统的meta信息, 比如块大小信息。他位于文件系统的2号和3号扇区(物理地址), 占用两个扇区大小
  3. 块组. 所有的块会划分成多个块组, 每个块组包含同样多个块, 但是可能整个文件系统整个块数不是块组的整数倍, 所以最后一个块组包含的个数可能会小于其他块

总体结构

文件系统
1.DataBlock 数据块
即Block, 数据存储的最小单元, 每个块都有一个唯一的地址, 从0开始编号, 起源于第一个可以用来存储数据的扇区;

2.inode Table inode节点表
inode 节点表

  • 每个inode会被分配给一个目录或者一个文件,每个inode包含了128字节,文件的各种meta信息
  • 在所有inode中, 1~10号会用作保留给内核使用, 在这些保留节点中, 2号节点用于存储根目录信息, 1号表示坏块, 8号表示日志文件信息。
  • 第一个用户可见的都是从11号inode开始, 11号节点一般用作lost+found目录, 当检查程序发现一个inode节点已经被分配, 但是没有文件名指向他的时候, 就会把他添加到lost+found目录中并赋予一个新的文件名

文件项

  • inode编号、文件类型、属主UID、属主的组GID、文件大小、文件所使用的磁盘块的实际数目、时间、以及数据块的信息

注:inode中没有文件名,只能通过inod找到;stat命令可以查看

目录项
目录项

  • 每个目录对应一个inode节点,该inode节点对应的数据块里面会存储该目录下所有文件和目录的信息(meta)

  • 每个文件/目录对应的信息就叫目录项, 目录项包含的内容也很简单, 主要就是文件名和指向该文件名的inode指针, 详细信息如下

偏移(16进制)字节数含义&解释
00-034字节inode节点号
04-052字节本目录项的长度字节数
061字节名字长度字节数
071字节文件类型
08~不定长度名字的ascii码

3.inode bitmap inode节点位图

  • 由于一个文件系统中会有许多的文件和目录,都需要inode。那么如何知道哪些inode块分配过了,哪些inode块可使用,就需要遍历一遍inode Table,为了提高效率,使用位图,将已分配的inode映射到bitmap中。
  • 默认inode节点位图和一个数据块的大小一样

4.block bitmap 数据块位图

  • 同样,那么多的数据块为了方便管理,使用数据块位图,默认数据块位图和一个数据块的大小一样

5.GDT Group Description table 块组描述表

  • 往往会将一个分区,分成多个块组,也是为了文件系统内部有方便管理。
  • 组描述符表中包含了所有组描述信息,每个块组占据32个字节。
  • 组描述符在每个块组中都会备份,但也有特殊情况,只在当块组号是3,5,7的幂的块组才保存(稀疏超级块)
  • 数据块位图,inode节点位图,inode节点表的起始位置都在组描述符中表示
偏移(16进制)字节数含义&解释
00~034块位图起始地址(块号)
04~074inode节点位图起始地址(块号)
08~0B4inode节点表起始地址(块号)
0C~0D2块组中空闲块数
0E~0F2块组中空闲inode节点数
10~112块组中的目录数
12~1F-未使用

6.Super block超级块
2-3号扇区(在文件系统第1024-2048字节处),包含各种meta信息

  1. 块大小, 每个块组包含块数, 总块数, 第一个块前保留块数, inode节点数, 每个块组的inode节点数
  2. 卷名, 最后挂载时间, 挂载路径, 文件系统是否干净, 是否要调用一致性检查标识
  3. 空间inode节点和空闲块的记录信息, 在分配inode节点和新块的时候使用

7.0-1扇区 引导扇区
如如果没有引导代码,则这两个扇区为空,全部用0填充

总结

如图书馆存书为例,如果一本本的跑遍整个图书馆,你肯定不会这么做。于是就有图书索引,这本书放在几楼,第几个书架。

然而,这么多书靠索引还是要找很久,于是就有分门目。而在文件系统中就是块组。大致区域就是一个分区,多个块组,用索引查找,索引存放在inode Table中,书本放在数据块中。

而inode bitmap和block bitmap是为了插入和删除的时候,更加快的找到那个数据块和inode存放块是否分配,便于文件系统管理

内容很多,刚刚这一遍下来,其实心里还没有清楚每一个区块的作用,还需要实际的例子来演示一把,由于怕篇幅过长,就放到下一篇啦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值