了解Linux中ext2文件系统的磁盘布局
Linux ext2文件系统磁盘布局详解
ext2(Second Extended File System)是Linux早期广泛使用的文件系统,虽然现在大多被ext3/ext4取代,但理解其磁盘布局对学习Linux文件系统很有帮助。
ext2磁盘整体结构
ext2文件系统将磁盘划分为多个块组(Block Group),每个块组包含以下部分:
+-------------------------------+
| Boot Sector (可选) |
+-------------------------------+
| Superblock (超级块) |
+-------------------------------+
| Group Descriptors (块组描述符表)|
+-------------------------------+
| Data Block Bitmap (数据块位图) |
+-------------------------------+
| Inode Bitmap (inode位图) |
+-------------------------------+
| Inode Table (inode表) |
+-------------------------------+
| Data Blocks (数据块) |
+-------------------------------+
关键组成部分详解
1. 超级块(Superblock)
- 存储文件系统的全局信息
- 主要包含:
- 文件系统大小
- 块大小(通常1KB/2KB/4KB)
- 块组数量
- 空闲块和inode数量
- 挂载时间、写入时间等元数据
- 通常位于第一个块组开头,其他块组可能有备份
2. 块组描述符表(Group Descriptors)
- 描述每个块组的信息
- 每个描述符包含:
- 数据块位图位置
- inode位图位置
- inode表位置
- 空闲块和inode数量
- 目录数量等
3. 块位图(Block Bitmap)
- 每个块组一个
- 每个bit表示对应数据块是否被使用
- 1表示已使用,0表示空闲
4. inode位图(inode Bitmap)
- 每个块组一个
- 每个bit表示对应inode是否被使用
- 1表示已使用,0表示空闲
5. inode表(inode Table)
- 存储文件元数据和数据块指针
- 每个inode包含:
- 文件类型(常规文件、目录、符号链接等)
- 权限(rwx)
- 所有者UID/GID
- 大小
- 时间戳(创建、修改、访问)
- 数据块指针(12个直接指针+1个间接指针+1个双重间接指针+1个三重间接指针)
6. 数据块(Data Blocks)
- 实际存储文件内容或目录条目
- 目录数据块包含目录条目(dirent)列表:
ext2文件查找过程示例
- 通过路径
/home/user/file.txt
查找文件:
- 从根目录inode(通常为2号)开始
- 读取根目录数据块,查找"home"条目
- 获取home目录的inode号
- 读取home目录数据块,查找"user"条目
- 获取user目录的inode号
- 读取user目录数据块,查找"file.txt"条目
- 获取file.txt的inode号
- 通过file.txt的inode找到数据块位置
ext2的局限性
- 没有日志功能(ext3/ext4添加)
- 最大文件系统大小和文件大小有限制
- 性能不如后续版本
- 不支持扩展属性等现代特性
理解ext2的磁盘布局是学习Linux文件系统的基础,后续的ext3/ext4在其基础上增加了日志等功能,但基本结构保持相似。