关于i-node的疑问?有点想不明白了![1]

[入库:2005年9月19日] [更新:2007年3月24日]

本文简介:


关于i-node的疑问?有点想不明白了!

最近我在自学Linux,遇到了点问题,有点迷糊了。请大家指教!

书上是以Red Hat 7.2讲的!

书上有这样一段话:

[quote:6a947a11c9]假设每个i-node可以存储8KB。

理论上,若是每个存储在区块中的文件都小于8KB,则此区块最多可以存储461216(例子中的数字)个文件,但若是文件超过8KB,则会占用一个以上的i-node,例如一个8MB的文件会占用1024个i-node。因此,若是系统中存储的文件都很大,则允许的文件数量一定远小于i-node数目。

相反,若是区块中的文件都很小,例如新闻组上的文章,[color=red:6a947a11c9]当文件的数目等于i-node数目时,即使区块中仍有许多的空间,系统也会因为没有足够的i-node而无法存储任何文件。[/color:6a947a11c9][/quote:6a947a11c9]
问题:

1.红色字体部分我有点不太明白,如果文件很小,没有足够的i-node,但是仍然有存储空间,为什么还存储不了文件呢?那些空闲的空间怎样使用呢?不是浪费了吗?(想不明白了)

2.如果i-node不够用了,怎样增加i-node呢?

 網中人 回复于:2005-02-04 19:40:20
哪本書啊?

你將"黑色部份"的 i-node 換成 block 後再重讀會比較好理解.

 網中人 回复于:2005-02-04 20:07:12
本版精華區, 是個值得多看的地方:

http://bbs.chinaunix.net/forum/viewtopic.php?t=153696&show_type=new

 zhaodongxi 回复于:2005-02-04 22:48:54
1. 的确会浪费的 i-node 和 block 任何一个用光了都会这样的
2.不能增加  在分区前要做好规划  根据具体情况指定i-node和block的大小

 網中人 回复于:2005-02-04 22:55:20
block 有大小, 但 i-node 沒有, 
i-node 只有"多少"而"大小"之別.

 衍水狂客 回复于:2005-02-05 16:05:59
[quote:f352ac6458="網中人"]哪本書啊?

你將"黑色部份"的 i-node 換成 block 後再重讀會比較好理解.[/quote:f352ac6458]

看的是国内一个人写的书,可以凑合看,挺基础的书。

看到那个地方,有点想不明白了。

疑问:

i-node如果用光了,可以再增加吗?

i-node如果用光了,硬盘上还有空闲空间,如果我还想使用,我应该怎么办呢?

 peng 回复于:2005-02-05 16:21:55
i-node用光了,不能增加,除非format的时候制定。。

i-node你可以理解成一个大楼。

如果这个楼房建筑的时候,就是100户,只能卖100套房子,住100户人家,没家4室二厅,200平米。。当来了101户人的时候,虽然没家人家200平米,但是也只是人家自己住。不能让其他人住了。。

如果你建立楼房的时候,都是小户型,同样建筑面积200×100平米,但是你每个户型都是100平米的小房间,就可以住200户人家了。。

这个东西,是你盖房子的时候决定的。以后不允许你在顶楼上再加盖了。。

系统的i-noode也是这个意思。。
创建文件系统的时候,就定义了i-noode的个数。计算机是通过i-noode来管理文件系统的。。

讨论一下,我也真平时没有仔细看这个i-noode,但是我认为是有大小的。。

我记得听netapp公司的存储培训的时候,有个系统快照的概念。就是存储某一时刻的i-noode的快照,来定义文件的状态。如果系统文件发生变化,有个文件记录文件变化的i-noode的状态,用来以后恢复成文件,就是通过i-noode的变化,来复原数据。。

这个i-noode的大小,应该是有个概念的。。但不是实际占用的数据,而是一个定义的大小范围。。

 山中无老虎 回复于:2005-02-05 16:27:33
我是来听讲课的,狂客兄还好吧?

 網中人 回复于:2005-02-05 16:50:32
看 file system 的實作...
當你發現 ext2/ext3 所受的 inode 限制, 
再看其他更聰明的 file system 在 inode 與 block space 得處理, 
如 reiserfs/jfs/xfs 這些...
你就知道何以那麼多人不用 ext2/ext3 .

 JohnBull 回复于:2005-02-05 17:14:44
