[ext4]03 磁盘布局 – Flexible group分析
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 未本地化版本许可协议进行许可。
[ext4]03 磁盘布局 – Flexible group分析的更多相关文章
- [ext4]04 磁盘布局 - Meta Block Groups
Meta Block Groups,可以翻译为元块组集. 如果不采用Meta Block Groups特性,在每个冗余备份的超级块的后面是一个完整的(包含所有块组描述符的)块组描述符表的备份.如前所述 ...
- [ext4]01 磁盘布局 - block分析
ext4文件系统最基本的分配单元是"block"(块). block是由一组连续的sectors来组成,其大小介于1k~4K之间,当然不可能是任意值,只能是2的整数次幂个secto ...
- [ext4]07 磁盘布局 - 块/inode分配策略
Ext4系统从设计上就认为数据局部性是文件系统的文件系统的一个理想品质. 在机械硬盘上,相关联的数据存放在相近的blocks上,可以使得在访问数据时减少磁头驱动器的移动距离,从而加快IO访问. 在SS ...
- [ext4]06 磁盘布局 - 特殊inode
Ext4预留了一些inode做特殊特性使用,见下表: inode Purpose 0 不存在,Ext4中不存在inode 0. 1 存放损坏的数据块链表 2 根目录 3 User quota. 用户q ...
- [ext4]010 磁盘布局 - 如何查找inode的磁盘位置
在linux系统中,任何一个文件,都有一个inode与其对应,也就是说,在一个文件系统中,一个文件都有唯一的ino来标示他,那么在ext4系统中,ino是如何确定的哪? 当我们新创建的文件或目录时,会 ...
- [ext4]08 磁盘布局 - CheckSums
从2012年开始,Ext4和jbd2的元数据中都开始加入checksums.特性标识是metadata_csum.Checksum算法是在super_block中指定: struct ext4_sup ...
- [ext4]09 磁盘布局 - superblock备份机制
如果sparse_super特性flag被设置(即开启了sparse_super特性),那么super_block和组描述符的副本只会保存在group索引为0或3.5.7的整数幂. 如果没有设置spa ...
- [ext4]05 磁盘布局 - 延迟块组初始化
延迟块组初始化,Ext4的新特性.如果对应的特性标识uninit_bg置位,那么inode bitmap和inode tables就不会初始化. 延迟块组初始化特性特性可以减少格式化耗时. 延迟块组初 ...
- [ext4]磁盘布局 - group分析
ext4文件系统的磁盘布局是先把磁盘分成一个个相同大小的block块(每个block块的大小默认是4K),然后把这些block块合成一个个group. group大小最大为256M(默认为256M), ...
随机推荐
- omi-cli新版发布-升级webpack2和支持sass生成组件局部CSS
写在前面 omi-cli是Omi的命令行工具.在v0.1.X以及之前版本中,生成出来的项目脚手架 是基于webpack1的.由于: webpack1不支持tree-shaking,webpack2 支 ...
- HTML <form> 标签的 method 属性(20161028)
HTML <form> 标签的 method 属性 HTML <form> 标签 实例 在下面的例子中,表单数据将通过 method 属性附加到 URL 上: <form ...
- Jdom读取XML文件
学习Spring时,我们经常看到很多xml配置文件,Spring通过在配置文件中的配置,使用IOC(控制反转),从而实现代码的灵活性,本篇我就为大家介绍一种解析xml方式--Jdom 首先我们到Jdo ...
- iOS开发RunLoop
最近处于离职状态,时间也多了起来,但是学习还是不能放松,今天总结一下RunLoop,RunLoop属于iOS系统层的东西,还是比较重要的. 一.什么是RunLoop 字面意思看是跑圈,也可以看作运行循 ...
- "the hypervisor is not running" 故障
在我们日常服务器管理中,常常会遇到创建虚拟机,如果在一台新部署的 Hyper-V 上新建一个 Virtual Machine 时,出现错误信息:"The virtual machine co ...
- 关于DLL的学习
1.前言: 人总归还是要有梦想的,不然跟咸鱼有什么区别.这一周给自己定下了研究DLL的任务还是要逼自己完成的呀,上了一天的党校,游戏也不打在这里写博,心疼自己.话说为什么要给自己下这样一个任务呢,是因 ...
- 前端资讯周报 3.13 - 3.19: WebVR来了!以及如何优化scroll事件性能
每周一我都会分享上一周我订阅的技术站点中,和解决问题的过程中阅读到的值得分享的文章.这是迫使我学习的一个动力 本周推荐 Minecraft in WebVR with HTML Using A-Fra ...
- 用js写倒计时,向列表添加数据-------2017-03-21
一.单选按钮确定提交是否可用 <input id="a" type="radio" name="a" onclick="c ...
- 零件库管理信息系统设计--part03:管理员登录部分设计
兄弟们,我又回来啦! 上次我把表建完了.今天来点干货,我们用ssm框架来先简单实现一下管理员的登录功能. 在实现之前,我对user表(管理员表)做了些简单的修改,先来看看: 忽略哪些蓝色的马赛克和乱输 ...
- Struts2(二)之封装请求正文、数据类型转换、数据验证
一.封装请求正文到对象中(重点) 1.1.静态参数封装 在struts.xml文件中,给动作类注入值,使用的是setter方法 1.2.动态参数封装 通过用户表单封装请求正文参数 1.2.1.动作类作 ...