Inode (索引节点)

2025年5月21日 | 阅读 6 分钟

在类UNIX的操作系统中,每个文件都由一个Inode索引。Inode是文件系统创建时生成的特殊磁盘块。文件系统中的文件或目录数量取决于文件系统中的Inode数量。

什么是inode?

“索引节点”缩写为“inode”。自Unix操作系统及其派生版本(如Linux和macOS)发布以来,它一直是文件管理的关键组成部分。通过使用独特且不可变的inode编号,文件系统中的inode的主要目的是在系统中引用、管理和定位特定文件。Inode是指定的`数据结构`,它使用元数据来管理和描述特定文件。使用的元数据将取决于文件系统的类型。

Inode包含以下信息

  1. 文件的属性(权限、时间戳、所有权详细信息等)
  2. 指向文件前12个块的指针的直接块数量。
  3. 一个指向索引块的单间接指针。如果文件无法被直接块完全索引,则使用单间接指针。
  4. 一个双间接指针,指向一个磁盘块,该磁盘块是索引块指针的集合。如果文件太大,无法被直接块和单间接指针完全索引,则使用双索引指针。
  5. 一个三间接指针,指向一个磁盘块,该磁盘块是`指针`的集合。每个指针单独指向一个磁盘块,该磁盘块还包含`指针`的集合,这些指针分别指向包含文件块指针的索引块。
os Inode

Inode的总大小

  • (磁盘块大小 / 磁盘块地址)是单个磁盘块中可以存储的最大磁盘块地址数。
  • 由于小文件只需要直接块,因此通常没有空间浪费或额外的磁盘访问。中等大小的文件可以使用间接块。
  • 双间接或三间接块仅用于非常大的文件,这很合理,因为这些文件已经很大了。现在,磁盘分为两类块:数据块和inode块。
  • 必须有一种方法来跟踪空闲的inode和磁盘块,以及找出inode的位置。Superblock负责这一点。Superblock在文件系统中的位置是固定的。为了防止在主Superblock损坏的情况下发生灾难性故障,Superblock通常会在磁盘上复制。
  • 索引分配系统存在一些与链接分配系统相同的性能问题。例如,数据块可能分散在分区中,但索引块可能存储在内存中。

Inode结构

os Inode

Inode如何工作?

Unix系统使用数据块来管理磁盘分区扇区,而不是集群。目录数据使用inode进行管理和引用,这与DOS系统使用的FAT表不同。如果数据以预定义的数据块形式存储在硬盘上,文件很快就会超出块的RAM。文件的其余部分然后保存在系统找到可访问的另一个块中。这时inode就派上用场了。

Inode确保可以通过引用和目录数据以及inode和唯一的inode编号来找到系统中保存的数据。它们独立于文件名,这是一个重要的优势。通过使用其原始inode编号,仍然可以找到已复制和重命名的文件。Hardlinks(由Linux用户在命令行中创建)就是这种类型的示例。这种内部簿记的好处是它不需要额外的RAM来访问备份或原始文件。

由于inode根据操作系统配置不同,一个文件可能比可用inode大。在这种情况下,原始inode会引用另一个具有剩余元数据的inode;这个inode通常被称为间接块。

哪些文件系统与inode兼容?

所有类Unix操作系统,包括Linux和MacOS,都使用inode。但是,inode的组成和结构可能因支持的文件系统而异。这里,ext2/ext3/ext4系统被用作表格或inode列表形式的描述性数据头。系统设置时,inode列表就建立好了,之后无法更改。此外,256字节的ext4 inode会占用硬盘空间,并且不能用于其他任何用途。使用自己的元数据,这种数据结构中的inode在每种情况下都指定一个文件或目录。

除此之外,还有xfs或btrfs等更复杂的`文件系统`,其中inode在需要查找文件时才被创建。在这种情况下,不会创建带有inode的列表或表。处理Linux内存的inode(核心inode)与磁盘inode之间的另一个区别在于它们的工作方式。

Inode和Vnode的区别

Inode (索引节点)Vnode
Inode包含与文件内容无关的文件元数据。Vnode的`特性`在文件的生命周期内保持不变。
作为一种磁盘上的结构,inode描述了文件在磁盘上的存储方式。Vnode是inode内存结构的一种抽象。
Inode不是内核数据结构。Inode在内核中由Vnode表示。
易于访问。与Inode相比,访问时间更长。
Inode永不失效Vnode并不总是可靠的。
它包含始终需要的信息,如管理员权限和保护。只有在打开文件时,Vnode才会存在。
Inode与分区内的唯一编号相关联。在分区中,Vnode没有唯一的编号。
然而,在UNIX操作系统中,它是一个数据结构。Vnode对象代表了UNIX内核内存中的文件接口。

如果inode不足会发生什么?

在某些情况下,如果您为其他文件拥有的inode不足,您可能会开始看到以下一些情况:

  • 应用程序故障
  • 数据丢失。
  • 意外重启
  • 进程在崩溃后无法恢复。
  • 计划的任务无法自行启动。

我们建议您如果inode容量确实已满,请创建更多可用空间。或者,您可以增加inode的最大数量,并进行重新组织文件系统的相当耗时的过程。

用例

  • Inode的概念对于恢复损坏的文件系统至关重要。丢失的inode位会根据其先前的`位置`出现在分区的lost+found目录中。
  • 读取文件所需的所有管理数据都存储在inode中。每个文件的元数据都存储在表结构中的inode里。

缺点

  • 由于inode信息与数据分开保存,因此在首次访问文件时,数据访问有时需要`长时间`的搜索。
  • 扫描目录时,共享目录中文件的inode不会被及时更新,这会导致性能下降。

总结

通过inode(索引节点)引用的文件或目录等文件系统对象称为inode(索引节点)。每个inode维护对象的磁盘块地址和数据`特征`。文件系统对象属性包含所有者和权限详细信息,以及元数据(最后更改、访问和修改时间)。本教程介绍了Inode及其如何用于存储服务器上的文件、目录、电子邮件、代码和其他`信息`。

常见问题

Q1. Inode的目的是什么?

Inode是一种Linux(和其他类Unix系统)数据结构,用于存储服务器上的文件、目录、电子邮件、代码和其他`信息`。文件和文件夹的数量与inode的数量直接相关。

Q2. 文件被删除时,inode会发生什么?

它们被标记为未使用,以便可以重用该inode编号和数据块。这使您能够仅通过inode结构中的信息快速获取数据。

Q3. 您的inode供应会用完吗?

文件系统可能会用完inode而`不会`用完磁盘空间,因为其inode计数是恒定的。(例如,一个1GB的光盘包含一百万个空文件。)即使您有足够的磁盘空间可用,所有的错误都表明磁盘空间有问题,这使得inode用完`非常`麻烦。


下一个主题空闲空间管理