我对Linux文件系统中inode编号的使用有几个问题。这些问题可能相关,但为了清晰起见,我将逐一提出。
问题1:以EXT2/3为例,从“设计和实现第二个扩展文件系统”中我知道,在块组中有inode表,我也知道inode表示文件,但如果文件太多而inode编号不足怎么办? 我最好的猜测是,如果所有inode编号都用完了,文件系统就什么也不做。如果稍后删除某个文件,则其inode可能会被回收。
问题2:我在我的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表示运行OS中的文件,如果根文件系统中的一个文件具有inode编号N,而另一个文件系统(比如tmpfs)中的另一个文件也具有inode编号N,那么OS会怎么做?
PS. 我对Linux还比较新,我不是来自英语国家,如果我的表述不清楚,请谅解。提前致谢。