Sam最近在架设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 table 与 data 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的索引表。
Data Area中存放真正的数据。
inode table上有许多的inode,
每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。
inode两个功能:记录档案属性和指针
1. linux FS 可以简单分成 inode table与data
area两部份。inode table上有许多的inode,
每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。
inode两个功能:记录档案属性和指针
2. inode table中红色区域即inode
size,是128Byte,在liunx系统上通过命令我们可以看到,系统就是这么定义的。
Inode size是指分配给一个inode来记录文档属性的磁盘块的大小。
dumpe2fs -h /dev/hda6 | grep node
Inode size:128
3. data ares中紫色的区域block
size,就是我们一般概念上的磁盘块。这块区域是我们用来存放数据的地方。
4. 还有一个逻辑上的概念:FS中每分配2048 byte给data area,
就分配一个inode。但一个inode就并不一定就用掉2048 byte, 也不是说files
allocation的最小单位是2048 byte, 它仅仅是代表filesystem中inode table/data
area分配空间的比例是128/2048,也就是1/16。
mkfs.ext3 -i 2048
这条命令中的-i参数就是我们所说的逻辑概念,它的大小决定inode
count的大小,redhat5默认-i最小为可设置为1024.
网上很多介绍关于inode的文章,把inode size的定义搞错了,他们把-i参数这个值或block size解读为inode
size 所以很多文章令人费解。
5.
inode参数是可以通过mkfs.ext3命令改变的:
mkfs.ext3 -i 2048 -b 8192 -f 1024 /dev/sdb2
-i 2048更改inode为每2KB创建一个
-b 8192设置block size的大小为8kB
-f 1024设置fragments的大小为1KB
mkfs.ext3 –N 2939495 /dev/sdb2
–N 2939495更改inode count。
因为每个partition有inode数目限制。所以inode可能会用完而导致不能创建新的文件。
#df -h
可以显示block空间用了多少,还剩余多少。
#df -i则显示inode用了多少,还剩余多少等。
所以,如果有非常多小文件,将inode占用光了。则可能也无法创建新文件。