我不太明白包含 i 节点的表位于哪里。我的老师说每个物理磁盘都有一个i节点表,之后是文件的数据。但是,在互联网上,我发现每个目录都有自己的索引节点表以及与其内部文件关联的名称。
这两个表(概念)是不同的还是其中之一是错误的?
谢谢。
答案1
一种误解是 inode 不是物理磁盘的属性,而是某些磁盘的属性。文件系统。例如,FAT32 没有 inode。层次结构的简单总结如下:
物理磁盘包含许多部门。这些是磁盘上存储数据的物理位置。
物理驱动器一般分为分区。这些是磁盘上(逻辑上)连续的物理数据存储区域的逻辑分隔。
这些分区可以进一步划分为逻辑卷(与 LVM 一样),但这不是强制性的。如果实施的话,这些逻辑卷主要像分区一样工作,但允许更轻松地实施操作,例如(例如)添加更多容量。
分区(或逻辑卷)可以包含文件系统(例如 ext3fs、VFAT、hpfs)。每个文件系统都以自己的方式组织自己,以跟踪其组织结构等。许多通常部署到 Linux 主机上的文件系统(例如 ext?fs)使用 inode 来实现此目的或使用等效机制(例如 reiserfs)。
答案2
我的老师说每个物理磁盘都有一个i节点表,之后是文件的数据。
这基本上是正确的。更准确地说,每个文件系统上都有一个 inode 表,并且每个分区上都有一个单独的文件系统。 (事情可能会变得更加复杂,但我们不需要在这里陷入这些复杂的情况。)
文件系统的 inode 表映射索引节点号到文件元数据。它通常是一大组固定大小的结构。例如,该数组的元素号 1234 是索引节点号 1234。索引节点包含文件的权限、修改时间、文件类型等信息,以及文件内容所在位置的指示。
但是,在互联网上,我发现每个目录都有自己的索引节点表以及与其内部文件关联的名称。
这是一张映射表文件名到索引节点号。也就是说,目录是一个条目列表(或者一些更复杂的数据结构),列表中的每个元素都包含一个文件名和一个索引节点号。为了查找文件的元数据和内容,系统从目录中读取索引节点号,然后读取索引节点表中的指定条目。为了查找给定路径的文件,系统从根 inode 开始,发现它是一个目录,找到第一个元素的目录条目,读取其 inode,等等。
请注意,这是文件系统的典型设计,但不是唯一可能的设计。大多数面向 Unix 的文件系统都遵循这种设计,但也存在其他设计。