- 论坛徽章:
- 0
|
关于索引结点中nbpi的疑问
[quote]原帖由 \"llm308\"]谢谢大家的回复,可是我还是没有搞明白,既然inode的大小是128个字节了,那nbpi是干什么的呢?书上说是每个inode拥有的字节数,可是inode的大小不是已经定了吗?128个字节啊[/quote 发表:\n\r\n\r\n一个inode就是128B大小,但一个inode能代表多大的data area空间不同,是在创建文件系统时确定的,就是nbpi, 如果一个文件系统中共有128k inode空间,则可以最多有1024个inode, 而实际的文件系统最大则根据nbpi的大小,可能是4M (4k nbpi),.... 128k (131072 nbpi)\r\n\r\n所以,文件系统最大的空间大小和两个参数有关,inode number和nbpi\r\nnbpi是选定的,那么inode number是多少?2^24=16M\r\n\r\n这样,一旦nbpi选定,文件系统的最大范围也就定了,是nbpi*16M\r\n\r\n另外为了索引一个文件,最少要用掉一个inode,但如果文件大于一个nbpi,就要至少用掉2个,以此类推。如果文件很大,inode使用很有效率,但是如果文件比较小, 一个文件至少占用一个inode,如果一大堆小文件,则占用了很多inode,结果空间没占多少,文件系统却没有inode了。\r\n\r\n可能你会疑惑,16M的inode还不够用?因为这是最大值,而真正文件系统的可用inode数可没有那么大,它是和allocation group配合的。如果选了8M allocation group,则每次文件系统扩大,以8M为单位,假设nbpi为4k,则每个allocation group 可以扩出来8M/4k=2k 个inode, 最多才2000个文件!假设文件系统为64M,则有64M/8M=8个allocation group, 只有8*2048=1万六千个inode, 如果每个文件只有那么一大点,比如几个字节,则空间可能只占了几十k, 一万多个文件就把文件系统的inode占光了。。\r\n\r\n说得够清楚了吧?\r\n\r\n\r\n以上都是32bit aix的实现,64bit的aix 中,都有相应的扩大 |
|