Ext3文件系统

目录

Ext3 文件系统

背景

时间:2002年左右问世

增强:相较于ext2的基础上增加了日志,可以实现崩溃恢复

题外话:​ext4在ext3的基础上增加了一些优化,比如checksum

特点

  1. 使用WAL实现崩溃恢复
  2. 在内存中
    • Block cache
    • 每一个事务的记录
  3. 在磁盘上
    • 文件系统
    • 环形日志

Ext3 Log

Tx4 Start —— Tx4 Cmt 之间为一个完整的事务4

在Ext3上日志可以有多个事务,如上图有Tx4,Tx5

在Ext4上日志只能有一个事务,当前事务处理完毕,后续事务需要将其抹除才可继续处理

超级块中有seq(序列号),其指向最早的还没有处理完成的事务。上图的Valid transact说明其已经提交了,但是还没有被抹除。用处:当系统崩溃重启后,可以在找到最开始的事务继续处理。(redo log)

崩溃恢复

在崩溃之前:

  1. 将cache中的data block 写入日志中
  2. 将日志中的blocks写入到磁盘(异步)

在崩溃之后:

  1. 首先需要去磁盘上扫描WAL
  2. 重放所有已经提交的事务, 忽略未提交的事务

并发事务

  1. Ext3日志中允许存在多个事务,允许事务并发处理
  2. 在日志中有一些事务已经处理完毕,但还没来及释放空间,而有的事务仍然在处理
  3. 最多只能由一个事务在接收新的系统调用

WAL 提交的具体步骤

  1. 阻塞新的系统调用
  2. 等待正在运行的系统调用停止
  3. 开启一个新的事务,打开系统调用
  4. 将一系列块号元数据写入磁盘上的日志
  5. 将每一个数据块从cache中写入到磁盘
  6. 等待
  7. 写提交记录到磁盘(这也是一个数据块)
  8. 等待
  9. 异步将缓存块写入到磁盘

Ext3 数据完整性规则 总结

  1. 必须要先写入到日志里面,才能把数据落盘(WAL)
  2. 当buffer里的block还没有写入到日志之前,它不能被淘汰算法换出.(Pin操作)
  3. 只有所有的数据块都落盘后,才能释放磁盘上的log
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