从ext3和ext4文件系统来窥探空间和文件大小的演算法则
学习操作系统就不得不研究c盘以及c盘文件系统,c盘是底层化学设备linux定时器,而文件系统则是管理c盘的下层工具,文件系统规划了c盘储存数据的格式,确定了一个操作系统就能支持多大的c盘空间,每位分区才能支持多大的数据空间,以及每位文件所能支持的大小。一般对系统管理员而言,最须要的晓得的就是最大c盘空间,最大分区空间以及最大文件的大小。本论题只讨论这三种大小究竟是如何算下来的,而不是死记硬背。晓得了原理,之后不管遇见哪些文件系统,就会有章可循,起码晓得须要这些数据可以算出这三种需求的大小。据悉,这儿不谈c盘的组成以及文件系统的布局,只说演算方式,可能涉及的相关知识点,请查看相关资料。
好多人可能都是死记几个数值,却不晓得为何是这个数值,这儿就来分析一下:
1.硬性规定
ext3:
1).ext3文件系统采用32bit的块地址索引空间;
2)在inode条目中,引用一个块空间符号须要4byte的大小;
3)对于一个inode来说,设计了12个直接表针索引,一个间接表针索引,一个双间接表针索引linux 文件空间容量,以及一个三间接表针索引
注:
a.这种规定都是文件系统自身的程序代码所决定的linux 文件空间容量,也就是说这是开发时就设计好的,没有为何,只有是哪些;对于其它文件系统也是一样;
b.所谓双间接表针索引和三间接表针索引指的是两级结构和五级结构deepin linux,相当于linux中的根文件系统目录树一样;
附ext3文件系统中inode内部结布光:
ext4:
1).ext4文件系统采用48bit的块地址索引空间;
2).在inode条目中,不在是使用表针索引的方法来进行与block的映射,而是采用extent来代替表针;此前在ext3中的15个
表针被替换成5个extent,一个extent占用3byte空间;一个extent描述了一组连续的block,当不够用时extent仍然可以采
用间接表针的索引,但没有个数限制。
注:对于extent估算单个文件大小的算法,还没摸索出,没搞懂源码。你要是弄懂了留言啊。
2.演算法则
好,晓得了前面的源码设计规则,下边就可以进行估算了。
ext3:
1).最大支持的文件大小
首先要晓得,在linux文件系统,一个block的大小可以为1k,2k,4k,当block的大小为4k时为最大。在linux系统中,每一个文件都要使用一个inode号,因而要想估算出单个文件所支持的最大空间,只要晓得inode中才能引用多少个block,而block取最大值4k的时侯估算下来的值就是所能支持的单个文件的最大空间。
从里面的硬性规定中可以看出:
a.一个inode支持12个直接表针,因而就表示了12个block
b.一个inode支持一个间接表针,也就是一个表针指向了一个block块,将该block块作为指向最终block的直接表针,这儿是一个block为4K,指向一个block要占用4byte的空间,因而一个block的间接表针可以指向4K/4byte的block,即2^10
c.双间接表针最终则指向:2^10*2^10=2^20个block
d.三间接表针最终执行:2^10*2^10*2^10=2^30个block
因而最终的block的个数为:12+2^10+2^20+2^30
则最终的大小为:(12+2^10+2^20+2^30)x4KByte
则换算成TB的大小为:(12+2^10+2^20+2^30)x4KByte/1024/1024/1024=4TB
到此,可知ext3文件系统,在block为4K的时侯,其支持的单个文件大小为最大,最大为4TB。
注:其实这是理论值,在业界应当都晓得实际值与理论值总是会有点误差,但无伤大雅
2)最大分区大小(即文件系统大小)
在操作系统中,文件系统都是针对分区而言的,一个c盘必须先分区能够低格文件系统(虽然你将c盘所有容量界定一个分区).格式文件系统后才会挂载使用,此时就必须晓得一个文件系统究竟支持多大的分区大小。
在ext3文件系统中,采用32bit的块索引空间,且其采用int的无符号整型,因而一个分区的最大空间为:
2^32*4KByte=16TB
由此,得悉在ext3文件系统中,当block为4K时,一个分区的空间将最大,且最大空间为16TB
3)最大c盘容量
有时侯当我们须要更大的c盘容量空间的时侯,会降低c盘来达到需求。并且最后分区使用时会发觉提示不支持如此大的空间。这是为何?
对于整块c盘而言,由于存在MBR区域,而MBR中有64byte的空间只能表示4个分区,每位分区16btye来表示,因而对于ext3文件系统支持的最大分区为16TB,那最大系统c盘容量为:16TB*4=64TB
注:这儿有人要问几个问题了
a.有人问:你这儿说4个分区,不是有逻辑分区吗,使用逻辑分区界定c盘可以界定好多c盘分区。那不是应当无限制吗?
answer:逻辑分区是扩充了c盘分区的个数,并且逻辑分区也是从4个主分区中的一个主分区扩充下来的,因而所有逻辑分区的空间也不过是最后一个最大主分区的空间扩充下来的。
b.有人问:不对,在linux系统中,新c盘可以作为分区后挂载到系统中的某个目录出来使用。
answer:新c盘其实可以挂载到系统中的某个目录出来使用,并且对于新c盘而言也是在ext3文件系统下,新c盘的本身最大也是64TB。因而这儿基于的是在ext3文件系统下,block大小为4K时所能支持的最大c盘容量,超过了这个大小,分区表难以辨识了。千万不要理解成操作系统所能使用的空间大小。
ext4:
1)单个文件的最大空间
因为ext4默认不再使用表针的方式做block映射,而是使用extent来管理所能描述的block个数,本人还未理解extent究竟是个哪些机制,因而不做估算。但一致的说法是,单个文件可大16TB,相当于ext3的最大分区大小.
2)最大分区大小(即文件系统大小)
ext4使用48bit的块地址索引空间,因而在block为4k的情况下,大小为:
2^48*4KByte=1EB=1024PB=1024*1024TB
这个空间可以说在目前的环境下足够用了。
3)最大c盘容量
按照ext3的剖析推论可知:1EB*4=4EB
OK,就说如此多了,不晓得你理解否。总之我是懂了。(^_^)
文章评论