两个独立文件系统上的两个文件可以共享相同的索引节点号吗?

两个独立文件系统上的两个文件可以共享相同的索引节点号吗?

如果我运行这样的命令:

find / -inum 12582925

这是否有可能列出位于不同安装文件系统(来自不同分区)上的两个文件,而这些文件恰好被分配了相同的编号? inode 编号在单个文件系统上还是在所有已安装的文件系统上是唯一的?

答案1

索引节点号仅在单个文件系统上是唯一的。您很快就会遇到的一个例子是 ext2/3/4 文件系统上的根 inode,它是 2:

$ ls -id / /home
2 /    2 /home

如果你运行(假设 GNU find

find / -printf "%i %p\n" | sort -n | less

在具有多个文件系统的系统上,您会看到很多很多重复的 inode 编号(尽管您需要对输出持保留态度,因为它还将包含硬链接)。

当您通过 inode 编号查找文件时,如果您只有一个起始路径,则可以使用find-xdev选项将其搜索限制在包含起始路径的文件系统:

find / -xdev -inum 12582925

只会在根文件系统上查找 inode 号为 12582925 的文件。 (-xdev也适用于多个起始路径,但在这种特殊情况下它的用处会降低。)

它是 inode 号和设备号的组合(在结构st_dev中,在 GNU 中)唯一地标识一个文件(在给定的系统上)。如果两个目录条目具有相同的 inode 和 dev 编号,则它们引用同一文件(尽管可能通过同一文件系统的两个不同挂载进行绑定挂载)。st_inostat%D %ifind-printf

某些find实现还具有一个-samefile谓词,可以查找具有相同设备和 inode 编号的文件。大多数[/test实现还有一个-ef运算符来检查两个文件路径是否引用同一个文件(尽管在符号链接解析之后)。

答案2

是的,相同的索引节点号可能会出现在不同的文件系统中。如果要指定确切的值,则不仅需要 inode 编号 (st_ino),还需要 inode 所在的设备(st_dev,本身由 dev_major — 设备的通用类 — 和 dev_minor — 特定实例 — 组成)。

这对夫妇(st_dev,st_ino)将要识别特定文件(至少如果您不卸载该 inode 所在的文件系统)。

如上所述索引节点(7):

inode所在设备

每个 inode(以及关联的文件)都驻留在设备上托管的文件系统中。该设备通过其主 ID(标识设备的通用类别)和次要 ID(标识通用类别中的特定实例)的组合来标识。

索引节点号

文件系统中的每个文件都有一个唯一的索引节点号。索引节点号保证是仅在文件系统内唯一(IE,不同的文件系统可能使用相同的索引节点号,这就是硬链接不能跨越文件系统边界的原因)。

相关内容