[quote:5065c71fd6="衍水狂客"]
问题:

1.红色字体部分我有点不太明白,如果文件很小,没有足够的i-node,但是仍然有存储空间,为什么还存储不了文件呢?那些空闲的空间怎样使用呢?不是浪费了吗?(想不明白了)

2.如果i-node不够用了,怎?..........[/quote:5065c71fd6]

这本书说错了,烧掉! :evil: 

大多数32位UNIX系统的一个i-node中有15个32位块指针,其中12个是直接块指针,一个指针指向一个块;剩下的3个分别是一级间接块指针、二级间接块指针和三级间接块指针。
当文件长度小于等于12个块的时候使用直接块指针指向相应的磁盘块,当大于12个块的时候会分配一个指针块,让一级间接块指针指向这个指针块,这个指针块中存放直接指针,再不够了就动用二级和三级间接指针。
无论如何,一个文件实体都是一个i-node!

这是UNIX文件系统的基础知识。

 山中无老虎 回复于:2005-02-05 17:28:15
[quote:a95e9de48c="JohnBull"]

这本书说错了,烧掉! :evil: 

大多数32位UNIX系统的一个i-node中有15个32位块指针,其中12个是直接块指针,一个指针指向一个块;剩下的3个分别是一级间接块指针、二级间接块指针和三级间接块指针。
当文件长..........[/quote:a95e9de48c]
老大的意思是不是不可能出现有存储空间,但没有i-node的情况呢?我没太明白老大的意思。

 JohnBull 回复于:2005-02-05 17:33:33
[quote:180b0a5882="山中无老虎"]
老大的意思是不是不可能出现有存储空间,但没有i-node的情况呢?我没太明白老大的意思。[/quote:180b0a5882]

会出现的!
我说“一个文件实体永远是一个i-node”,但没说i-node是无限多的啊!那句什么“再用第二个i-node”之类的话纯属放屁!

回去找本关于UNIX/Linux文件系统的书看吧。

 網中人 回复于:2005-02-05 20:25:47
不如先了解一下 block type:
- data block
- inode block
- indirect block
- super block

我先給 keyword, 內容請自己找文件看.

 山中无老虎 回复于:2005-02-06 08:51:55
[quote:2631cbdcef="JohnBull"]

会出现的!
我说“一个文件实体永远是一个i-node”,但没说i-node是无限多的啊!那句什么“再用第二个i-node”之类的话纯属放屁!

回去找本关于UNIX/Linux文件系统的书看吧。[/quote:2631cbdcef]
多谢老大了,我明白了。

 skylove 回复于:2005-02-06 08:56:18
国内的书作者不见得功力有多深的。

论坛幸福吧。。。一有问题就可以来问。。。。个人觉得象这样的探讨交流多一些,cu会员进步会粉神速的。

我对i-node所知很少,跟着看各位的帖子长见识。

 peng 回复于:2005-02-06 09:01:36
看来,俺也该仔细看看了。。

希望回来后继续象大家学习。。。

 衍水狂客 回复于:2005-02-06 16:34:24
如果i-node用光了,而磁盘还有空间,

那这个空间就是浪费了吗?

 衍水狂客 回复于:2005-02-06 16:38:10
[quote:d9e3deb967="山中无老虎"]我是来听讲课的,狂客兄还好吧?[/quote:d9e3deb967]

自学Linux,准备专生本的。

Linux考的是上机。

边看边问!

 JohnBull 回复于:2005-02-06 18:33:27
[quote:1250426bec="衍水狂客"]如果i-node用光了,而磁盘还有空间,

那这个空间就是浪费了吗?[/quote:1250426bec]

至少对于ext2/ext3来说,就只能浪费了。

 衍水狂客 回复于:2005-02-06 18:37:42
那什么样的文件系统好一点呢?

 JohnBull 回复于:2005-02-06 19:03:49
我一直在用XFS。

 衍水狂客 回复于:2005-02-08 16:58:11
让Linux在XFS上工作?

 q1208c 回复于:2005-02-08 18:09:50
呵呵, I-node这么好玩么?

