插件窝 干货文章 了解Linux中ext2文件系统的磁盘布局

了解Linux中ext2文件系统的磁盘布局

Inode 文件 数据 位图 926    来源:    2025-04-09

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)列表:
    • inode号
    • 条目长度
    • 名称长度
    • 文件名

ext2文件查找过程示例

  1. 通过路径/home/user/file.txt查找文件:
  2. 从根目录inode(通常为2号)开始
  3. 读取根目录数据块,查找"home"条目
  4. 获取home目录的inode号
  5. 读取home目录数据块,查找"user"条目
  6. 获取user目录的inode号
  7. 读取user目录数据块,查找"file.txt"条目
  8. 获取file.txt的inode号
  9. 通过file.txt的inode找到数据块位置

ext2的局限性

  • 没有日志功能(ext3/ext4添加)
  • 最大文件系统大小和文件大小有限制
  • 性能不如后续版本
  • 不支持扩展属性等现代特性

理解ext2的磁盘布局是学习Linux文件系统的基础,后续的ext3/ext4在其基础上增加了日志等功能,但基本结构保持相似。