1. Ext2文件系统概述
Ext2(Second Extended File System)是Linux早期广泛使用的经典文件系统,虽然现在逐渐被Ext3/Ext4取代,但理解其设计原理仍然是掌握Linux存储系统的必修课。我在内核开发过程中发现,很多现代文件系统的优化思路都能在Ext2中找到原型。
与后来的日志型文件系统不同,Ext2采用静态分配策略,所有元数据结构在格式化时就已确定。这种设计虽然缺乏崩溃恢复能力,但结构清晰简单,特别适合用来学习文件系统的核心概念。我们团队在开发嵌入式存储方案时,仍会参考Ext2的磁盘布局思路。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 块组(Block Group)精析
2.1 块组物理结构
每个块组由以下关键部分组成(以4KB块大小为例):
code复制+---------------------+
| 超级块副本 (1 block) |
+---------------------+
| 块组描述符表 |
| (约2 blocks) |
+---------------------+
| 数据块位图 (1 block)|
+---------------------+
| inode位图 (1 block) |
+---------------------+
| inode表 |
| (约256 blocks) |
+---------------------+
| 数据块区域 |
| (剩余所有blocks) |
+---------------------+
提示:实际块数会根据磁盘大小动态调整,使用
dumpe2fs命令可查看具体分配情况
2.2 超级块(Superblock)关键字段
c复制struct ext2_super_block {
__le32 s_inodes_count; // 总inode数
__le32 s_blocks_count; // 总块数
__le32 s_r_blocks_count; // 保留块数
__le32 s_free_blocks_count;// 空闲块数
__le32 s_free_inodes_count
