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)查看文件系统
- $ df
- $ dumpe2fs /dev/hdc2
(5)从目录树读取文件
以读取/etc/passwd为例
系统首先通过挂载点的信息找到当前设备文件的根目录的inode,当它检测到inode中记录了根目录的r和x权限时,就可以进入根目录了,并且取得block的内容;
进入根目录后,跟据block,找到到/etc目录的inode;
读取inode,当读取到用户拥有r和x的权限时,就获得并读取block,进入该目录;
根据block,找到passwd的inode,读取inode,有r权限时,就可以读取passwd的block内容了。