2022年了你还不懂,系统性学习Ext4文件系统,(图例解析)

本文深入探讨了Ext4文件系统的磁盘布局,包括磁盘布局、灵活块组(flex_bg)、元块组(Meta Block Groups)和特殊inodes等关键概念。详细介绍了数据块和inode的分配策略,强调了数据局部性对性能的影响。此外,还涵盖了日志(JBD2)和扩展属性(EA)等内容,为理解Ext4的底层工作原理提供了全面的知识。
摘要由CSDN通过智能技术生成

 目录

Ext4文件系统布局综述

1.磁盘布局

2.灵活块组(flex_bg)

3.元块组(Meta Block Groups)

4.懒惰块组初始化

5.特殊inodes

6.数据块和Inode分配策略

7. 超级块

8. 块组描述符

9. 数据块位图与inode位图

10. Inode表

11. 查找inode

12. inode.i_block0[]s的内容

13. 符号链接

14. 直接/间接块地址

15. Extent 树

16. Extent树数据块校验和:可能加入的新元数据

17. 目录项

18. 线性(经典)目录

19. 哈希树目录

20. 扩展属性EA

21. 日志(JBD2)

22. 布局

23. 数据块头

24. 超级块

25. 描述数据块Descriptor Block

26. 数据块Data Block

28. 提交块


一个的Ext4文件系统被分成一系列块组。为减少磁盘碎片产生的性能瓶颈,块分配器尽量保持每个文件的数据块都在同一个块组中,从而减少寻道时间。以4KB的数据块为例,一个块组可以包含32768个数据块,也就是128MB。

1.磁盘布局

EXT4文件系统的标准磁盘布局如下:

EXT4文件系统主要使用块组0中的超级块和块组描述符表,在其他一些特定块组中有超级块和块组描述符表的冗余备份。如果块组中不含冗余备份,那么块组就会以数据块位图开始。当格式化磁盘成为Ext4文件系统的时候,mkfs将在块组描述符表后面分配预留GDT表数据块(“Reserve GDT blocks”)以用于将来扩展文件系统。紧接在预留GDT表数据块后的是数据块位图与inode的表位图,这两个位图分别表示本块组内的数据块与inode的表的使用,索引节点表数据块之后就是存储文件的数据块了。在这些各种各样的块中,超级块,GDT,块位图,索引节点位图都是整个文件系统的元数据,当然的inode表也是文件系统的元数据,但是i节点表是与文件一一对应的,我更倾向于将索引节点当做文件的元数据,因为在实际格式化文件系统的时候,除了已经使用的十来个外,其他的inode表中实际上是没有任何数据 的,直到创建了相应的文件才会分配的inode表,文件系统才会在索引节点表中写入与文件相关的inode的信息。

2.灵活块组(flex_bg)

灵活块组(flex_bg)是从Ext4开始引入的新特性。在一个flex_bg中,几个块组在一起组成一个逻辑块组。flex_bg.Flex_bg的第一个块组中的位图空间和inode表空间扩大为包含了flex_bg中其他块组上位图和inode的表。

比如flex_bg包含4个块组,块组0将按序包含超级块,块组描述符表,块组0-3的数据块位图,块组0-3的索引节点位图,块组0-3的i节点表,块组0中的其他空间用于存储文件数据。同时,其他块组上的数据块位图,索引节点位图,索引节点表元数据就不存在了,但是SB和GDT还是存在的。


灵活的块组的作用是:

(1)聚集元数据,加速元数据载入;

(2)使得大文件在磁盘上尽量连续;

即使开启flex_bg特性,超级块和块组描述符的冗余备份仍然位于块组的开头。Flex_bg中块组的个数由2 ^ ext4_super_block.s_log_groups_per_flex给出。

3.元块组(Meta Block Groups)

通常,在每个冗余备份的超级块的后面是一个完整的(包含所有块组描述符的)块组描述符表的备份。这样会产生一个限制,以Ext4的块组描述符大小64字节计算,文件系统中最多只能有2 ^ 21个块组,也就是文件系统最大为256TB。

使用元块组Meta元组特性,每个块组都包含该块组自己的描述符的冗余备份。因此可以创建2 ^ 33个块组,也就是文件系统最大1EB.48位数据块, - 个块组128MB,因而可以创建2 ^ 33个块组。

元块组实际上是可以用一个块组描述符块来进行描述的块组集,简单的说,它由一系列块组组成,同时这些块组对应的块组描述符存储在一个块中。它的出现使得Ext3的和的Ext4的磁盘布局有了一定的变化,以往超级块后紧跟的是变长的GDT块,现在是超级块依然决定于是否是3,5,7的幂,而一个块组描述符块则存储在元块组的第一个,第二个和最后一个块组的开始处(见下图)


在两种情况下我们可能会用到这种新布局:

(1)文件系统创建时。用户可以指定使用这种布局。

(2)当前文件系统增长而且预留的组描述符块耗尽时。目前超级块中有一个域s_first_meta_bg用于描述第一个使用元块组的块组。

当增加新块组时,我们不需要给组描述符表预留空间,而是在当前文件系统后面直接添加新的元块组就可以了。

4.懒惰块组初始化

如果块组中的相应标志已设置,那么块组中的索引节点位图和索引节点表将不被初始化。这样可以减少mkfs的时间,如果开启了块组描述符校验和功能,甚至连块组都可以不初始化。

5.特殊inodes

EXT4预留了一些索引节点做特殊特性使用,见下表:

表1 Ext4的特殊inode

Inode号用途

0不存在0号inode

1损坏数据块链表

2根目录

3 ACL索引

4 ACL数据

5引导装载程序

6未删除的目录

7预留的块组描述符inode

8日志inode

11第一个非预留的inode,通常是lost + found目录

6.数据块和Inode分配策略

在机械磁盘上,保持相关的数据块相互接近可以总的磁头移动时间,因而可以加速磁盘IO。在SSD上虽然没有磁头转动,数据局部性可以增加每次IO请求的传输的数据大小,因而减少响应IO请求的传输次数。数据的局部性对单个擦除块的写入产生影响,可以加速文件重写的速度。因而尽可能减少碎片是必要的。inode和数据块的分配策略可以保证数据的局部集中。以下为inode和数据块的分配策略:

(1) 多块分配可以减少磁盘碎片。当文件初次创建的时候,块分配器预测性地分配8KB的磁盘空间给文件。当文件关闭的时候,未使用的空间当然也就释放了。但是如果推测是正确的,那么文件数据将写到一个多个块的extent中。

(2) 延迟分配。当一个文件需要更多的数据块引起写操

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值