原创 Linux中的inode

2008-3-14 15:47 6908 5 5 分类: MCU/ 嵌入式

在理解Link前,我们先要了解inode这个名词的概念(因为下一篇打算讲linux的“快捷方式”--Link)。而在这之前,先理解一下硬盘的一些基本知识先。


硬盘是一种采用磁介质的数据存储设备,数据存储在密封于洁净的硬盘驱动器内腔的若干个磁盘片上。这些盘片一般是在以铝为主要成分的片基表面涂上磁性介质所形成,在磁盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干个同心圆就被划分成磁道(track),每个磁道又被划分为若干个扇区(sector),数据就按扇区存放在硬盘上(所以扇区是硬盘的最小单位啦!它一般是512byte)。在每一面上都相应地有一个读写磁头(head),所以不同磁头的所有相同位置的磁道就构成了所谓的柱面(cylinder)。传统的硬盘读写都是以柱面、磁头、扇区为寻址方式的(CHS寻址)。硬盘在上电后保持高速旋转(5400/min以上,现在基本上都达到7200/min了吧?),位于磁头臂上的磁头悬浮在磁盘表面,可以通过步进电机在不同柱面之间移动,对不同的柱面进行读写。所以在上电期间如果硬盘受到剧烈振荡,磁盘表面就容易被划伤,磁头也容易损坏,这都将给盘上存储的数据带来灾难性的后果(这也是我们平时装配电脑的时候将硬盘安装在机箱内的位置越低也好的原因)。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


    硬盘的示意图如下:


点击开大图


我们现在知道硬盘的大体结构了。那么怎么样进行硬盘分割呢?我们在进行硬盘分割的时候,最小都是以磁柱为单位进行分割的,那么分割完成之后自然就是格式化( format ),在 Linux 里面我们在进行格式化的时候必须要考虑到 Block inode 的信息,这个 block 还好理解,他是我们磁盘可以记录的最小单位,是由数个 sector 所组成的,所以


他的大小通常为 n*512 bytes ,例如 4K 。那么 inode 是什么? Block 是记录档案内容数据的地区,而 inode 则是记录该档案的属性、及该档案放置在哪一个 Block 之内的信息!所以,每个档案都会占用到至少一个 inode 。而当我们 Linux 系统要找到这个档案时,他会先去搜寻 inode table 找到这个档案的属性及数据放置的地区,然后再到数据库去找到数据存放的 Block 进而将数据取出利用。这个 inode 数目在一开始就会被设定好,他的设定方式通常是利用硬盘大小 / 一个容量,这个容量至少应该比 Block 要大一些较佳,例如刚刚的 Block 订为 4K ,那么 inode 可以订为 8K 左右。所以,一颗 1GB 的硬盘,如果以 8K 来规划他的 inode 数时,他的 inode 就会有 131072 inode 啦!而一个 inode的大小为 128 bytes 这么大!这么一来的话,我们就可以清楚的知道了,那就是一个 partition 格式化为一个 filesystem 之后,他一定会有 inode table data area 两个区块,一个用来记录档案的信息与该档案放置的 block 区块,一个用来记录档案的内容!


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


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


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


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


 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条