首页 > 代码库 > aix i节点

aix i节点

文件系统与inode
? UNIX文件系统有很多种类型,如HFS,NFS,JFS,CDFS。虽然文件系统种类很多,但是也有着一些相同的数据结构:超级块、inode、目录等等。
? inode译成中文就是索引节点,它用来存放文件及目录的基本信息,包含时间、档名、使用者及群组等。

inode数据结构
作为一种数据结构,inode主要包括以下信息:
? inode 编号
? 用来识别文件类型,以及用于 stat C 函数的模式信息
? 文件的链接数目
? 属主的 UID
? 属主的组 ID (GID)
? 文件的大小
? 文件所使用的磁盘块的实际数目
? 最近一次修改的时间
? 最近一次访问的时间
? 最近一次更改的时间

inode数据结构文件
? 从根本上讲, inode 中包含有关文件的所有信息(除了文件的实际名称以及实际数据内容之外)。可以在 Header 文件 /usr/include/jf/ino.h 中或者 Web 页面 中可以找到完整的 inode 结构。

inode块
? 在 UNIX 中创建一个文件系统时,将为 inode 表分配大约百分之一的总磁盘空间。这个百分之一的空间就是inode块。
? inode块中包括所有inode节点。当系统创建了一个文件时,系统就会从这个块中给这个文件分配一个Inode结点。在这个结点中存储了这个文件的大部分属性,如创建、修改时间等等。但是,有两个属性不包含在这个inode结点中,分别为文件名与结点号。——后者原因是因为inode节点按顺序排列,所以系统内核就可以采用简单的算法,就可以得出inode节点号。

inode与磁盘
? inode结点中还存储着一个重要的,就是保存了一个包含13-15位指针元素的数组,这些指针是磁盘块区的地址。
? 这些指针非常的重要。操作系统就是依靠这些指针在硬盘上定位相关的文件,并读取它。

inode优点
? inode不光有别的文件系统数据结构的一些特点,而且由于一些文件的属性都保存在Inode结点中,为此一些命令在获取这些属性的时候,是不需要打开文件的。比如在编写一个文件备份程序,就需要用到inode节点中的修改时间这个属性。此时可以利用相关的命令直接从inode结点中去获取,而不需要打开对应的文件去得知这个。为此在Unix操作系统中文件备份程序的执行效率会比较高,实现起来也相对简单一点。

有关inode的问题
之前说过的inode的两个关键属性:inode编号和inode中的指针数组,假如这两个属性出现问题,很可能会造成很大的灾难。
? 正常情况下,inode编号是不会出现问题的。但是假如由于意外断电或者其他原因的话,有可能会发生一些故障。如可能一个inode结点在系统中已经被创建,但是其没有被正常使用,或者可能块号超出了范围。这些故障会给操作系统留下安全隐患。
? 另外因为一些意外的操作也会使得inode中的指针地址出现错误。有时候这会非常的严重。如一些文件无法读取等等。假如这些文件不幸的是系统的一些配置文件,那么就会导致系统的崩溃。假如这些指针地址出现错误,则文件名仍然会显示在操作系统中。但是假如用户试着去打开这些文件时,系统却会告知无法打开这些文件。

如何解决
? 如果碰到之前说过的问题,可以使用fsck命令来尝试解决。对于inode编号错误, fsck可以修复inode结点中的错误。而对于后者,如果指针指向的文件损坏的不是很严重,那么操作系统内内核会为其再建立一个链接。但是假如原文件损坏的比较厉害了,无法再重新读取。则系统会建立用户删除这个文件。

总结
? 从上面的这些分析中可以看到,inode结点是Unix操作系统中文件的核心,也是操作系统与硬盘中存储的数据的一个中介者。假如这个结点出现错误的话,那么硬盘中存储的数据块就似乎是无主的流浪者,无法被用户所采用。
? 另外我们平时删除文件,其实只是删除了与文件的联系。所以通过一些恢复工具仍然可以恢复被删除了的文件。假如需要真正删除文件的话,就需要格式化硬盘或者复制大文件把其覆盖掉。只有如此硬盘中存储的数据块才会被真正的删除掉。
? 最后需要说明的是,按照正常的关机程序来关闭Unix操作系统,是保护inode结点的最好措施。忽然断电或者其他意外事故,是inode结点的最大杀手。