Flexible Block Groups (flex_bg),我称之为“弹性块组”,是EXT4文件系统引入的一个feature。

所谓Flexible Block Groups,就是将连续的多个物理block groups绑在一起组成一个逻辑块组,这个逻辑块组就称之为Flex_group(也就是flex_bg)。

,那么group0将(按顺序)存放共superblock、group
descriptors、group0~3的data block bitmaps、group0~3的inode
bitmap,group0~3的inode tables,group0剩余的空间存放data(普通数据)。

大小设置:flex_bg = 2 ^ sb.s_log_groups_per_flex。

而之前EXT3系统,bitmaps (block bitmap, inode bitmap)及inode
table是分散在各个group中分别管理的。

Ext4将其全部集中起来,至少有两个好处:

(1)减少了磁盘寻道操作:将频繁访问的block group资源放到有磁盘上一块连续区域

(2)可以一次性分配更多block给一个extent/run:以前的group将磁盘空间划分为众多不连续的空间片段,从而导致一个分配请求最大能只申请到一个group所管理的blocks。以最常用的4K
BLOCK_SIZE来说,一个group最多能管理4K*8=32K个block(128M),但除去group本身的metadata
(bitmap blocks: 2  inodes table: (32768 * 128  + 4095)/4096 = 1024)个block空闲,如果此group包含spare_super,还要减去super_block所占用的一个block。

明白了上面的问题,再来看flex_bg的实现就比较容易了。在创建EXT4卷时,mke2fs会根据用户指定的flex
block group的幂,单位为group),将最前的flex_bg_size个groups集中起来管理。

个group:

[root@srv ~]# mke2fs -j -O flex_bg,extents,uninit_bg -G 256 -I 256 /dev/sdc

再用debugfs来查看新建EXT4卷group
descriptions:

[root@srv ~]# debugfs /dev/sdc1

debugfs:  stats 

Filesystem volume name:   <none> 

Last mounted on:          <not available> 

Filesystem UUID:          5be014f5-5a27-4cf1-81dc-d1f55e71dfdd 

Filesystem magic number:  0xEF53 

Filesystem revision #:    1 (dynamic) 

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file uninit_bg 

Filesystem flags:         signed_directory_hash 

……

Inodes per group:         8192 

Inode blocks per group:   512 

Flex block group size:    256 


Filesystem created:       Fri Jul  8 23:02:47 2011 

……

Directories:              2 

Group  0: block bitmap at 1025, inode bitmap at 1281, inode table at 1537 

           4089 free blocks, 8181 free inodes, 2 used directories, 8181 unused inodes 

           [Checksum 0x2e4a] 

Group  1: block bitmap at 1026, inode bitmap at 1282, inode table at 2049 

           0 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

           [Inode not init, Checksum 0x4578] 

Group  2: block bitmap at 1027, inode bitmap at 1283, inode table at 2561 

           4095 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

           [Inode not init, Checksum 0xa897]

……

Group 255: block bitmap at 1280, inode bitmap at 1536, inode table at 142337 

           32768 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

           [Inode not init, Block not init, Checksum 0xcd10] 

Group 256: block bitmap at 8388608, inode bitmap at 8388864, inode table at8389120 

           0 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

           [Inode not init, Checksum 0x42cd]

……

Group 2384: block bitmap at 75497552, inode bitmap at 75497808, inode table at75538944 

          23296 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

          [Inode not init, Checksum 0xd1d2]

可以看出,group 0-255的block bitmap,inode
bitmap,inode
bitmap结束。inodes talbe也同样。后面从group
256开始,又是常规的不连续方式。

个)都包含进flexible
block group:

[root@srv ~]# mke2fs -j -O flex_bg,extents,uninit_bg -G 4096 -I 256 /dev/sdc

启动debugfs来查看group
descriptions:

[root@srv ~]# debugfs /dev/sdc1

……

Inode blocks per group:   512 

Flex block group size:    4096 

Filesystem created:       Fri Jul  8 23:14:02 2011 

……

Directories:              2 

Group  0: block bitmap at 1025, inode bitmap at 5121, inode table at 9217 

           7511 free blocks, 8181 free inodes, 2 used directories, 8181 unused inodes 

           [Checksum 0xee4f] 

Group  1: block bitmap at 1026, inode bitmap at 5122, inode table at 9729 

           0 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

           [Inode not init, Checksum 0x255d] 

Group  2: block bitmap at 1027, inode bitmap at 5123, inode table at 10241 

           4095 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

           [Inode not init, Checksum 0x047e]

……

Group 2384: block bitmap at 3409, inode bitmap at 7505, inode table at 1265665 

           23296 free blocks, 8192 free inodes, 0 used directories, 8192 unused inodes 

           [Inode not init, Checksum 0x8406]

看得出,整个flexible block group被分隔三部分,第一部分是所有的block bitmap,第二部分是所有的inode
bitmap,最后是所有的inodes table。所有的表项都是连续存放于磁盘上的。

作者:Younger Liu,

本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。

最新文章

  1. Resharper让我们的asp.net开发效率提高三分之一
  2. Daily Scrum Meeting ——SeventhDay
  3. 锋利的JQuery —— 事件和动画
  4. HexDump.java解析
  5. poj 3237 Tree 树链剖分
  6. HDU 4607 Park Visit (DP最长链)
  7. A*算法深入
  8. ionic安装
  9. JAVA GUI学习 - JTree树结构组件学习 ***
  10. java中Integer比较需要注意的问题
  11. 克隆虚拟机 virtualbox 修改 uuid
  12. pycharm引入numpy报错:ImportError: Importing the multiarray numpy extension module failed. Most likely you are trying to import a failed build of numpy.
  13. Codeforces 600E. Lomsat gelral(Dsu on tree学习)
  14. JVM运行时数据区域解析
  15. LeetCode: Search in Rotated Sorted Array II 解题报告
  16. 关于ESXI5.0版本+ Broadcom BCM5720的BUG
  17. Git 入门使用
  18. Ip地址和子网掩码和CIDR无间别域间路由
  19. BZOJ 1567 Blue Mary的战役地图(二维hash+二分)
  20. ajax请求步骤

热门文章

  1. volatile关键字和synchronized关键字
  2. 构建高性能web站点-阅读笔记(一)
  3. 【笔记】归纳js getcomputedStyle, currentStyle 以及其相关用法
  4. 自适应滤波:最小均方误差滤波器(LMS、NLMS)
  5. QTP自动化测试培训:描述编程之WebElement
  6. ArcGIS API for JavaScript 4.2学习笔记[20] 使用参数查询要素(油井和地震关系)
  7. 【G】开源的分布式部署解决方案文档 - Web Deploy
  8. ajax 第四步
  9. Windows入门基础:2.vs2013中Icon显示
  10. js按值传递和按引用传递