为什么block越大,最大单一文本限制和最大文件系统总容量越大?


QQ截图20160308205320.png


 

fish - Hadooper

赞同来自: wangxiaolei xdbc 范玉涛

这是对linux中ext2/ext3文件系统block尺寸与可存储最大文件及可管理最大文件系统关系的计算问题。 最大文件系统的大小: block id用无符号32位数来表示,因此可以定位的block数为2^32 = 4G。 当每个block大小为4k时,文件系统能管理的磁盘总量为4K*4G=16T。 (需要更正讲解中的一个错误,当block为1K时,最大文件系统总量应该是1K*4G=4T)   关于最大单一文件,需要补充一个ext2/3的数据块查找方式,如下图:
1.png
 一个文件采用间接块映射方式管理其存储空间,第一级inode最多15个。前12个为直接数据块(就是inode直接指向数据块结构)。后面三个,分别为一级间接块(就是inode指向一个block,这个block中划分成若干个指向,再指向数据块结构)、二级间接块、三级间接块。   一个inode对block的指向(实际是32位的block编号)需要用4个字节存储,因此,如果block大小为1K,一个中间级block(一级、二级、三级间接块)就可以指向1K/4=256个下一级。   以此计算,当15个inode全部填满,且一二三级间接块都用光的情况下,就是单文件的最大尺寸。   当每块为1K时,单文件最大的块数:12 + 256 + 256^2 + 256^3 文件尺寸就是:1K * (12 + 256 + 256^2 + 256^3),约等于16G。   当每块为2K时,同样算法得到结果为256G。   当每块为4K时,同样算法计算所得的单文件大小应该为4T,但Linux内核中对单文件上限upper_limit做了2T的限制,所以块大小为4k时,特殊的,单文件最大为2T。

wangxiaolei

赞同来自: 范玉涛

一个文件是由多个block组成的,每个block的大小是最小单位,最大能支持的个数是一定的。 个数乘以单位得到的值就大了。

要回复问题请先登录注册