Skip to content

文件元数据与索引节点

考情分析

inode 属于文件管理基础知识,在 408 真题中常作为选择题考点出现,考查 inode 的内容、inode 与文件名的关系等。属于 🔥🔥 中高频考点。

文件的属性信息(大小、权限、位置……)总得有地方存,但如果全塞进目录项里,目录检索就会慢得离谱。inode 就是为了解决"元数据放哪儿"这个问题。

文件控制块 FCB

每个文件都有一个文件控制块(File Control Block, FCB),它是文件存在的唯一标志。FCB 中存储了文件的所有管理信息:

字段类别包含信息
基本信息文件名、文件物理位置、文件逻辑结构、文件物理结构
存取控制信息文件所有者、访问权限(读/写/执行)
使用信息创建时间、最后修改时间、最后访问时间、当前使用状态

FCB 的有序集合称为文件目录。一个 FCB 就是一个目录项

索引节点 inode

在 Unix/Linux 文件系统中,为了提高目录检索效率,将 FCB 拆分为两部分:

  • 目录项:仅保存 (文件名, inode 号) 的映射关系
  • 索引节点 inode:保存除文件名外的所有文件元数据。inode 就像房产证——记录了房子的面积、位置、权限等所有信息,但不包含房子里的家具(数据)
c
// inode 的典型结构(简化)
struct inode {
    uint16_t  i_mode;      // 文件类型与权限 (rwxrwxrwx)
    uint16_t  i_uid;       // 文件所有者 ID
    uint32_t  i_size;      // 文件大小(字节)
    uint32_t  i_atime;     // 最后访问时间
    uint32_t  i_mtime;     // 最后修改时间
    uint32_t  i_ctime;     // inode 修改时间
    uint16_t  i_links;     // 硬链接计数
    uint32_t  i_blocks;    // 占用的磁盘块数
    uint32_t  i_direct[12];    // 12 个直接块指针
    uint32_t  i_indirect;      // 一次间接块指针
    uint32_t  i_double_indirect; // 二次间接块指针
    uint32_t  i_triple_indirect; // 三次间接块指针
};

为什么要拆分

一个 FCB 可能占 64 字节甚至更多,而目录项只需 文件名 + inode 号(如 16 字节)。检索目录时只需要读取目录项,大大减少了磁盘 I/O:

方案目录项大小一个磁盘块可存储的目录项数
不使用 inode(完整 FCB)64B4096/64 = 64 个
使用 inode(文件名+inode号)16B4096/16 = 256 个

同样的磁盘块,使用 inode 后可存放的目录项数量翻了 4 倍,目录检索速度大幅提升。

磁盘 inode 与内存 inode

  • 磁盘 inode:存放在磁盘的 inode 区域中,是 inode 的持久化形式
  • 内存 inode:文件被打开时,将磁盘 inode 读入内存,增加一些管理字段

内存 inode 比磁盘 inode 多出的字段:

附加字段说明
inode 编号磁盘上不需要存(由位置隐含),内存中需要显式记录
引用计数当前有多少进程打开了该文件
状态标志inode 是否被修改过(脏位)、是否被锁定
设备号该 inode 所属的文件系统/设备

inode 编号与文件名的关系

一个关键概念:inode 中不包含文件名,文件名保存在目录项中

这意味着:

  • 一个 inode 可以对应多个文件名(硬链接)
  • 删除一个文件名只是删除一个目录项,inode 引用计数减 1
  • 只有当引用计数减为 0 且没有进程打开该文件时,才真正释放 inode 和数据块

这种"一个 inode 多个文件名"的机制,就是硬链接的基础,后面会详细展开。

考研高频考点

  • 🔥🔥🔥 inode 与目录项的拆分思想及其好处(减少目录检索 I/O)
  • 🔥🔥 inode 中包含哪些信息(不包含文件名)
  • 🔥🔥 磁盘 inode 与内存 inode 的区别
  • 🔥 inode 与硬链接的关系(一个 inode 对应多个文件名)
  • 🔥 给定 inode 大小和磁盘块大小,计算一个磁盘块能存多少 inode

知道了文件的元数据怎么组织之后,下一篇来看用户对文件的具体操作——open、read、write 这些系统调用背后发生了什么。

真题练习

相关真题(10题)

2025Q30选择题2分

文件创建:访问权限信息存在inode中而非目录项中

2023Q31选择题2分

关闭文件:释放内存中的索引节点副本,不删除外存inode

2022Q45综合题7分

综合题:索引节点的文件系统中目录、inode和多级索引的综合计算

2021Q32选择题2分

文件数量上限:由索引结点号4字节=32位决定,最多2³²个文件

2020Q30选择题2分

多级索引:计算直接+一级间接+二级间接的最大文件长度

2015Q29选择题2分

多级索引访问:直接索引访问1块,二级索引访问3块(2级索引+数据)

2014Q29选择题2分

打开文件:将FCB/inode读入内存,不读文件内容

2013Q26选择题2分

文件长度决定因素:inode总数与单个文件长度无关

2010Q31选择题2分

文件访问控制:存储在文件控制块(FCB/inode)中

2009Q30选择题2分

多级索引:4×256B+2×64×256B+1×64×64×256B=1057KB