基于日志结构的文件系统

简单概述

基于日志的面向事务文件系统其实和数据库的基于日志恢复算法可以称为不同领域的算法的不同实现,但其实道理都是一样的

下面我们先去了解下什么是事务

执行单个逻辑功能的一组指令或操作称为事务。处理事务的主要问题是不管出现什么计算机系统的可能失败,都要保证事务的原子性。原子性简单来说就是一件事情要么完全执行,要么什么也不做

基于日志的恢复

确保原子性的一种方法就是在稳定存储上记录有关事务对其访问的数据所做的各种修改的描述信息。实现这种形式记录最为常用的方法就是先记日志后操作

系统在稳定存储上维护一个被称为日志的数据结构。每个日志记录描述了一个事务写出的单个操作,并具有如下域

  • 事务名称:执行写操作事务的唯一名称
  • 数据项的唯一名称
  • 旧值:写操作前的数据项的值
  • 新值:写操作后的数据项的值

其他特殊的日志记录用于记录处理事务的重要事件,比如说事务开始和事务的提交或放弃

现在我们想下磁盘文件系统数据结构比如目录结构、空闲指针、空闲FCB指针,可能因为系统崩溃而发生了错误的更改,就比如说一个文件的创建,可能涉及修改文件系统内的许多结构。修改目录结构,分配FCB,分配数据块,减少这些块的空闲计数。这些修改可能因为系统崩溃而中断,从而产生了数据的不一致,就比如说空闲计数可能表示FCB已经分配了,但是目录结构还没有指向该FCB。除非使用一致性检查程序,否则该FCB可能就丢失了

一致性检查程序的由来就是,如果我们考虑计算机崩溃所产生的影响,缓冲和缓存的内容、正在进行的I/O操作和与之相关的对打开文件的目录的修改都会丢失,这种事件就会导致文件系统处于一个不一致的状态,有的文件真实状态与目录结构所记录的不一样,所以这个时候就需要一个检查和纠正磁盘不一致的特殊程序需要在重启的时候运行

虽然说可以通过一致性程序来检查错误和恢复,但是还是很有可能是无法修复的,因为对于索引分配系统来说,数据块之间是没有什么联系的,所以这样就有可能会导致很多错误的发生,会导致文件甚至整个目录的丢失

下面简单举个例子,当我们要修改一个文件的时候,就会把我们要修改的这个操作也可以称为事务给写到日志上面去就可认为已经提交了,这样系统调用就可以返回到用户的进程了,允许这个进程继续执行,然后再根据这些日志对真实的文件系统结构进行修改,随着修改的进行,可以不断得更新一个指针以表示哪些操作已完成,哪些操作没有完成

当一个完整的事务已经完成之后,那么就可以从日志文件当中删除这条记录了,日志文件系统其实是个环形缓冲,环形缓冲写到空间末尾的时候,会从头开始写,从而覆盖掉以前的旧值。环形缓冲肯定无法覆盖掉还没有处理完成的事务

对磁盘元数据进行更新采用日志的另一个好处就是这些更新比直接在磁盘上进行要更快。这种改善原因是顺序程序I/O比随机I/O的性能要好。低效率的同步随机元数据的写操作转换为较高效的同步顺序写操作(基于日志文件系统的记录区域)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值