文件系统核心组件详解

		*--后面有个小结的表觉得乱可以先看看*

1. Boot Block (引导块)

  • 核心定位: 系统的启动入口,独立于文件系统。
  • 存储位置每个磁盘分区最开始的 512 字节。
  • 关键作用: 计算机开机后,BIOS/UEFI 会读取活动分区的 Boot Block,并将控制权交给存储在这里的一小段程序(引导加载程序,如 GRUB)。它负责找到并加载真正的操作系统内核。文件系统本身并不使用这块区域。

2. Super Block (超级块)”

  • 核心定位: 文件系统的“总控中心”,描述了整个文件系统的全局信息。
  • 存储位置: 通常位于 Group 0 的开头(在 Boot Block 之后)。关键: 由于它极其重要,文件系统会在多个块组(如 Group 1, Group n)中备份它的副本,以防主副本损坏导致整个文件系统无法挂载。
  • 关键作用: 记录了整个文件系统的宏观属性,例如:
    • 文件系统总大小是多少?
    • 每个数据块(Block)的大小是多少(如 4KB)?
    • 总共有多少 Inode、多少数据块、多少空闲的?
    • 文件系统的类型(ext4, xfs等)和状态(是否干净卸载)。

3. Group Descriptor Table (组描述符表)

  • 核心定位: 所有块组(Block Group)的索引和概要信息。
  • 存储位置: 紧跟在 Group 0 的 Super Block 之后。
  • 关键作用: 它不是一个单独的表,而是一个数组,数组中的每一项(一个组描述符)都对应一个块组,描述了该块组的详细信息:
    • 这个块组的 Inode Table 在哪个位置?
    • 这个块组的 Data Block Bitmap 和 Inode Bitmap 在哪个位置?
    • 这个块组里有多少空闲的 Inode 和数据块?
    • 操作系统通过查询这个表,就能快速定位到任何一个块组的管理结构。

4. Block Group (块组)

  • 核心定位: 文件系统为方便管理而划分的“子单位”,将大容量磁盘分成多个更易管理的小区域。
  • 存储位置: 从 Group 0 开始,依次排列,直到填满整个分区。
  • 关键作用
    • 提升性能: 相关文件的数据和Inode会尽量存放在同一个块组内,减少磁头寻道时间。
    • 冗余备份: 关键元数据(如Super Block)在多个块组中有备份。
    • 防止碎片化: 分散管理可以减少存储空间的碎片化。

每个块组内部,又包含以下组件:

5. Block Bitmap (块位图) & Inode Bitmap (Inode位图) - 分馆的“座位表”和“档案柜使用表”

  • 核心定位: 块组内部的资源分配状态图。
  • 存储位置: 每个块组内部的固定位置。
  • 关键作用
    • Block Bitmap: 一个很长的二进制位序列,每一位代表本块组内的一个数据块。1 表示该数据块已占用,0 表示空闲。需要存新文件时,系统快速扫描此位图找一个0位。
    • Inode Bitmap: 同理,每一位代表本块组内的一个Inode条目是空闲还是占用。

6. Inode Table (Inode表) ”

  • 核心定位: 存储文件/目录的元数据(描述数据的数据)。
  • 存储位置: 每个块组内部,在位图之后。
  • 关键作用: 每个文件或目录都唯一对应一个 Inode。每个 Inode 条目里记录了除文件名之外的所有信息:
    • 文件大小、权限(rwx)、所有者、所属组
    • 创建时间、访问时间、修改时间
    • 数据块指针:指向存储文件内容的Data Blocks的位置(直接指针、间接指针等)。

**7. Data Blocks (数据块) **

  • 核心定位: 实际存储文件内容或目录结构的地方。
  • 存储位置: 每个块组内部的最后一段空间。
  • 关键作用
    • 对于普通文件:这里存储的就是文件的真实内容(文本、图片代码等)。
    • 对于目录:目录本身也是一个文件,它的 Data Blocks 里存储的是一个简单的“表”,即该目录下的目录项,每个目录项由两部分组成:文件名 和 其对应的 Inode 编号

总结与关联

请添加图片描述

磁盘分区 → Boot Block → (Super Block + Group Desc Table) → 多个 Block Groups → (Bitmap + Inode Table + Data Blocks within each Group)。

当读取一个文件(如 /home/user/test.txt)时,文件系统会:

  1. 从根目录/的Inode找到其Data Blocks。
  2. 在Data Blocks中查找名为home的目录项,获取其Inode编号。
  3. 重复步骤1和2,依次找到usertest.txt的Inode编号。
  4. 找到test.txt的Inode,从中读取指向Data Blocks的指针。
  5. 最后从对应的Data Blocks中读取文件内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值