Linux日志文件系统的工作原理

本文详细解析了Linux ext4日志文件系统的工作原理,包括Systemcall到Journal log的备份过程,kjournald2线程的作用,以及checkpoint机制确保数据一致性。重点介绍了写入、提交和清理Journal log的流程。
摘要由CSDN通过智能技术生成

Linux日志文件系统的工作原理

(2013-01-28 15:23:04)
标签:

杂谈

kernel

journal

filesystem

ext4

分类: 文件系统
Linux ext4日志文件系统的基本概念
(本文是日志文件系统的实现概念,不涉及具体函数实现)

什么是日志文件系统:

日志(Journal)文件系统比非日志文件系统多了一个Journal,即记录上层(system call)对文件系统修改行为的数据。简而言之,就是将对File System的修改在Journal区域先备份一份,然后在写道真正的File system区域。如果数据在写到File system的时候发生了Power fail而导致数据不完整,那么下次启动的时候就会从Journal区域把备份的数据再写一遍到Filesystem,这样file system和journal就保持一致了。

ext4 Journal和File System的工作流程:

File System的工作流程和无Journal的流程基本一样。System call -> VFS -> ext4 -> Block device。不同点是在向文件系统写数据前会先产生一个Journal log,这些log在commit到disk的journal区域之前在内存里被一个transaction管理着。那么什么时候将内存里的transaction commit到disk上呢?线程kjournald2就是负责提交这些transaction的。kjournald2定时被唤醒(default是5秒)或被其他线程主动唤醒,检查有无transaction要commit,若有,并且log对应的data还没有被写到disk的filesystem上(如果data已经写到disk上则该log无需commit),则commit log,并将该log放到checkpoint list上。至此提交journal log就完成了。还有一个问题,disk上的journal区域是有限的,不可能无限制的写入journal log。当数据写到disk filesystem上后,disk上Journal区域的log就不需要了,就应该删除这些log,腾出空间给后面的log用。所以还有一套checkpoint机制来删除journal区域的log。这套删除机制大约是这样的:当要生成新的journal log时首先检查disk上的journal区域是否还有空间容纳新的log,如果没有则启动checkpoint流程,等待checkpoint完成后有空闲的区域腾出来接受新log(start_this_handle -〉__jbd2_log_wait_for_space-〉jbd2_log_do_checkpoint)。checkpoint流程是这样的(实现在jbd2_log_do_checkpoint):检查checkpoint list看已commit的journal log所对应的data有没有写到disk上,如果已经写上去了,就从journal区域删掉log(删掉log实现在jbd2_cleanup_journal_tail)。如果还没有写上去,则在这里将data写到file system,然后将log从journal区域删掉。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值