我有一个 btrfs 文件系统,顶层的所有文件夹都是 inode 256。
这对我来说不好,设备 id 是相同的,所以我假设这些是“虚拟 inode 编号”,Btrfs 有自己的机制这样做的。
是否可以获得每个目录真正唯一的物理inode?
看看会发生什么:
root@ReadyNAS-DEV:/home# find / -xdev -inum 256
/
/home
/data
/apps
root@ReadyNAS-DEV:/home#
这不好。
答案1
我假设三个目录/home
、/data
和/apps
是挂载点。
当您在 上挂载某些内容时/home
,报告的 inode/home
是已挂载分区的根目录的 inode,而不是原始/home
目录的 inode。因此,这些 inode 与其他分区根目录的 inode 相同也就不足为奇了。
在我的 OpenBSD 机器上(不使用 btrfs):
$ find / -xdev -inum 2
/
/home
/usr
/var
/tmp
我在我的 Ubuntu 虚拟机上也看到了同样的情况。这不是一个错误。
另一种说法是:不同目录的系统调用stat
返回的结构stat()
具有相同的 值st_ino
,但 的值不同st_dev
。参见描述stat()
和sys/stat.h
在 POSIX 中。
您可能误解了该-xdev
选项find
。有了它,就不会下降到其他文件系统上的目录中,但如果目录名称符合其他条件,它仍然会打印目录名称。