1. 关于本书

本文档试图描述ext4文件系统的磁盘格式。同样的一般思想也应该适用于ext2/3文件系统,尽管它们不支持ext4支持的所有特性,并且字段会更短。

注意:这是一项正在进行的工作,基于作者 (djwong) 在手工拆解文件系统时所做的笔记。数据结构定义应该与 Linux 4.18 和 e2fsprogs-1.44 一致。欢迎所有意见和更正,因为毫无疑问,有很多知识可能无法在新建的演示文件系统中反映出来。

1.1. 许可证

本书在 GNU 公共许可证 v2 的条款下获得许可。

1.2. 术语

ext4 将存储设备划分为逻辑块数组,以减少簿记开销并通过强制更大的传输大小来提高吞吐量。一般来说,块大小将为 4KiB(与 x86 上的页面大小和块层的默认块大小相同),尽管实际大小计算为 2 ^ (10 + sb.s_log_block_size) 字节。 在本文档中,磁盘位置以这些逻辑块(而不是原始 LBA)而不是 1024 字节块表示。 为了方便起见,逻辑块大小将在本文档的其余部分中称为 $block_size

当在 预格式化 文本 块中引用时,sb 指的是超级块中的字段,inode 指的是 inode 表条目中的字段。

1.3. 其他参考资料

另请参阅 https://www.nongnu.org/ext2-doc/,其中包含大量关于 ext2/3 的信息。 这是另一个旧的参考资料:http://wiki.osdev.org/Ext2