ext4日志系统分析(二)

一、背景

上篇博客介绍了jbd2模块的安装与卸载。同时也讲了安装时初始化函数会在/proc/fs下创建一个jbd2目录。这篇博客打算介绍一下在jbd2模块被安装后内核是如何对日志系统进行初始化的,以及jbd2目录下的文件是从哪里来的。这里所涉及的东西较多,所以我只挑重点功能函数来讲。

二、jbd2目录

不知道大家还记得吗,上一篇博客我提到在安装jbd2模块时,内核会在/proc/fs下创建一个jbd2目录。这个目录具体做什么用到我并没有讲到。现在我们来看一下这个目录中有什么东西。
这里写图片描述
这个sda1-8目录表示日志存储在这个目录中,它位于分区sda1的inode号为8的文件中。进到该目录中。
这里写图片描述
这里有个info文件。打开看看内容。
这里写图片描述
这个文件中都是关于日志的基本信息。我们现在就通过源码来分析下这些信息从何而来。

三、源码分析

我们首先来看一下ext4_load_journal函数:
这里写图片描述
这里写图片描述
这个函数是在ext4_fill_super函数中被调用的。这两个函数都位于fs/ext4/super.c文件中。我们知道,这个文件中都是与超级块相关的函数,ext4_fill_super是文件系统为每个分区初始化super_block时调用的。而ext4_load_journal函数则是用来装载日志系统的。这个函数的重点我用红线标出。分别是初始化日志目录与初始化日志分区。
这是由于ext4文件系统可以使用目录作为日志,也可以使用一个分区来作为目录。一般的个人电脑linux都是用目录作为日志的。比如我的linux:
这里写图片描述
jbd2目录下有一个目录sda1-8。指的是日志存储于sda1分区的inode为8的文件中。如果没有inode号,指的是该文件系统用一个分区来作为日志。
由于我的linux中的日志是由在目录中记录的,那么我就来看看第一个函数(函数定义在fs/ext4/super.c中):
这里写图片描述
这里大部分的代码都是在检查错误,比如inode是否在磁盘上,是否可用。重点在于被红线标出的部分,此函数用于初始化日志inode。我们来看看这个函数(函数被定义在fs/jbd2/journal.c中):
这里写图片描述
我看到了一个熟悉的函数jbd2_stats_proc_init,顾名思义,这个函数应该就是用来初始化jbd2目录中的文件的。进去看看(该函数被定义在fs/jbd2/journal.c中):
这里写图片描述
可以看到,这里info被创建,且是一个只读文件。我们再进被标出的结构体。
这里写图片描述
可以看到,这里定义了对文件的操作函数。由于我们主要用的是打开和读取文件操作。所以我们可以进我们感兴趣的函数中一窥。这里看一下jbd2_seq_info_open函数。
这里写图片描述
然后看一下打开操作的结构体。
这里写图片描述
这里重点在被红线标出的函数。进去看一下。
这里写图片描述
此函数把日志的统计信息写到打开文件的private_data指向的seq_file里。
上面的这些结构体和函数都是在fs/jbd2/journal.c中。
看完了打开操作,大家可以自己再看一下读操作。我这里就不展示了。
上面我在各函数间跳的比较多,可能大家看的眼花缭乱的。我这里制作一张图来展示一下上面介绍的这些函数之间的调用关系。
这里写图片描述
我这篇博客讲的是左边的这条线。右边的是分区作为日志的路线。当然我这里讲的比较粗线条,只是大概讲了一下info中的信息是从哪里来的。更细的东西还得继续深入分析源码才行。

四、总结

本篇博客主要分析了jbd2目录下的文件信息的来源。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值