日期:2014-05-16  浏览次数:20868 次

对话 UNIX: 关于 inode

对话 UNIX: 关于 inode

转自:http://www.ibm.com/developerworks/cn/aix/library/au-speakingunix14/

inode 是 UNIX 操作系统中的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。

?

有时,人们使用了一些不同的术语,如 inode索引编号 (inumber)。这两个术语非常相似,并且相互关联,但它们所指的并不是同样的概念。 inode 指的是数据结构;而索引编号实际上是 inode 的标识编号,因此也称其为 inode 编号 或者索引编号。索引编号只是文件相关信息中一项重要的内容。下一个部分将介绍 inode 中的其他一些属性。

?

inode 表包含一份清单,其中列出了对应文件系统的所有 inode 编号。当用户搜索或者访问一个文件时,UNIX 系统通过 inode 表查找正确的 inode 编号。在找到 inode 编号之后,相关的命令才可以访问该 inode ,并对其进行适当的更改。

?

例如,使用 vi 来编辑一个文件。当您键入 vi <filename> 时,在 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 中所示。


清单 1. 使用 df 来监视 inode 的使用

                
# df -k|head -6

Filesystem    1024-blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           229376    138436   40%     4730    13% /
/dev/hd2          8028160    962692   89%   110034    33% /usr
/dev/hd9var       1835008    366400   81%    25829    24% /var
/dev/hd3           524288    523564    1%       98     1% /tmp
/dev/hd1            32768     32416    2%        5     1% /home

?

如果由于某种原因,某个文件系统 inode 的使用率达到百分之百,那么您将无法在该文件系统中创建更多的文件、设备、目录等等。对于这种情况,一种解决方案是通过 smitty
chfs
命令为该文件系统添加更多的空间,如图 1 所示。另一种解决方案是创建较小的 inode 区段。现在,在增强的日志文件系统 (Enhanced Journal File System) 中,IBM AIX 5L 允许 inode 区段小于 16KB 的缺省大小。请记住,如果您在 AIX 5L 中使用这个选项,那么将无法从较早版本的 AIX 访问该文件系统。


图 1. smitty chfs 命令的结果