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内容了。

相关内容