inode 基础

在 Linux 和其他类 Unix 文件系统中,inode(索引节点,Index Node)是一个核心数据结构,用于存储文件或目录的元数据(metadata)。你可以将 inode 理解为文件的“身份证”,它记录了文件的基础信息和存储位置,但不包含文件名和文件内容本身


inode 的作用

  1. 存储元数据
    每个 inode 包含以下信息:

    • 文件类型(普通文件、目录、符号链接、设备文件等)
    • 权限(读、写、执行权限)
    • 所有者(User ID)和所属组(Group ID)
    • 文件大小
    • 时间戳(创建时间、最后访问时间、最后修改时间等)
    • 指向文件数据块的指针(即文件内容在磁盘上的位置)
    • 硬链接数量(即有多少个文件名指向此 inode)
  2. 唯一标识文件
    每个 inode 有一个唯一的编号(inode number),系统通过这个编号而非文件名来识别文件。


关键特性

  • 文件名与 inode 分离
    文件名存储在目录条目中,目录本质上是「文件名 → inode 编号」的映射表。因此:

    • 多个文件名(硬链接)可以指向同一个 inode。
    • 删除文件时,只有当硬链接数为 0 且没有进程占用时,inode 和数据块才会被释放。
  • inode 数量固定
    文件系统创建时,inode 的总数就确定了。如果 inode 耗尽(即使磁盘空间充足),也无法创建新文件。可通过 df -i 查看 inode 使用情况。


常见操作

  1. 查看 inode 编号

    1ls -i 文件名      # 查看文件的 inode 编号
    2stat 文件名       # 查看详细的 inode 信息
    
  2. 查找文件占用的 inode

    1find /路径 -type f -inum <inode编号>
    
  3. 检查 inode 使用情况

    1df -i            # 显示文件系统的 inode 使用情况
    

示例:硬链接与 inode

  • 创建硬链接:
    1ln 源文件 硬链接文件
    
    此时,两个文件名指向同一个 inode,硬链接数变为 2。删除任一文件名,inode 和数据依然存在,直到所有链接被删除。

总结

  • inode 是文件系统的基石,管理文件的元数据和存储位置。
  • 理解 inode 有助于解决“磁盘空间充足但无法创建文件”(inode 耗尽)等问题。
  • 文件名只是 inode 的别名,真正操作文件时,系统通过 inode 编号找到文件数据。