之前简要介绍了一下文件系统,要真正弄清楚一些内核系统还是要回到内核,以ext2文件系统为例。
一块磁盘可以格式化出多个分区,一个分区对应一种文件系统。ext2将整块分区划分为两大部分:一个默认的启动块和若干块组,启动块(Boot Block)用于存储分区的描述信息和启动信息,大小固定为1K。而启动块之后的块组才是ext2真正开始的地方。
块组(Block Group)由六部分组成:1、超级块(Super Block)2、块组描述符表(GDT, Group Description Table)3、块位图(Block Bitmap)4、inode位图(Inode Bitmap)5、inode表(Inode Table)6、数据块(Data Block)。如图所示,下面详细介绍各部分。
1、Super Block:记录整个分区的文件系统属性。如块大小、文件系统版本号、last mount time等。每个块组开头均有备份以免意外损坏导致整个分区失效。
2、GDT:分区的一个块组对于一个块组描述符,所有的描述符组成表。字面上可知其存储块组的描述信息。如Inode表从何处开始何处结束,总共有多少,用了多少,还剩多少等信息。——>df -i的信息。每个块组均有备份。
3、Block Bitmap:以一种非常原始的方式记录数据块的使用情况。一个块组中有n个数据块,则位图中有n个bit位,对每个块编号形成与位图中的bit位对应后,以1代表已用,0代表空闲来记录块是否被使用的信息。此区域的大小格式化时计算得最优值。
4、Inode Bitmap:同Block Bitmap,记录inode的使用信息。
5、Inode Table:表由所有Inode组成,记录文件的信息,如文件类型,权限,文件大小,时间等。ext2规定一个文件对应于一个Inode
——>ls -l
6、Data Block:
1.对文件来说很简单,数据存储在此。
2.对目录来说。目录是一种特殊类型的文件,同样也是文件。其内容(数据)是其内所有文件名及子文件夹名与其inode的对应关系,这
是(一)中一直强调的,存储在此。需要注意的是ls -l中所列出的项目,文件名是存储在目录的数据块中的,其余的都存储在文件的
inode中。
说了很多Inode节点,那Inode到底是什么呢?一个Inode包含以下部分:
-类型与权限
-所有者信息
-文件尺寸
-时间信息
-······
-12个直接块指针
-1个一次间接块指针
-1个二次间接块指针
-1个三次间接块指针
其中最重要的信息是15个块指针,形成了由Inode到数据块的索引关系。因此如果已知一个文件的Inode,就可以定位到所对应的数据块从而获取文件的信息,如图所示。
举个例子,假设我要读取/opt/file文件的信息,所采取的途径是。
1、由于“/”的inode始终为2,则通过inode信息中的块指针找到“/”目录的数据块信息。
2、根目录的数据块中记录opt文件名与其相对应的inode,从而获取opt目录的inode信息。
3、通过opt的inode信息,找到opt目录的数据块。
4、通过file文件名找到与之对应的inode节点号。
5、通过inode信息即可定位出file文件对应的数据块位置。
参考:http://akaedu.github.io/book/ch29s02.html
http://molinux.blog.51cto.com/2536040/505485