你需要多少inodes
Johnwoolee打电话问我如何计算一个固定大小的分区的inodes个数,也就是inodes和blocksize之间的计算关系。
我记得以前我接触过这个问题,记得和一个比率参数有关系。再次参看mkfs.ext3的man手册,记忆唤起来了,同时也增加了新的认识。
mkfs.ext3缺省情况下,是根据blocksize和bytes-per-inode来计算出一个文件系统在格式化时有多少inodes的。不过,我觉得应该之和bytes-per-inode有关,因为mkfs.ext3会根据每一个bytes-per-inode大小来创建一个inode,因此刨除保留块,超级块外,一个分区剩下的大小除以这个bytes-per-inode就大约是inode的个数。
我做了一个实验,3GB大小的磁盘,分别指定blocksize和bytes-per-inode,得到的inode个数列表如下:
---------------------------------------------------------------------------------------
blocksize bytes-per-inode number-inode
---------------------------------------------------------------------------------------
1024 1024 3072000
---------------------------------------------------------------------------------------
1024 2048 1536000
----------------------------------------------------------------------------------------
1024 4096 768000
----------------------------------------------------------------------------------------
2048 2048 1537088
----------------------------------------------------------------------------------------
2048 4096 768544
---------------------------------------------------------------------------------------
上面的实验数据可以得出下面的结论:
(bytes-per-inode) * (number-inode) =~ 3GB (filesystem size)
因为在mkfs.ext3中,blocksize最小为1024,而bytes-per-inode最小不能小于blocksize,因此指定bytes-per-inode为1024可以获得最大inode个数。
当然,如果你还嫌不够,-N的参数也许能满足变态要求的你,-N表示你来指定希望的inodes个数,这下,你该满足了吧。
不过,也不是不限制的,我尝试指定filesystem size(bytes)个数时,报错了。
root@wgzhao:~# mkfs.ext3 -n -N 3145728000 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
mkfs.ext3: inode_size (128) * inodes_count (3145728000) too big for a
filesystem with 768000 blocks, specify higher inode_ratio (-i)
or lower inode count (-N).
当满足inode_size * inodes_count的要求后,不一定能满足其他要求,比如
root@wgzhao:~# mkfs.ext3 -n -N 21420000 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
/dev/sdb: Cannot create filesystem with requested number of inodes while setting up superblock
太大的inodes个数,导致超级块无法创建。
到底最大能为多少为inodes个数, 当不知道的时候,就穷举,我针对我的这个3GB空间大小,得到最后的最大inodes值,为12255232
接下来就是看看12255232这个数字有什么秘密隐藏在里面了。
3145728000 / 12255232 = 256.68 ~= 256
也就是说折算成bytes-per-inode应该是256了。
这样的话,一个分区创建为ext3文件系统时,最大的inode个数大约是
filesystem size (bytes) / 256
为了验证这个结果,我继续做了一个测试,当我把分区扩大到4GB时,inode个数大约应该是
4294967296 / 256 = 16777216 个
# mkfs.ext3 -m 0 -n -N 16318465 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
/dev/sdb: Cannot create filesystem with requested number of inodes while setting up superblock
# mkfs.ext3 -m 0 -n -N 16318464 /dev/sdb
mke2fs 1.40.3 (05-Dec-2007)
warning: 112 blocks unused.
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
16318464 inodes, 1023888 blocks
0 blocks (0.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=270536704
498 block groups
2056 blocks per group, 2056 fragments per group
32768 inodes per group
Superblock backups stored on blocks:
2056, 6168, 10280, 14392, 18504, 51400, 55512, 100744, 166536, 257000,
499608, 705208
实际最大值为16318465,比我预计的小了很多。
4294967296 / 16318465 = 263.1 <256
我想中间的差距应该是超级块等信息占用了一些block吧,具体还不是太清楚。
顺便给出一个文件系统最大磁盘大小数据表
文件系统 文件大小限制 文件系统大小限制
----------------------------------------------------------------------------------------------------
ext2/3(1K bs) 16448 MB (~ 16 GB) 2048 GB (= 2 TiB)
ext2/3(2k bs) 256 GB 8192 GB (= 8 TiB)
ext2/3(4k bs) 2048 GB (= 2 TiB) 8192 GB (= 8 TiB)
ext2/3(8k bs) 65568 GB (~ 64 TiB) 32768 GB (= 32 TiB)
ReiserFS 3.5 2 GB 16384 GB (= 16 TiB)
ReiserFS 3.6(knl2.4) 1 EB 16384 GB (= 16 TiB)
XFS 8 EiB 8 EiB
JFS(512 bs) 8 EiB 512 TiB
JFS(4k bs) 8 EiB 4 PiB
NFSv2 (client side) 2 GB 8 EiB
NFSv3 (client side) 8 EiB 8 EiB
------------------------------------------------------------------------------------------------------
有关ext2/3的更多详细信息,可以IBM开发网站上有赵蔚的一篇文章–Ext2 文件系统的硬盘布局.
我这里也整理成了pdf,和大家分享.
[file]http://mlsx.xplore.cn/attachment/200804/1208059344_91681fc7.gz[/file]
原创文章,转载请注明: 转载自Linux|系统管理|WEB开发
本文链接地址: 你需要多少inodes




我理解对于文件系统. 能确定的事情也只有最大文件大小和文件系统大小, 对于inode的个数, 我觉得和具体的文件系统实现相关, 按照bach书上的描述, 给我的感觉,如果要计算inode的数目, 无非就是inode-table的大小/每个inode的大小. 而每个inode的大小对不同文件系统不同(inode的组织方式不同, sizeof(struct inode)不同), inode-table的大小可以通过-N参数指定或默认(?).
最需要知道的便是该文件系统的平均文件长度为多少, 这样, 管理员才能指定-N参数, 不然,即便以最大inode数得到一个文件系统, 却不能存储你的文件(例如光inode-table就占据了文件系统容量的绝大部分显然不合理), 是不适当的. 不知道理解对不对?
没错,我这里仅仅只是从理论上讨论在既定分区大小的情况下,创建EXT3文件系统时,最大能获得多少inode,而在实际情况下,需要多少inode,需要根据综合你的的文件个数的增长比率以及平均文件大小来决定,而不仅仅是单纯的取inode的大小。
你好!我在feedsky上创建了一个博客圈,名为Linux User Blog Union,希望能邀请你的加入。
你可以点击这里预览一下已加入的几个博客的日志。冒昧打扰,如有不妥欢迎删除该留言~
已经申请加入,谢谢!