[ext4]04 磁盘布局 - Meta Block Groups】的更多相关文章

Meta Block Groups,可以翻译为元块组集. 如果不采用Meta Block Groups特性,在每个冗余备份的超级块的后面是一个完整的(包含所有块组描述符的)块组描述符表的备份.如前所述(group分析中已经说明,group最大为128M,即2^27 bytes),那么一个group全部存储groups元数据,才会有2^27 / 64=2^21个,更何况,也无法全部用来存储groups元数据.这样会产生一个限制,以Ext4的块组描述符大小64 Bytes计算,文件系统中最多只能有2…
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的in…
如果sparse_super特性flag被设置(即开启了sparse_super特性),那么super_block和组描述符的副本只会保存在group索引为0或3.5.7的整数幂. 如果没有设置sparse_super特性flag,super_block和组描述符的副本将保存在每一个group中. 创建一个5g的分区,格式化为ext4卷: root@ubuntu:~# mkfs.ext4 /dev/sdc mke2fs 1.42 (29-Nov-2011) /dev/sdc is entire…
ext4文件系统最基本的分配单元是"block"(块). block是由一组连续的sectors来组成,其大小介于1k~4K之间,当然不可能是任意值,只能是2的整数次幂个sectors.然后连续的blocks再组成group.Block的大小是在mkfs时指定的,默认是4K. 默认情况下,系统可以含有2^32个blocks,到那时如果开启"64bit"特性,可以支持2^64个blocks. 其相关指标见下图: Item 32-bit mode 1KiB 2KiB 4…
Ext4系统从设计上就认为数据局部性是文件系统的文件系统的一个理想品质. 在机械硬盘上,相关联的数据存放在相近的blocks上,可以使得在访问数据时减少磁头驱动器的移动距离,从而加快IO访问. 在SSD上,没有像磁头一样的移动组件.但是数据局部性可以增大请求大小从而降低请求数量.同时可以尽可能的集中擦写块,从而提高重写速度.对减少碎片也很有帮助. Ext4解决碎片问题的第一个方法是,multi-block allocator.当创建文件时,块分配器会分配8K的磁盘空间给文件,当然,这样做有个假定…
在linux系统中,任何一个文件,都有一个inode与其对应,也就是说,在一个文件系统中,一个文件都有唯一的ino来标示他,那么在ext4系统中,ino是如何确定的哪? 当我们新创建的文件或目录时,会调用ext4_create函数,其调用路径是:ext4_create -> ext4_new_inode.就是在函数ext4_new_inode定义了inode->ino. 分析函数ext4_new_inode相关部分 struct inode *__ext4_new_inode(handle_t…
从2012年开始,Ext4和jbd2的元数据中都开始加入checksums.特性标识是metadata_csum.Checksum算法是在super_block中指定: struct ext4_super_block { - __u8    s_log_groups_per_flex;  /* FLEX_BG group size */ __u8   s_checksum_type;  /* metadata checksum algorithm used */ - } 但是在当前版本(3.13…
Ext4预留了一些inode做特殊特性使用,见下表: inode Purpose 0 不存在,Ext4中不存在inode 0. 1 存放损坏的数据块链表 2 根目录 3 User quota. 用户quota索引 4 Group quota. 组quota索引 5 Boot loader. 6 Undelete directory. 未删除的目录 7 预留的块组描述符inode. (用于调整inode数目) 8 日志inode索引 9 The "exclude" inode, for…
延迟块组初始化,Ext4的新特性.如果对应的特性标识uninit_bg置位,那么inode bitmap和inode tables就不会初始化. 延迟块组初始化特性特性可以减少格式化耗时. 延迟块组初始化特性,默认是开启的. root@ubuntu:~# time mkfs.ext4 -F /dev/sdc - real    0m0.838s user    0m0.072s sys     0m0.328s root@ubuntu:~# debugfs /dev/sdc debugfs 1.…
在[磁盘布局 group部分]已经介绍过ext4的整体布局,其中存在两个与inode有关的名称:inode bitmap和inode table. Inode bitmap,用于表示inode table中对应的inode entry是否已经使用.Bitmap中每个位对应于一个table中inode entry.一个group中Inodebitmap只占用一个block,并且block所有的空间均用于标识inode的使用情况. Inode table至少存放sb.s_inode_size* sb…