对话 UNIX: 关于 inode

inode 是 Unix 操作系统中的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息 。在 UNIX 中创建文件系统时,同时将会创建大量的 inode。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表 。
有时,人们使用了一些不同的术语,如 inode 和索引编号 (inumber) 。这两个术语非常相似,并且相互关联,但它们所指的并不是同样的概念 。inode 指的是数据结构;而索引编号实际上是 inode 的标识编号,因此也称其为 inode 编号 或者索引编号 。索引编号只是文件相关信息中一项重要的内容 。下一个部分将介绍 inode 中的其他一些属性 。
inode 表包含一份清单,其中列出了对应文件系统的所有 inode 编号 。当用户搜索或者访问一个文件时,UNIX 系统通过 inode 表查找正确的 inode 编号 。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改 。
例如,使用 vi 来编辑一个文件 。当您键入 vi 时,在 inode 表中找到 inode 编号之后,才允许您打开该 inode。在 vi 的编辑会话期间,更改了该 inode 中的某些属性,当您完成操作并键入 :wq 时,将关闭并释放该 inode。通过这种方式,如果两个用户试图对同一个文件进行编辑, inode 已经在第一个编辑会话期间分配给了另一个用户 ID (UID),因此第二个编辑任务就必须等待,直到该 inode 释放为止 。
inode 的结构
对于经验丰富的 UNIX 开发人员或者管理员来说, inode 的结构相对比较简单,但是可能还有一些您尚不了解的、令人惊讶的有关 inode 的内幕 。下面的定义仅给出了 inode 中所包含的、UNIX 用户经常使用的一些重要信息:
inode 编号
用来识别文件类型,以及用于 stat C 函数的模式信息
文件的链接数目
属主的 UID
属主的组 ID (GID)
文件的大小
文件所使用的磁盘块的实际数目
最近一次修改的时间
最近一次访问的时间
最近一次更改的时间
从根本上讲, inode 中包含有关文件的所有信息(除了文件的实际名称以及实际数据内容之外) 。可以在 AIX 的 Header 文件 /usr/include/jf/ino.h 中、或者 Web 页面 http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.files/doc/aixfiles/inode.h.htm 中可以找到完整的 inode 结构 。
以上所列举的信息对于文件来说非常重要,并且在 Unix 中频繁使用 。如果没有这些信息,那么文件将被认为遭到破坏和不可用 。
与其他的操作系统相比,UNIX 系统中的目录和文件可能看起来有所不同,但事实并非如此 。在 UNIX 中,目录本身就是文件,只是在它们的 inode 中使用了一些附加的设置 。目录 本质上就是一个包含了其他文件的文件 。另外,其模式信息中设置了一些相应的标志,以告知系统该文件实际上是一个目录 。
使用 inode
了解如何在 UNIX 中使用 inode 可以节约大量的时间,并提高工作效率 。在尚未了解 inode 之前,您可以使用下面的命令,以减少可能碰到的问题 。
df 命令
如前所述,当您在 UNIX 中创建一个文件系统时,将为 inode 表分配大约百分之一的总磁盘空间 。每次在文件系统中创建一个文件时,都会为该文件分配一个 inode。通常,与一个文件系统相关联的 inode 的数目足够多,但耗尽 inode 的可能性始终存在 。要监视是否发生了这种情况,您可以观察 df 的输出 。
使用 df 命令,您可以查看所有已挂载的文件系统或者特定的文件系统 。在该命令的输出中,您可以查看各个文件系统中已使用的 inode 的数目,以及文件系统中总体使用情况百分比,如清单 1 中所示 。

推荐阅读