关于文件分配

文件分配方式与元数据的变化

文件分配方式决定了文件数据块在磁盘上的组织方式。FCB 或 i-node 的一个核心功能就是提供这些数据块的物理地址映射。因此,不同的分配方式会要求 FCB/i-node 采用不同的结构来记录这些地址信息。

让我们逐一分析:

1. 连续分配 (Contiguous Allocation)

属性
文件类型 普通文件
权限 ...
... ...
起始块号 123 (文件从磁盘的第 123 块开始)
文件长度 (块数) 5 (文件占用 5 个连续的块)
... ...

2. 链接分配 (Linked Allocation)

属性
文件类型 普通文件
权限 ...
... ...
起始块号 123
结束块号 456 (可选)
文件长度 (字节) 10240
... ...
属性
文件名 MYFILE.TXT
... ...
第一个簇号 123 (指向 FAT 表中簇号 123 的条目)
文件大小 10240
... ...

3. 索引分配 (Indexed Allocation)

属性
文件类型 普通文件
权限 ...
... ...
直接块指针[0-11] 扇区 10, 扇区 11, ..., 扇区 21
一级间接块指针 扇区 100 (指向一个包含数据块指针的块)
二级间接块指针 扇区 200 (指向一个包含一级间接块指针的块)
三级间接块指针 扇区 300 (指向一个包含二级间接块指针的块)
文件大小 (字节) 50000
... ...

总结:

是的,文件分配方式的变化直接导致了 FCB/i-node 中记录文件物理地址方式的变化。 不同的分配方式有不同的优缺点,这些优缺点也直接反映在其元数据的组织方式上。

在文件系统中,FCB/i-node 是连接文件的逻辑视图(文件名、属性)和物理视图(数据块地址)的关键桥梁。因此,它们的结构设计必须能够有效地支持所选的文件分配方式。

不同的文件分配方式对应的“分配表”或机制

回顾我们之前讨论的三种基本文件分配方式:

  1. 连续分配 (Contiguous Allocation)

  2. 链接分配 (Linked Allocation)

  3. 索引分配 (Indexed Allocation)

FAT 文件系统是链接分配的一种典型实现,它将链接信息集中存储在一个独立的 FAT 表中。而对于其他分配方式,或者更现代的文件系统,它们有各自不同的“记录文件块位置”的方式:

1. 对于连续分配:

2. 对于索引分配 (例如:Unix/Linux 的 i-node 文件系统,如 ext2/3/4、XFS、ZFS 等):

3. 其他现代文件系统 (例如:NTFS, APFS, ZFS 等)

这些文件系统通常采用更为复杂和混合的分配策略,结合了连续分配、链接分配、索引分配的优点,并引入了更多高级特性(如日志、快照、数据完整性校验等)。


总结:

“文件分配表 (FAT)”这个名称和具体的表格结构是 FAT 文件系统特有的。

对于其他非 FAT 文件系统,虽然它们没有叫“文件分配表”的结构,但它们必然有:

文件系统存储其结构信息(控制信息/元数据)的方式

文件系统通常会将磁盘划分为几个逻辑区域,用于存放不同类型的信息。其中,用于存储控制信息的区域是文件系统的“大脑”。这些控制信息包括:

  1. 文件系统引导块 (Boot Block)

  2. 文件系统超级块 (Superblock)

  3. 空闲空间管理信息 (Free Space Management)

  4. 文件控制块 / i-node 区域 (FCB / i-node Area)

  5. 目录数据块 (Directory Data Blocks)

  6. 文件数据块 (File Data Blocks)

让我们逐一详细说明它们的作用和存储方式。


1. 文件系统引导块 (Boot Block)

2. 文件系统超级块 (Superblock)

3. 空闲空间管理信息 (Free Space Management)

4. 文件控制块 / i-node 区域 (FCB / i-node Area)

5. 目录数据块 (Directory Data Blocks)

6. 文件数据块 (File Data Blocks)


示例:Unix/Linux 文件系统(ext4)的磁盘布局简化示意图

以下是 ext4 文件系统一个分区(或文件系统)的简化逻辑布局:

区域名称 主要作用 内部主要组成部分(按顺序) 备注
0. 引导块 (Boot Block) 系统启动引导 包含引导加载程序(Boot Loader)代码。 通常位于分区的第一个扇区。只有可引导分区才有。
1. 超级块 (Superblock) 文件系统全局元数据 包含文件系统类型、大小、块/簇大小、空闲块/i-node 数量、根目录i-node号、文件系统状态等。 文件系统的核心。通常在多个块组中有副本以提供冗余。
2. 块组描述符表 (Group Descriptors Table) 描述每个块组的元数据 一个表格,每个条目描述一个块组的详细信息,例如:
- 块位图的起始位置
- i-node 位图的起始位置
- i-node 表的起始位置
- 空闲块数量
- 空闲 i-node 数量
紧随超级块之后。同样可能存在副本。
3. 块组 #0 (Block Group 0) 第一个数据管理单元 a. 块位图 (Block Bitmap): 位图形式,标记该块组内数据块的分配状态(空闲/已用)。
b. i-node 位图 (i-node Bitmap): 位图形式,标记该块组内 i-node 的分配状态(空闲/已用)。
c. i-node 表 (i-node Table): 该块组内所有 i-node 的集合,每个 i-node 存储一个文件/目录的元数据和数据块地址。
d. 数据块 (Data Blocks): 实际存储文件和目录内容的地方。
磁盘被划分为多个块组,这是第一个。
4. 块组 #1 (Block Group 1) 第二个数据管理单元 a. 块位图
b. i-node 位图
c. i-node 表
d. 数据块
结构与块组 #0 相同,重复出现,构成整个文件系统。
... (更多块组) 后续数据管理单元 ... (重复的块组结构) 数量取决于文件系统的大小。

表格补充说明:

这个表格清晰地展示了 ext4 文件系统在磁盘上的主要组成部分及其逻辑分布。

总结:

文件系统通过在磁盘上划分出专门的区域来存储其自身的控制信息(元数据),这些元数据包括引导信息、全局配置信息(超级块)、空闲资源追踪信息(位图/链表)、文件和目录的详细属性及物理位置信息(FCB/i-node),以及目录项本身。

这些控制信息相互关联,共同构成了文件系统的骨架,使得操作系统能够在复杂的磁盘结构上高效、可靠地管理和访问文件。