此條目需要补充更多来源。 (2018年8月9日)请协助補充多方面可靠来源改善这篇条目无法查证的内容可能會因為异议提出而被移除。致使用者:请搜索一下条目的标题(来源搜索:"Inode"网页新闻书籍学术图像),以检查网络上是否存在该主题的更多可靠来源(判定指引)。

inode (index node)是指在许多“类Unix文件系统”中的一种数据结构,用于描述文件系统对象(包括文件目录设备文件socket管道等)。每个inode保存了文件系统对象数据的属性和磁盘块位置[1]文件系统对象属性包含了各种元数据(如:最后修改时间[2]) ,也包含用户组(owner)和权限数据[3]

命名

Unix先驱丹尼斯·里奇[4],inode这个命名的来源可能是文件系统的存储组织为一个扁平数组,分层目录資訊使用一个数作为文件系统这个扁平数组的索引值(index)。

细节

Unix上的文件描述符、文件表与inode表 [5]

文件系统创建(格式化)时,就把存储区域分为两大连续的存储区域。一个用来保存文件系统对象的元信息数据,这是由inode组成的表,每个inode默认是256字节或者128字节。另一个用来保存“文件系统对象”的内容数据,划分为512字节的扇区,以及由8个扇区组成的4K字节的块。块是读写时的基本单位。一个文件系统的inode的总数一般情况下是固定的。这限制了该文件系统所能存储的文件系统对象的总数目。典型的实现下,所有inode占用了文件系统1%左右的存储容量。

文件系统中每个“文件系统对象”对应一个“inode”数据,并用一个整数值来辨识。这个整数常被称为inode号码(“i-number”或“inode number”)。由于文件系统的inode表的存储位置、总条目数量都是固定的,因此可以用inode号码去索引查找inode表。

Inode存储了文件系统对象的一些元信息,如所有者、访问权限(读、写、执行)、类型(是文件还是目录)、内容修改时间、inode修改时间、上次访问时间、对应的文件系统存储块的地址,等等。知道了1个文件的inode号码,就可以在inode元数据中查出文件内容数据的存储地址。

文件名与目录名是“文件系统对象”便于使用的别名。一个文件系统对象可以有多个别名,但只能有一个inode,并用这个inode来索引文件系统对象的存储位置。

Linux系统使用struct inode作为数据结构名称。BSD派生的系统,使用vnode名称,其中v表示“virtual file system”。

POSIX inode

POSIX 标准强制规范的文件系统的行为受到传统 UNIX 文件系统的深刻影响。可以用短语“文件序列号”来形容inode,定义为文件系统范围的唯一文件标识符。[6]上述的文件序列号和包含此文件的设备ID一起,在整个系统上对应唯一的文件。[7]

在POSIX系统上,可使用stat系统调用取得文件的下列属性:[7]

可以查询一个文件的inode号码及一些元信息。

推论

实际考虑

系统管理员使用的很多程序往往用inode号码来替代文件名来访问文件系统。例如磁盘完整性检查程序fsckpfiles。因此,inode号码与文件全路径名的互查是需要的。可以用find带参数选项-inumls带参数选项(-i做到。

参考文献

  1. ^ Tanenbaum, Andrew S. Modern Operating Systems 3rd. : 279. 
  2. ^ JVSANTEN. Difference between mtime, ctime and atime - Linux Howtos and FAQs. Linux Howtos and FAQs. [2020-01-20]. (原始内容存档于2020-09-21). 
  3. ^ Anatomy of the Linux virtual file system switch. ibm.com. [2020-01-20]. (原始内容存档于2018-10-02). 
  4. ^ Linux Kernel list archive页面存档备份,存于互联网档案馆). Retrieved on 2011-01-12.
  5. ^ Bach, Maurice J. The Design of the UNIX Operating System. Prentice Hall. 1986: 94. Bibcode:1986duos.book.....B. 
  6. ^ Definitions - 3.176 File Serial Number. The Open Group. [10 January 2018]. (原始内容存档于2013-04-29). 
  7. ^ 7.0 7.1 <sys/stat.h>. The Open Group. [15 January 2018]. (原始内容存档于2022-01-30). 
  8. ^ What is the Unix command to create a hardlink to a directory in OS X?. Stack Overflow. 16 Jan 2011 [5 Jan 2020]. (原始内容存档于5 January 2020). 

外部链接