什么是索引节点?

什么是索引节点?

可能的重复:
什么是超级块、索引节点、目录项和文件?

Unix 文件系统的文档通常包含术语“inode”。那是什么以及有什么作用?为什么 DOS/Windows 文件系统没有 inode(或者确实有)?

答案1

“inode”是一个非正式术语,指的是 Unix 文件系统用来保存与单个文件相关的信息的任何磁盘数据块。传统上,“inode”保存保存文件实际内容的磁盘块的块号。传统上,目录条目保存文件名、文件类型等。这两块数据是分开的。

也就是说,很多 Unixy 的东西都从其中消失了。传统上,文件名不是索引节点的一部分。文件名来自一个“目录”,一个将文件名与索引节点号相匹配的文件(有自己的索引节点和内容)。 C 预处理器宏允许代码通过很少的计算从索引节点号转到磁盘块。

因此,许多名称可以引用同一个索引节点。硬链接由此产生。拥有“.”的能力也是如此。始终引用当前目录而不用欺骗。目录总是包含“.”和“..”文件名,分别对应目录本身的inode号以及该目录所在的目录。 “。”和“..”文件名在每个目录中都有条目。它们并不是文件系统代码中真正没有数据的特殊情况。

Unix 文件的层次结构来自 inode。磁盘本质上是一定大小的“块”的线性阵列,512 字节、1 KB、4 KB 等等。索引节点 0 总是位于指定的磁盘块上,使得 Unix 内核只需知道“索引节点 0”就可以找到文件系统的根目录,并且它可以将“/”与索引节点 9 关联起来。索引节点 0 也是一个目录文件。 “usr”、“bin”、“tmp”、“dev”等在 inode 0 中有条目。因此 inode 允许将磁盘中的数据块的线性列表映射到分层结构。

索引节点位于磁盘上。在最初的 unix 文件系统中,磁盘的前三分之一或四分之一是 inode。其余的是数据块,根据需要分配给文件,其磁盘块号以索引节点结束。多年来,各种文件系统(例如 BSD FFS)试图通过将 inode 区域放置在磁盘上的不同位置来考虑磁盘的实际物理几何结构。

Winodws NT“NTFS”文件系统具有与索引节点直接类似的东西:主文件表中的条目。 NTFS 似乎继承了其祖先 DEC VMS Files-11 的这一点。 Files-11“文件头”看起来与 $MFT 中的条目几乎相同。

我对其他 Windows/DOS 文件系统(FAT、FAT32 等)一点也不熟悉,但文件分配表中的记录对我来说似乎是组合目录项和索引节点的类似物。我认为将命名和层次结构与磁盘块数据相结合是 FAT 文件系统如此脆弱的原因。您无法让程序梳理磁盘上单独的 inode 数据并将其找到的文件放入“丢失+找到”中 - 一旦文件分配表损坏,文件数据中的块成员资格就会丢失,以及文件中的文件成员资格也会丢失。目录。

相关内容