Linux inode详解

作者: Sam (甄峰)   sam_code@hotmail.com

 

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的索引表。

 

Linux <wbr>inode详解

Data Area中存放真正的数据。

 

 

inode table上有许多的inode,每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。
inode两个功能:记录档案属性和指针

 

 

1. linux FS 可以简单分成 inode table与dataarea两部份。inode table上有许多的inode,每个inode分别记录一个档案的属性与这个档案分布在哪些datablock上(也就是我们说的指针)。
inode两个功能:记录档案属性和指针

2. inode table中红色区域即inodesize,是128Byte,在liunx系统上通过命令我们可以看到,系统就是这么定义的。
Inode size是指分配给一个inode来记录文档属性的磁盘块的大小。

dumpe2fs -h /dev/hda6 | grep node
Inode size:128

3. data ares中紫色的区域blocksize,就是我们一般概念上的磁盘块。这块区域是我们用来存放数据的地方。

4. 还有一个逻辑上的概念:FS中每分配2048 byte给data area,就分配一个inode。但一个inode就并不一定就用掉2048 byte, 也不是说filesallocation的最小单位是2048 byte, 它仅仅是代表filesystem中inode table/dataarea分配空间的比例是128/2048,也就是1/16。

mkfs.ext3 -i 2048这条命令中的-i参数就是我们所说的逻辑概念,它的大小决定inodecount的大小,redhat5默认-i最小为可设置为1024.

网上很多介绍关于inode的文章,把inode size的定义搞错了,他们把-i参数这个值或block size解读为inodesize 所以很多文章令人费解。

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占用光了。则可能也无法创建新文件。

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值