关于如何在 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 的新手,我不是来自说英语的国家,如果我没有明确表达,请见谅。提前致谢。