Ext4文件系统是Ext3文件系统的升级版,所以在文件系统布局上与Ext3类似,不过对于每一个具体结构都有或多或少的改变,比如在超级块中增加了一些64位的参数;在块组描述符中增加了64位参数和校验和;在i-节点中比较重要的变化是用盘区结构替代了Ext3的直接块指针和间接块指针,另外还将时间的描述增加为纳秒级。Ext4文件系统的目录项相对于Ext3则没有发生改变。

因为Ext4文件系统的使用目前还不是太普及,所以为了节省篇幅本书只对超级块部分进行分析,其他结构将在笔者以后的书籍中详细讲解。

Ext4的超级块开始于文件系统的1024字节处,即2号扇区,其具体结构见表7-18。

表7-18 Ext4文件系统的超级块结构

字节偏移 字段长度(字节) 字段名和定义
0x00~0x03 4 i-节点总数
0x04~0x07 4 总块数(低32位)
0x08~0x0B 4 保留块数(低32位)
0x0C~0x0F 4 空闲块数(低32位)
0x10~0x13 4 空闲i-节点数
0x14~0x17 4 第一个数据块(即0号块组起始块号)
0x18~0x1B 4 块大小描述值
0x1C~0x1F 4 段大小描述值(与“块大小描述值”相同)
0x20~0x23 4 每块组包含的块数
0x24~0x27 4 每块组包含的段数
0x28~0x2B 4 每块组包含的i-节点数
0x2C~0x2F 4 最后挂载时间
0x30~0x33 4 最后写入时间
0x34~0x35 2 挂载次数
0x36~0x37 2 最大挂载数
0x38~0x39 2 签名值
0x3A~0x3B 2 文件系统状态(具体见表7-3)
0x3C~0x3D 2 错误处理方式(具体见表7-4)
0x3E~0x3F 2 次版本号
0x40~0x43 4 最后检查时间
0x44~0x47 4 强迫一致性检查的最大间隔时间
0x48~0x4B 4 创建文件系统的操作系统类型(具体见表7-5)
0x4C~0x4F 4 主版本号
0x50~0x51 2 用户ID保留块
0x52~0x53 2 组ID保留块
0x54~0x57 4 第一个非保留i-节点
0x58~0x59 2 i-节点大小
0x5A~0x5B 2 当前超级块所在块组
0x5C~0x5F 4 兼容性特征标志(具体见表7-6)
0x60~0x63 4 非兼容性特征标志(具体见表7-7)
0x64~0x67 4 只读兼容性特征标志(具体见表7-8)
0x68~0x77 16 卷的UUID(全局ID)
0x78~0x87 16 卷名
0x88~0xC7 64 最后挂载路径
0xC8~0xCB 4 位图算法
0xCC~0xCC 1 文件预分配块数
0xCD~0xCD 1 目录预分配块数
0xCE~0xCF 2 每块组为组描述符表保留块数(用于在线扩容)
0xD0~0xDF 16 日志的UUID
0xE0~0xE3 4 日志的i-节点
0xE4~0xE7 4 日志设备号
0xE8~0xEB 4 最后的孤立i-节点
0xEC~0xEF 4 Hash种子1
0xF0~0xF3 4 Hash种子2
0xF4~0xF7 4 Hash种子3
0xF8~0xFB 4 Hash种子4
0xFC~0xFC 1 默认Hash版本
0xFD~0xFD 1 保留
0xFE~0xFF 2 组描述符大小
0x100~0x103 4 默认挂载选项
0x104~0x107 4 第一个元数据块的块组
0x108~0x10B 4 文件系统创建时间
0x10C~0x14F 68 日志节点信息备份(具体见表7-9)
0x150~0x153 4 总块数(高32位)
0x154~0x157 4 保留块数(高32位)
0x158~0x15B 4 空闲块数(高32位)
0x15C~0x15D 2 i-节点所需最少字节数
0x15E~0x15F 2 为新i-节点保留字节数
0x160~0x163 4 其他标志
0x164~0x165 2 RAID跨距
0x166~0x167 2 MMP检查的时间间隔
0x168~0x16F 8 多次挂载保护块
0x170~0x173 4 RAID条带宽度
0x174~0x174 1 弹性块组大小
0x175~0x175 1 未用
0x176~0x177 2 保留
0x178~0x17F 8 总计写入的千字节数
0x180~0x3FF 640 保留