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

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

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

$ ls -aid */ .*/

2 home/ 2 tmp/ 2 usr/ 2 var/ 2 ./ 2 ../ 1 sys/ 1 proc/

我只知道目录的名称保存在父目录中,它们的数据保存在目录本身的索引节点中。

我在这里很困惑。

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

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

答案1

他们在不同的设备上。

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

# stat / | grep Inode
Device: 801h/2049d      Inode: 2           Links: 24
# stat /opt | grep Inode
Device: 803h/2051d      Inode: 2           Links: 5

所以这两个位于不同的设备/文件系统上。索引节点号仅在文件系统中是唯一的,因此这里没有什么异常。在 ext2/3/4 索引节点 2 上也始终是根目录,所以我们知道它们是各自文件系统的根。

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

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

# ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 Sep 21 10:45 /dev/sda1

答案2

任何给定文件的索引节点号对于文件系统来说都是唯一的,但对于给定主机上安装的所有文件系统来说不一定是唯一的。当你有多个文件系统时,你会看到文件系统之间有重复的索引节点号,这是正常的。

相关内容