3

关于如何在 linux 文件系统中使用 inode 编号,我有几个问题。这些问题可能是相关的,但为了清楚起见,我将一一问他们。

Q1:以EXT2/3为例,在《第二个扩展文件系统的设计与实现》中,我知道块组中有inode表,我知道inode存在文件,但是如果文件太多但inode个数怎么办?还不够吗?我最好的猜测是,如果文件系统的所有 inode 编号都用尽了,它什么也不做。如果稍后某些文件被删除,它的 inode 可能会被回收。

Q2:我在我的 Linux 服务器上运行“df -i”,我得到了这个:

Filesystem            Inodes       IUsed   IFree      IUse% Mounted on    
    /dev/sda1          1313280    7853 1305427    1%     /
    devtmpfs                   0       0       0              -       /dev
    tmpfs                 525298       4  525294        1%    /dev/shm
    /dev/sda2              65808      50   65758       1%    /boot
    /dev/sda5            1313280     146 1313134    1%   /opt
    /dev/sda6             655776      37  655739      1%   /tmp
    /dev/sda7             655776    5219  650557    1%   /home
    /dev/sda8            1313280     840 1312440    1%  /var
    /dev/sda9             655776   36529  619247    6%  /usr
    /dev/sda10              6432      11    6421        1%  /crash
    /dev/sda12            135488      11  135477     1%  /usr/local/instances
    tmpfs                 525298       3  525295    1% /var/run/xenstored
    tmpfs                 525298       3  525295    1% /var/lib/xenstored
    tmpfs                 525298       3  525295    1% /var/lib/xend/socket
    tmpfs                 517536       3  517533    1% /var/run/libvirt/socket

我看到每个文件系统都有自己的 inode 计数,并且这些文件系统(如 devtmpfs 和 tmpfs)都安装到根文件系统。我猜每个文件系统都有自己的inode表,但是不同文件系统的inode数量分布在不同的范围内,比如根文件系统是[0,N]而tmpfs是[N+1,M]?

如果不同文件系统的 inode 数量在不同的范围内(我不这么认为),文件系统如何就范围划分达成协议?

如果不同文件系统的inode编号是根据相同的规则生成的(就像都是从0开始),如果我们将它们挂载在一起,不同的文件系统会发生冲突吗?据我所知,inode 在运行的操作系统中提供文件,如果根文件系统中的文件的索引节点编号为 N,并且另一个文件系统中的另一个文件(如 tmpfs)也具有索引节点编号 N,操作系统会做什么?

PS。我是 Linux 的新手,我不是来自说英语的国家,如果我没有明确表达,请见谅。提前致谢。

4

1 回答 1

5

文件的完整唯一标识符是(st_dev, st_ino). 这意味着 inode 编号在文件系统中不必是唯一的,并且每个文件仍然是唯一标识的。

这就是为什么您不能拥有跨设备的硬链接。目录条目只包含一个 inode 号,而不是一个设备号。因此,目录条目只能引用与目录所在的文件系统相同的文件。

即使您在目录条目中添加了一个设备字段,它也是没有意义的,并且当您添加或删除驱动器时设备编号可能会发生变化,并且仅在系统运行时引用特定设备。此外,您将如何对全世界的所有设备进行唯一编号。例如,使用 USB 驱动器,您可以将给定的设备从一台机器带到另一台机器。您将如何确保设备编号保持不变以使链接仍然有效?

最后,并非所有文件系统类型都有固定数量的 inode 编号。reiserfs 和(我相信)btrfs 根据需要动态分配新的 inode,因此文件系统的总 inode 字段并不能真正反映任何有用的价值。

于 2011-11-08T04:42:27.913 回答