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


31

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

$ ls -aid */ .*/

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

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

我在这里很困惑。

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

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

Answers:


39

它们在不同的设备上。

如果查看的输出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上,inode 2 也始终是根目录,因此我们知道它们是各自文件系统的根目录

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

那里的设备编号似乎与设备节点上显示的编号相同,因此/dev/sda1保留了位于其中的文件系统/

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

谢谢,现在我得到统计信息,对我有用,我将学习使用它。
youxiao

1
为了记录起见,所有文件系统都有一些等效项,即使它们动态分配inode也是如此。例如,在BTRFS(与ext2 / 3/4的静态inode表相反,它进行动态inode分配)上,像这样使用的特定inode值为256(因为所有较低的内容都保留用于元数据树中的特殊条目) 。
奥斯汀·海默加恩

1
@AustinHemmelgarn,某些文件系统(例如FAT或ISO9660)在任何意义上都没有inode。文件系统驱动程序做了一些细微的调整,以使其看上去与它们所做的系统其余部分相同。
标记

@Mark:根据定义它的标准,唯一的“有意义的单词含义”是“文件序列号[设备内唯一”)。坚持将inode视为特定的磁盘数据结构与将ttys视为机械电传打字机一样落后。
R.,

1
@R ..,我想通过该定义,FAT文件系统具有inode,但是FAT文件系统上给定文件的“文件序列号”在不同的装载之间甚至在单个装载过程中都不稳定:如果存在内存压力导致从缓存中逐出一个合成的inode结构,下次有人请求其inode数据时,该文件将获得一个新的编号。
标记

24

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.