Ext3 文件系统
背景
时间:2002年左右问世
增强:相较于ext2的基础上增加了日志,可以实现崩溃恢复
题外话:ext4在ext3的基础上增加了一些优化,比如checksum
特点
- 使用WAL实现崩溃恢复
- 在内存中
- Block cache
- 每一个事务的记录
- 在磁盘上
- 文件系统
- 环形日志
Ext3 Log
Tx4 Start —— Tx4 Cmt 之间为一个完整的事务4
在Ext3上日志可以有多个事务,如上图有Tx4,Tx5
在Ext4上日志只能有一个事务,当前事务处理完毕,后续事务需要将其抹除才可继续处理
超级块中有seq(序列号),其指向最早的还没有处理完成的事务。上图的Valid transact说明其已经提交了,但是还没有被抹除。用处:当系统崩溃重启后,可以在找到最开始的事务继续处理。(redo log)
崩溃恢复
在崩溃之前:
- 将cache中的data block 写入日志中
- 将日志中的blocks写入到磁盘(异步)
在崩溃之后:
- 首先需要去磁盘上扫描WAL
- 重放所有已经提交的事务, 忽略未提交的事务
并发事务
- Ext3日志中允许存在多个事务,允许事务并发处理
- 在日志中有一些事务已经处理完毕,但还没来及释放空间,而有的事务仍然在处理
- 最多只能由一个事务在接收新的系统调用
WAL 提交的具体步骤
- 阻塞新的系统调用
- 等待正在运行的系统调用停止
- 开启一个新的事务,打开系统调用
- 将一系列块号元数据写入磁盘上的日志
- 将每一个数据块从cache中写入到磁盘
- 等待
- 写提交记录到磁盘(这也是一个数据块)
- 等待
- 异步将缓存块写入到磁盘
Ext3 数据完整性规则 总结
- 必须要先写入到日志里面,才能把数据落盘(WAL)
- 当buffer里的block还没有写入到日志之前,它不能被淘汰算法换出.(Pin操作)
- 只有所有的数据块都落盘后,才能释放磁盘上的log