Linux 深入理解文件(Ext2文件系统:下)

ext2文件系统

有了前面对"块","分区","inode"这些概念的铺垫,接下来我们可以正式来讲文件系统了。

我们想要在硬盘上存储文件,必须先把硬盘格式化为某种格式的文件系统,而文件系统的目的就是组织和管理硬盘中的文件。在 Linux 中,最常见的就是 ext2 文件系统,后面发展出的 ext3 和 ext4 对 ext2 进行了增强,但其核心设计未改变,所以相对简单的 ext2 是了解文件系统很好的一个起点。

我们通过一个图来慢慢梳理文件系统中的各种关系:

可以看到,硬盘的一个分区有对应的文件系统管理,而文件系统之下,由分为不同的块组,也就是 Block Group ,每个块组中有着相同的结构,我们一个一个来看。

Super Block(超级块)

超级块存放着文件系统本身的结构信息,描述着整个分区的文件系统信息 。超级块的重要性毋庸置疑,所以为了保证文件系统在磁盘部分扇区出问题的情况下还能正常工作,超级块在每个块组中都可能有备份(第一个组块必须有)。

超级块中存放的信息主要有:bolck 和 inode 的总量,未使用的 bolck 和 inode 的数量,还有最近一次挂载的时间,最近一次写入数据的时间等。

GDT(Group Descriptor Table 块组描述符表

块组描述符表用来描述块组的属性信息,每个块组都有其对应的块组描述符表。我们说一个分区中有多个组块,而超级块是管理一个分区,GDT是管理一个组块,还是挺好区分的,就是大队长和小队长的关系。

GDT中的数据包括从哪里开始是 inode Table,从哪里开始是 Data Blocks 等。

Block Bitmap(块位图)

块位图中记录着 Data Block 中哪个数据块已经被占用,哪些没有。

inode Bitmap(inode位图)

inode位图中的每一个 bit 位表示一个 inode 是否空闲可用。

inode Table(inode 节点表)

inode 节点表里存放着文件的属性,是当前分区所有 inode 属性的集合。

它的编号以分区为单位,整体划分,不可跨分区,意味着一个分区内不存在相同的 inode 编号。

Data Blocks(数据区)

数据区中存放的就是文件的内容,数据区中有一个个数据块。

对于普通文件,文件的数据存储在数据块中。

对于目录,该目录下的所有文件名和目录名存储在该目录的数据块中(回答了上一篇博客中文件名如何处置的问题)。

Block 号也是按分区划分,不可跨分区,和 inode 一样在同一个分区中属于独一无二的存在。

总结

分区之后的格式化操作,就是对分区进行分组,在每个分区中写入 Super Block,GDT 等管理信息,这些管理信息统称为:文件系统。

只要知道文件的 inode 号,就能在指定分区中确定是哪一个分组,进而在分组中确定是哪一个inode 。

相关推荐
zylyehuo6 小时前
Linux 彻底且安全地删除文件
linux
SelectDB12 小时前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶13 小时前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵16 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils16 小时前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
用户8055336980319 小时前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户0340952979120 小时前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Databend2 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
Web3探索者3 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo3 天前
Linux系统中网线与USB网络共享冲突
linux