最近在架设spnfs过程中发现。在client上创建文件,文件名以及目录关系都可以在MDS上表现出来。文件内容则存储在DS上。但DS上的文件名却都是由数字组成的。命名方式为:inode.xxxx. 关于inode,Sam刚开始以为是kernel的node概念。后来查了一下,发现好像有误差。于是学习之。

在Linux下,使用mkfs.ext3 时,有不少选项和inode有关。如:

[-i bytes-per-inode]

[-I inode-size]

[-N number-of-inodes]

那inode是做什么用的呢?inode记录档案(文件或目录)的属性、及该档案放置在哪一个Block之内的信息。

每个档案都会占用到至少一个 inode。而当我们Linux系统要找到这个档案时,他会先去搜寻inode table找到这个档案的属性及数据放置的地区,然后再到数据库去找到数据存放的Block进而将数据取出。

一个 partition格式化为一个filesystem之后,他一定会有inode tabledata area两个区块,一个用来记录档案的信息与该档案放置的block区块,一个用来记录档案的内容。

Linux 在读取数据的时候,是先查询 inode table 以得到数据是放在那个 Block 里面,然后再去该 Block 里面读取真正的数据内容。block 是我们在格式化硬盘的时候规定出来的一个值,这个 block 是由 2 的 n 次方个sector(扇区,大小为512byte) 所集结而成的,假设 block 规划为 4KBytes,则由于一个 inode 与一个block 最多均只纪录一个档案,所以如果一个档案有 0.1 K bytes 。但是,由于你的 block为 4K bytes 。你就会有 3.9 Kbytes 的空间“浪费掉”!所以,当你在格式化硬盘的时候,请千万注意到您的系统的使用范围。

1、 当 block 越小 ( 最小为 0.5K ) 、inodes 越多,可利用空间越多,但是大档案写入效率较差:适合档案数量多但是

档案容量小的系统,例如 BBS 或者新闻群组 news 这方面的服务之系统;

2、 当 block 越大 ( 最大可到 16 * 0.5K 以上 ) 、 inodes 数越少,大档案写入效率较佳,但浪费的空间较多:适合档案容量大的系统。

inode table是data area的索引表。