i-node您能够理解成一个大楼。

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的大小,应该是有个概念的。。但不是实际占用的数据,而是个定义的大小范围。。


——————————————————————————————————————————————————————————————————————————————

这串讨论我关注到现在, 还没发现比较满意的说法.

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

首先, 先让我们认识 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 = 40k
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!)
再建一个 9k 的文档(file3), 这时剩下7个 inode 和 6 个 data block. (因为9k会用掉3个 data block!)
再下来, 我再建一个 17k 文档, 这时候, 我可能得到两种结果:
1) 写完剩下的 4 个 data block, 然后遗失 1k 的数据
2) 得到空间不足的错误, 拒绝建立新文档.
各位自己猜一猜 linux ext2/ext3 是怎么处理的?

下面, 到了思考时候了:
我假设是2好了, 也就是刚才的建立失败了.
再接下来, 我一口气新建了7份空白文档.
1) 请问我还能建立新文档吗? 若可, 最多还能建多少份?
2) 我可扩充原有第一份文档(file1)的数据吗? 若可, 最多还能塞多少byte数据?
3) 原有第一份文档(file1)的数据没有扩充(依然为空白), 我可扩充原有第二份文档(file2)的数据吗? 若可, 最多还能塞多少byte数据?
4) 若我先将第三份文档(file3)删除掉, 重新回答以上三题.

我相信, 若您读得懂我的说明, 且能回答以上题目, 您应可回答搂主原问题了吧!

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!