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 。

相关推荐
long3162 分钟前
MySQL 学习练习(配套 01 入门资料)
数据库·学习·mysql
Dontla20 分钟前
预置known_hosts如何防止中间人攻击(MITM)?(服务器公钥、服务器私钥)Runner、DNS污染、BGP劫持、同网络ARP欺骗、SSH握手
服务器·网络·ssh
Lonely 净土1 小时前
Rocky Linux 安装教程
linux·运维·服务器
数据库小学妹1 小时前
数据库等保三级和四级有什么区别?从访问控制到备份恢复的完整对比
数据库·安全·数据库安全·三级等保·等保合规·四级等保
看浪的路人2 小时前
第3讲:手写第一个 MCP Server(Python SDK)
jvm·数据库·oracle
大眼、不聚光3 小时前
5.mysql--主从同步安装部署
数据库·mysql
Yan_chen6663 小时前
SQL-LABS_Less18-20实战攻略
数据库·sql·web安全·网络安全
oradh3 小时前
Oracle RAC OCR维护操作总结
数据库·oracle·ocr·rac ocr维护·ocr维护·vote disk
snow@li4 小时前
HikariCP:高性能数据库连接池全景深入梳理
java·数据库
一个天蝎座的程序猿5 小时前
传统数据库迁金仓KES,空值问题差点让财务报表翻车
数据库