EXT4文件系统的磁盘布局

EXT4文件系统的磁盘布局

一.磁盘空间的计算

EXT4文件系统是从EXT2/EXT3文件系统上继承和发展而来的,EXT4也使用EXT2/EXT3的一些元数据的概念,如超级块,块组描述符,块组位图,节点位图,节点数据,在EXT2/EXT3中还有间接数据块,EXT4的节点如果不用content结构的话,也应该有间接数据块的概念,因为EXT4在某些情况下会与EXT3文件系统兼容。

EXT2/EXT3/EXT4文件系统中一个块组最大为128M,块组描述符在EXT2/EXT3中为32个字节,在EXT4中为64个字节;下面就专门讨论EXT4的情况。在EXT4中,支持的最大块组数为2^21 个,是这样计算出来的,块组数最多时其块组描述符占用满一个块组,一个块组大小为128M, 即块组数为128M/64= 2^27/2^6= 2^21;所以支持的最大空间数为2^21X128M= 2^21x2^27=2^48=256T,即为文件系统磁盘的最大空间。

为了突破256T空间的限制,引入了meta_block_group的方法;在该方法中将多个块组组成一个meta_block_group。那个数为多少呢?组成的方法如下,在meta_block_group中拿出一个数据块来存储块组描述符,数据块大小假设现在的大小是4K,块组描述符就描述本meta_block_group中的块组,那一个meta_block_group中的块组个数可以是4K/64=2^12/2^6=2^6=64,即为64个块组。这样,块组数就不受空间大小的限制了,空间不够只要在最后加上去就可以了;因此,磁盘寻址的时候,48个bit的地址空间(两个32bit的地址组合起来,可以是64bit,但是现在只支持到48bit)就都可以利用起来,磁盘空间块大小为4K的话,总的寻址空间就可以有2^48X4K= 2^48X2^12=2^60=1EB,所以这是EXT4文件系统的最大的空间。

二.Flexibleblock group

在生成EXT4文件系统时可以加入特性flex_bg参数,生成的文件系统就支持flexibleblock group的特性。原来每个块组中都有描述该块组内部的数据块位图,节点位图,节点表;引入该特性后,每个块组中这些数据就被移动到第一个块组中去了,后面的块组就没有数据块位图,节点位图,节点表了,就剩下数据块了,不过偶尔会插入块组描述符和备份的超级块了,他们会在块组的开头。这样就使数据块部分紧密的联系在一起,保证大文件存储的高效性。

一个flexible blockgroup中块组的个数,是由超级块中该变量定义的s_log_groups_per_flex,个数为2^s_log_groups_per_flex。现在假设取4,那么2^4=16,即一个flexibleblock group中有16个块组,那么其结构如下:

                                                                                                                                                                                   

                                                                                                                                          

                                                                                                         

A:super block超级块

B:block group des 磁盘上所有块组的块描述符

C:data block bitmap 块组0-15的所有数据块的使用位图

D:inode bitmap 块组0-15的所有节点表的使用位图

E:inode table  块组0-15的的所有节点表

F:Block data 块组0-15的数据块。

A,B,C,D,E的位置是在块组0上的,而F数据块是块组0中剩下的部分和块组1到块组15,在块组1-块组15的开头有时有超级块的备份或者块组描述符的备份,余下全部为数据块。

三.meta block group

在生成EXT4文件系统的时候,如果使用了特性meta_bg,则文件系统就支持meta block group的格式。如上文计算,如果磁盘块大小为4K,一个meta block group支持的块组数值为64个块组,具体结构如下:


                      附: SB  超级块

                           GDT属于本meta block group的块组描述符

                           BB 该块组的数据块位图

                          IB  该块组的节点位图

                          IT  该块组的节点表

                          DATA BLOCKS该块组的数据块

值得指出的是在块组0到块组63组成的一个meta block group中,只有三个块组中保存了属于本meta block group的块组描述符,保存的位置在块组0,块组1和块组63,也在上表的表现出来了。

 

四.flexible block group结合metablock group

在生成EXT4文件系统的时候,使用的特性结合了meta_bgflexible_bg,那么磁盘的布局与单个参数的情况有点不一样了。假设磁盘块大小为4Ks_log_groups_per_flex4,那么如上文分析的,flexible block group16个块组一个单位,meta block group64个块组为一个单位,两者结合的结构如下:

 

如上图所示,在一个metablock group中,共有64个块组,里面又细分为4flexible block group,每个flexible block group又包含16个块组,得16X464个块组。

对于总的64个块组中,其保存了metablock group的特性,块组0包含超级块,本group的块组描述符,BB, IB, IT;块组1同样包含超级块,本group的块组描述符;块组63,包含本group的块组描述符。

对于细分的4flexibleblock group,第一个flex_bg,块组0到块组15;第二个flex_bg,块组16到块组31;第三个flex_bg,块组32到块组47;最后一个flex_bg,块组48到块组63;对于具体的每个小组,以第一个flex_bg为例,块组0BB是块组0-15的数据块位图,IB是块组0-15的节点位图,IT是块组0-15的节点表,以下皆为数据块。

五.其他

    在生成EXT4文件系统中,如果使用了特性uninit_bg,有的块组就不会被初始化,磁盘格式化的速度会加快。四中的flexible block group结合meta block group的情况,假设块组1没被初始化,但是SBGDT会写入块组1,后面的数据没被初始化,该块组也不会被加入到flexible block group中去,放入flexible block group的块组会跳过未初始化的块组1,选择下个块组,比如初始化的块组2,以下类推,未初始化的跳过。

    如果使用了sparse_super参数,备份的超级块会出现在3,5,7为幂的块组中,其他块组中不会出现。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值