[ext4]03 磁盘布局 – Flexible group分析
Flexible Block Groups (flex_bg),我称之为“弹性块组”,是EXT4文件系统引入的一个feature。 所谓Flexible Block Groups,就是将连续的多个物理block groups绑在一起组成一个逻辑块组,这个逻辑块组就称之为Flex_group(也就是flex_bg)。 在一个Flex_group中,第一个物理block group是存放当前Flex_group的bitmap、inode表。比如Flex_group大小是4,那么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),还能剩下31742个block空闲,如果此group包含spare_super,还要减去super_block所占用的一个block。 明白了上面的问题,再来看flex_bg的实现就比较容易了。在创建EXT4卷时,mke2fs会根据用户指定的flex block group大小(flex_bg_size必须为,2的幂,单位为group),将最前的flex_bg_size个groups集中起来管理。 指定flex_bg_size为256个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? …… Group 255: block bitmap at?1280,inode bitmap at?1536,inode table at?142337? Group 2384: block bitmap at?75497552,inode bitmap at?75497808,inode table at75538944? 可以看出,group 0-255的block bitmap,inode bitmap及inodes table是连在一起的,如block bitmap是从1025开始到1280,inode bitmap则从1281开始,直到1536结束。inodes talbe也同样。后面从group 256开始,又是常规的不连续方式。 不妨再做个实验,将指定flex_bg_size设为4096,将所有group(共2385个)都包含进flexible block group: [root@srv ~]# mke2fs -j -O flex_bg,uninit_bg -G 4096 -I 256 /dev/sdc 启动debugfs来查看group descriptions: …… Group 2384: block bitmap at?3409,inode bitmap at?7505,inode table at?1265665? 看得出,整个flexible block group被分隔三部分,第一部分是所有的block bitmap,第二部分是所有的inode bitmap,最后是所有的inodes table。所有的表项都是连续存放于磁盘上的。
作者:Younger Liu, 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |