流行女装爆款:
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
------------------------------------------------------------------------------------------------------