我发现在我的根目录下,有一些目录具有相同的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
任何给定文件的索引节点号对于文件系统来说都是唯一的,但对于给定主机上安装的所有文件系统来说不一定是唯一的。当你有多个文件系统时,你会看到文件系统之间有重复的索引节点号,这是正常的。