为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)?

you*_*iao 32 linux filesystems inode

我发现在我的根目录下,有一些目录具有相同的 inode 编号:

$ ls -aid */ .*/

2 home/ 2 tmp/ 2 usr/ 2 var/ 2 ./ 2 ../ 1 sys/ 1 proc/
Run Code Online (Sandbox Code Playgroud)

我只知道目录的名称保存在父目录中,而它们的数据保存在目录本身的 inode 中。

我在这里很困惑。

这就是我在跟踪路径名 /home/user1 时的想法。

  • 首先我进入inode 2,它是包含目录列表的根目录。
  • 然后我找到与 inode 2 配对的名称 home。
  • 所以我回到磁盘找到inode 2?
  • 我在这里得到了名称 user1?

ilk*_*chu 43

他们在不同的设备上。

如果我们查看 的输出stat,我们还可以看到文件所在的设备:

# stat / | grep Inode
Device: 801h/2049d      Inode: 2           Links: 24
# stat /opt | grep Inode
Device: 803h/2051d      Inode: 2           Links: 5
Run Code Online (Sandbox Code Playgroud)

所以这两个位于不同的设备/文件系统上。inode 编号仅在文件系统中是唯一的,因此这里没有任何异常。在 ext2/3/4 上,inode 2也总是根目录,所以我们知道它们是各自文件系统的根。

设备号 + inode 的组合在整个系统中可能是唯一的。(有些文件系统没有传统意义上的 inode,但我认为他们仍然必须在它们的位置伪造某种唯一标识符。)

那里的设备编号似乎与设备节点上显示的相同,因此/dev/sda1保存文件系统所在的/位置:

# ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 Sep 21 10:45 /dev/sda1
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 25

任何给定文件的 inode 编号对于文件系统都是唯一的,但不一定对于安装在给定主机上的所有文件系统都是唯一的。当您有多个文件系统时,您会在文件系统之间看到重复的 inode 编号,这是正常的。