感谢支持
我们一直在努力

Linux的标准文件系统—-EXT2

EXT2分为几个重要部分:


inode、block、superblock


EXT2将文件分为两部分存储,文件的权限等属性放在inode中,而其实际的数据放在block中,superblock当然就是记录整个文件系统的inode和block的信息了。


(1)inode:


一个inode的大小被固定为128字节,一个文件占用一个inode,但是并不代表一个inode只保存一个block的指向,因为一个文件通常都是由N个block保存的。


inode基本上记录了文件的访问权限、所属用户/用户组、大小、atime、ctime、mtime、指向。。。


从128字节的固定大小来看,文件系统能够创建的文件数量就一定与inode的数量有关了,这个稍后讨论


(2)block:


在目录中:记录该目录下的文件名和该文件名所占用的inode号码


在数据中:记录文件数据


一个block大小分为1K,2K,4K三种,如果是4K的,那么要建一个100K的文件,就需要25个block了


有了上面inode和block的介绍,我们就可以讨论一个文件系统所能保存的最大文件量了。


如果一个inode指向一个block,那么按100K的文件来算,就需要25个inode了,这实在很浪费啊,因为inode再小也有128字节,EXT2为了解决这种资源浪费问题,


设计了inode的指向,将inode分为12个直接指向、一个间接指向、一个双间接指向和一个三间接指向,剩下的用来记录文件权限和属性


以1K的block来算:


12个直接指向,直接指向block,那么最大就可以指向12个block,最大文件大小为:12*1K = 12K


一个间接指向,指向block,再由block指向其他block,而记录一个block号码的指针占4个字节,这样1K的block最大指向256个block,最大文件大小为:256*1K = 256K


一个双间接指向,指向一个block,在由这个block指向256个block,每个block再指向256个block,这样,最大文件大小为:256*256*1K


一个三间接指向,按双间接指向推理的话,就是让第三层的256个block每一个又指向256个block,最大文件大小为:256*256*256*1K


显然,1K的block的文件系统最大可存入的文件大小为:16GB


(2K、4K的会由于EXT2本身的限制而得出不符合实际的结果)


(3)superblock


记录整个文件系统的相关信息,与文件系统共存亡


记录了inode和block的总量、未使用和已使用的inode和block量、文件系统挂载的相关信息。。。。


(4)查看文件系统


  1. $ df  
这个命令会让你找到每一个挂载的设备文件,如/dev/hdc2


  1. $ dumpe2fs /dev/hdc2  
这个命令可以显示出这个设备文件所使用文件系统及其类似于superblock的信息(应该说比superblock记录可能还多,因为实在很多,没有看完。。。)


(5)从目录树读取文件


以读取/etc/passwd为例


系统首先通过挂载点的信息找到当前设备文件的根目录的inode,当它检测到inode中记录了根目录的r和x权限时,就可以进入根目录了,并且取得block的内容;


进入根目录后,跟据block,找到到/etc目录的inode;


读取inode,当读取到用户拥有r和x的权限时,就获得并读取block,进入该目录;


根据block,找到passwd的inode,读取inode,有r权限时,就可以读取passwd的block内容了。

赞(0) 打赏
转载请注明出处:服务器评测 » Linux的标准文件系统—-EXT2
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