很早的时候就听说这个东东会没有的, 但我还没做出来没有的呢。
一般的系统一个 I-node差不多就对一个Block,也就差不多是1K,好象也有4K的。就算是4K的好了, 除非你存的全是4K以下的小文件,不然是不太会出现I-node用光了, BLOCK还有的情况的。

 網中人 回复于:2005-02-09 11:21:06
我前面建议大家去看 block type ,不知道有没看过呢?
要知道不管文件大小如何都最少回占一个 inode (除 hard link 外),
但不见得会占 data block ,比方空白文件欲与 soft link 。

想玩一下的话,跑一下如下的 command 看看:
for i in $(seq 100000000000000000); do touch test.$i ; done 
df -i

 采风 回复于:2005-02-09 17:15:00
inode的数量和文件系统容量有关系,不能增加 :roll:

 foole 回复于:2005-02-09 20:42:16
前面那位老兄关于建大楼的比喻真形象
呵呵

 網中人 回复于:2005-02-11 00:27:44
这串讨论我关注到现在, 还没发现比较满意的说法.

今晚给亲友拜完年, 有点时间我就跟大家说一说吧, 不一定准确, 只以记忆说个大概.

首先, 先让我们认识 block device 的定义:
按固定大小空间划分等量单位且能随机(random)存取之设备.
我们常用来存放文件的设备就是 block device .
在进行所谓 format 的时候, 其中一个很重要的处理就是在 device 上划分等量单位的 block .
而 block-size 通常可让我们自行定义, 在 linux mkfs  里, 我们可选用的 size 为 1k, 2k, 4k.
若不指定的话, 程序会自动按实际情况取值.
一旦 format 完成后, 这个 block size 就不能变更了, 除非重新 format (数据也不见了).

然而 block size 只能制定最小的空间使用单位, 
但 block 的用途却有很多种的:
super block
inode block
indirect block
data block
我们这里既然只谈 inode , 那我就针对 inode 来说好了.
若大家有参考我前面贴的联结, 应该知到 inode 的内容了吧?
大概如下:
file type
permission mode
link count
ownership
size
time stamps(c,m,a)
first level pointers to data block(total 15)
other attributes

其中要注意的有:
* inode 不含 file name, 那是 directory data block 的内容. 
(请自行抽空看 directory 的细节, 我这次不谈了.)
* pointers to data block 是找到 data block 的依据, 共分三层, 细节我也先略过, 有空请自行看文档.
但要知道的一个硬道理是: 若没有 inode, 我们没办法从 file system 中知道文件的 data block(s) 在哪!
因此我们才那么肯定的说: 每一个文件都会用掉一个 inode !

好了, 再回来看 format 吧,
当 block size 问题解决之后, 接下来伤脑筋的就是:
不同的 block type 要如何分配那些划好的 block unit 呢?
最不伤神的就是让程序自己搞, 但你啥也不能支配.
另一个方法就是用如下两个方法之一:
1) 指定确切数量的 inode, 剩下的给其他 block type 瓜分.
2) 按数据比例来定 inode 数量, 剩下的给其他 block type 瓜分.
前者比较好理解, 比方:
total space = 80k
block size = 4k
那么总 block 数是20个,
若我明确定了10个 inode , 那我最多能建立案10份文件. 那剩下的就只有10个给其它 block type 了.

第二种方法的话, 
若我说每4k data 就得分配一个 inode, 
然则每当一个 data block 被建力起来, 则肯定也会建一个 inode .
为方便计算, 假设暂时不管 super block , 将indirect block 也视为 data block, 
那么当建了 10 个 data block 时, 所有 block 也就用光了!
假如, 我将比例修改为每 8k data 才分配一个 inode 的话,
理论上我大约可建 12 个 data block 与 6 个 inode (你自己想一下剩下的两个 block 怎么用吧!)
然而, 若将比例修改为每 2k data 才分配一个 inode 呢?

okay, 假设我们用第一种方法 format 工作已经完成, 接下来让我们写入文件吧(假设 mount 好了)
首先建一个空白文件(file1), 这时, 剩下9个 inode 与 10 个 data block.(因空白文件不消耗 data block!)
再建一个只有 1byte 的文件(file2), 这时剩下8个 inode 与 9 个 data block. (虽不满4k, 但也得耗一个 data block!)

本文关键:关于i-node的疑问?有点想不明白了!
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top