没有合适的资源?快使用搜索试试~ 我知道了~
首页基于ext3的内核日志模块分析
基于ext3的内核日志模块分析
![](https://csdnimg.cn/release/wenkucmsfe/public/img/star.98a08eaa.png)
基于ext3的内核日志模块分析,源码分析,里面内容丰富,比较系统,供大家学习!
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/10826281/bg1.jpg)
一、 前言——为什么要写这篇文章.......................................................................................3
二、 提出问题——jbd 要解决什么问题.................................................................................4
三、 解决问题——jbd 是如何解决的.....................................................................................5
1. 将对文件系统的某些操作抽象成原子操作................................................................5
2. 将若干个原子操作组合成一个事务............................................................................5
3. 在磁盘上单独划分一个日志空间................................................................................5
4. 将内存中事务的数据写到日志中................................................................................6
5. 崩溃吧,然后我们从日志中恢复数据........................................................................6
四、 介绍几个概念——名正然后言顺...................................................................................7
1. buffer_head......................................................................................................................7
2. 元数据块.........................................................................................................................7
3. handle..............................................................................................................................7
4. transaction.......................................................................................................................7
5. journal..............................................................................................................................7
6. commit.............................................................................................................................8
7. checkpoint.......................................................................................................................8
8. revoke..............................................................................................................................8
9. recover.............................................................................................................................8
10. kjournald........................................................................................................................8
五、 介绍几个数据结构——珍珠...........................................................................................9
1. handle_t...........................................................................................................................9
2. transaction_t....................................................................................................................9
3. journal_t.........................................................................................................................11
4. journal_superblock_t.....................................................................................................14
5. journal_head..................................................................................................................15
6. journal_header_t............................................................................................................16
六、 日志在磁盘上的布局——一图胜千言.........................................................................17
1. 超级块 JFS_SUPERBLOCK_V1、JFS_SUPERBLOCK_V2...................................17
2. 描述符块 JFS_DESCRIPTOR_BLOCK......................................................................18
3. 提交块 JFS_COMMIT_BLOCK..................................................................................21
4. 取消块 JFS_REVOKE_BLOCK..................................................................................21
5. 日志布局.......................................................................................................................22
七、 三种日志模式..................................................................................................................24
1. 日志(journal )..........................................................................................................24
2. 预定(ordered )..........................................................................................................24
3. 写回(writeback )......................................................................................................24
八、 jbd 基本操作....................................................................................................................25
1. journal_start...................................................................................................................25
2. journal_stop...................................................................................................................25
3. journal_get_create_access.............................................................................................27
4. journal_get_write_access..............................................................................................29
5. journal_get_undo_access..............................................................................................32
6. journal_dirty_data.........................................................................................................34
7. journal_dirty_metadata.................................................................................................35
1
![](https://csdnimg.cn/release/download_crawler_static/10826281/bg2.jpg)
8. journal_forget................................................................................................................36
9. journal_revoke...............................................................................................................38
10. journal_extend.............................................................................................................42
11. 元数据缓冲区处理流程.............................................................................................43
12. 数据缓冲区处理流程.................................................................................................46
九、 等待提交事务 kjournald——我们时刻准备着.............................................................49
十、 提交事务——我们放心了.............................................................................................51
1. journal_commit_transaction.........................................................................................51
2. __journal_clean_checkpoint_list..................................................................................62
3. journal_submit_data_buffers........................................................................................63
4. journal_write_revoke_records......................................................................................66
5. journal_write_metadata_buffer.....................................................................................68
6. journal_write_commit_record.......................................................................................70
十一、 数据块缓冲区状态转移图.........................................................................................72
十二、 元数据块缓冲区状态转移图.....................................................................................73
十三、 恢复日志——奇迹发生了.........................................................................................75
1. 恢复前的准备工作.......................................................................................................75
2. journal_recover 函数.....................................................................................................75
3. 恢复步骤 1:PASS_SCAN..........................................................................................76
4. 恢复步骤 2:PASS_REVOKE....................................................................................79
5. 恢复步骤 3:PASS_REPLAY.....................................................................................83
6. 恢复后的设置工作.......................................................................................................87
十四、 参考资料......................................................................................................................90
2
![](https://csdnimg.cn/release/download_crawler_static/10826281/bg3.jpg)
journal block device (jbd)源代码分
析
——ext3 日志机制分析
一、 前言——为什么要写这篇文章
在阅读 ext3 源代码的时候,才对什么是日志型文件系统有了更深刻的了解。内核里单
独抽象了一个层次,称之为 journal block device,简称为 jbd,位于 fs/jbd/目录,专门用于
块设备的日志管理。细数其源代码,不到万行,但是相关的分析资料,少之又少,有两篇
介绍 jbd 概念的,说得比较清楚,但是对着源代码看,仍然不得要领。于是痛下苦功,反
复阅读代码,力求得到正解,今感觉略有小成,写出来供大家学习、批评指正,以期去伪
存真。
本文分析的内核代码版本 2.6.35,主要是 fs/jbd 和 fs/ext3 两个目录。本文假设物理磁盘
块大小 512B,文件系统块大小 1KB。文件系统组织物理磁盘块时是以格式化时设定的块大
小为单位的,称谓文件系统块,下文有时会为了行文方便,称文件系统块为磁盘块。
读者在阅读本文前,最好对 Linux VFS 和 ext2 的相关概念比较熟悉,比如 inode、磁盘
块位图、三级磁盘块索引、块组等等。
纸上得来终觉浅,绝知此事要躬行”。希望本文能够起到一个抛砖引玉的作用,要想
获得更多的收获,还是得靠自己分析源代码。源码在前,了无秘密。
还有一点说明,我想将本文写成一篇技术文章,并不想写成论文,所以在参考文献的
引用方面就不严格按照写论文的方式了,那样太费时间。我把主要的参考文献集中放在文
章的末尾。建议读者可以先读读参考文献,再阅读本文。
限于水平有限,代码中有些逻辑我还是没有搞清楚的,有些英文的翻译也欠斟酌,文
章排版、详略、章节布局等也有很多待改进的地方。希望大家提出宝贵修改建议。
作者:潘卫平 邮件:panweiping3@163.com 博客:pwp.cublog.cn
3
![](https://csdnimg.cn/release/download_crawler_static/10826281/bg4.jpg)
二、 提出问题——jbd 要解决什么问题
本章主要是说明 jbd 要解决什么问题,或者说 ext2 的缺点在哪里,因为 ext3 与 ext2 的
主要差别就在于 ext3 在 ext2 的基础上增加了日志功能。
假设你正在运行一个 Linux 系统,运行一个程序,在一个 ext2 分区上不断地读写磁盘
文件。突然断电了,或者系统崩溃了,你的心里肯定会咯噔一下:“磁盘分区没坏吧?文件
还完整么?”告诉你一个不幸的消息,文件可能不完整了,文件可能已经损坏了,甚至该分
区不能再被挂载了。也就是说,意外的系统崩溃,可能会使 ext2 文件系统处于一个不一致
的状态。
假设你的运气好一点,分区仍能被识别,但是重新挂载时,如果发现分区处于不一致
状态,那么系统会自动调用 fsck 程序,尝试将文件系统恢复到一致的状态。那将是一个非
常漫长的过程,并且随着磁盘容量的增大,花费的时间也越长,有时需要长达几个小时。
这样会极大地影响系统的可用性。
总之,jbd 的主要目的不是减少系统崩溃的概率,而是系统正常运行时,尽量使文件系
统处于一个一致的状态,以及系统崩溃后,尽可能减少使文件系统重新处于一致性状态的
时间。通过减少维护时间,增加系统的可用性。
4
![](https://csdnimg.cn/release/download_crawler_static/10826281/bg5.jpg)
三、 解决问题——jbd 是如何解决的
本章从总体上说明 ext3 采用什么方式解决第二章提出的问题。
提到一致性,大家可能会联想到数据库里面的事务的概念,因为事务有四个基本属性:
1) 原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
2) 一致性
事务在完成时,必须使所有的数据都保持一致状态。
3) 隔离性
由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务识别数据时数
据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之
后的状态,事务不会识别中间状态的数据。
4) 持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保
持。
文件系统的开发者借用了数据库中事务的思想,将其应用于文件系统上,以期保证对
文件系统操作的原子性、隔离性,尽量使文件系统处于一致性。
1. 将对文件系统的某些操作抽象成原子操作
所谓原子操作,就是内部不再分割的操作,该操作要么完全完成,要么根本没有执行,
不存在部分完成的状态。
那么,什么样的操作可以看成对文件系统的原子操作呢?往一个磁盘文件中追加写入
1MB 字节可以看成一个原子操作么?这个操作其实比较大,因为要写 1MB 的数据,要为
文件分配 1024 个磁盘块,同时还要分配若干个索引块,也会涉及到很多的磁盘块位图、块
组块的读写,非常复杂,时间也会比较长,中间出问题的机会就比较多,所以不适宜看做
一个原子操作。
那么,什么样的操作可以看成对文件系统的原子操作呢?比如说为文件分配一个磁盘
块,就看成一个原子操作就比较合适。分配一个磁盘块,可能需要修改一个 inode 块、一
个磁盘块位图、最多三个间接索引块、块组块、超级块,一共最多 7 个磁盘块。将分配一
个磁盘块看成一个原子操作,意味着上述修改 7 个磁盘块的操作要么都成功,要么都失败,
不可能有第三种状态。
2. 将若干个原子操作组合成一个事务
实现日志文件系统时,可以将一个原子操作就作为一个事务来处理,但是这样实现的
效率比较低。于是 ext3 中将若干个原子操作组合成一个事务,对磁盘日志以事务为单位进
行管理,以提高读写日志的效率。
3. 在磁盘上单独划分一个日志空间
日志,在这里指的是磁盘上存储事务数据的那个地方,即若干磁盘块。它可以以一个
单独的文件形式存在,也可以由文件系统预留一个 inode 和一些磁盘块,也可以是一个单
5
剩余63页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/bb4693f89b15442b9bb2ccaadcdddab7_qq_22613757.jpg!1)
wfs1874
- 粉丝: 177
- 资源: 20
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- BSC关键绩效财务与客户指标详解
- 绘制企业战略地图:从财务到客户价值的六步法
- BSC关键绩效指标详解:财务与运营效率评估
- 手持移动数据终端:常见问题与WIFI设置指南
- 平衡计分卡(BSC):绩效管理与战略实施工具
- ESP8266智能家居控制系统设计与实现
- ESP8266在智能家居中的应用——网络家电控制系统
- BSC:平衡计分卡在绩效管理与信息技术中的应用
- 手持移动数据终端:常见问题与解决办法
- BSC模板:四大领域关键绩效指标详解(财务、客户、运营与成长)
- BSC:从绩效考核到计算机网络的关键概念
- BSC模板:四大维度关键绩效指标详解与预算达成分析
- 平衡计分卡(BSC):绩效考核与战略实施工具
- K-means聚类算法详解及其优缺点
- 平衡计分卡(BSC):从绩效考核到战略实施
- BSC:平衡计分卡与计算机网络中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)