1. EXT2 文件系统
EXT2文件系统最前面有一个启动区,这个启动扇区可以安装引导装载程序。其余部分被分成块组(block group),示意图如下:
块组中的每一块包含下列信息之一:
1) 超级块(super block):记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式和相关信息等。
2) 组描述符(group description):描述自己块组内部的信息,说明每个块组开始与结束的block号码,以及说明每个区段(super block, bit map, inode map, data block)分别位于那一个block号码之间。
3) 数据块位图(block bitmao): 记录数据块的使用情况,包括那些数据块可用,哪些数据块不可用。
4) 索引点位图(inode bitmap): 与数据块位图相似,记录哪些inode可用,哪些inode不可用。
5) 索引点节点表(inode table): 记录文件的属性、权限以及该文件实际数据是放置在那个block中,每个inode的大小均固定为128bytes。
6) 数据块(data block):实际记录文件的内容,若文件太大,会占用多个block。
2. 与目录树的关系
当在Linux下的EXT2文件系统创建一个新目录时,EXT2文件系统会分配一个inode与至少一块block给该目录。其中,inode记录该目录的相关权限和属性,并可记录分配到的那块block号码,而block则是记录这个目录下的文件名与文件名占用的inode号码数据。
当我们在Linux下的EXT2文件系统中新建一个文件时,EXT2会分配一个inode与相对于该文件大小的block数量给该文件。例如,我的一个block大小为4KB(block的大小和总量是在格式化的时候就固定了的,除非重新格式化),而我要建立一个100KB的文件,那么Linux将分配一个inode与25个block来存储文件。
3.目录树的读取
举列说明系统读取文件的流程,例如我们读取/etc/passwd这个文件:
1) / 的inode:通过挂载点的信息找到/dev/hdc2的inode号码为2的根目录inode,且inode有读写权限
2) / 的block:经过上个步骤取得block的号码,并找到该内容有etc/的inode号码
3) etc/的inode:读取etc/的inode号码可知有r和x的权限,因此可读etc/的block内容
4) etc/的block:经上个步骤取得的block号码,找到内容是passwd文件的inode号码
5) passwd的inode:从passwd的inode可知有读的权限,因此读取passwd的内容
6) 将passwd的内容读取出来