16|日志型文件系统:写入文件的时候断电了会发生什么?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
日志型文件系统是操作系统中用于管理文件的子系统,通过建立一系列数据结构,抽象出基础的文件访问能力,保证数据的可持久化。文章介绍了崩溃一致性问题的本质,即在写文件时可能出现的一致性问题,以及如何解决这一问题。文件系统中引入元数据带来了灵活性的同时,也带来了问题,每次写文件的操作实际上是一个操作序列,而不是一个单一的操作,这就引入了崩溃一致性问题。解决方案包括早期的FSCK机制和日志机制。FSCK机制通过挂载磁盘的时候检查错误并修复来解决问题,但其执行时间较长。相比之下,日志型文件系统采用日志机制,通过记录文件系统操作的日志,可以在系统崩溃后恢复到一个合法的状态,从而解决了崩溃一致性问题。文章深入浅出地介绍了文件系统的存储方式、元数据的问题以及解决方案,为读者提供了深入了解文件系统的基础知识。 日志型文件系统的核心思想是预写日志(WAL),即在执行真正的操作之前,先记录下要做的操作,以保证系统在崩溃后能恢复到正确状态。通过引入事务的概念,每次写文件操作都会记录对Inodes和Bitmaps的修改,并在记录前后引入事务开始和结束记录,从而实现原子性。日志的组织形式由一系列事务拼接而成,当系统崩溃时,可以根据日志恢复文件系统到合法状态。文章还提到了崩溃出现在不同阶段的处理方式,以及对日志记录方式的优化,如批量日志更新和只记录元数据等。通过引入预写日志的手段,日志型文件系统解决了文件状态不一致的问题,相比于传统的FSCK机制,提高了系统的恢复效率和性能。 总的来说,日志型文件系统通过引入预写日志的机制,解决了崩溃一致性问题,保证了文件系统的可靠性和一致性。同时,文章还提到了对日志记录方式的优化,为读者提供了深入了解文件系统的基础知识,并鼓励读者思考如何进一步提高文件系统的性能。
《业务开发算法 50 讲》,新⼈⾸单¥59
全部留言(14)
- 最新
- 精选
- 有铭原来以前windows xp和更老的系统在非正常关机后,再开机就会有一个蓝屏在那扫啊扫的读磁盘,就是在干FSCK?
作者回复: 哈哈哈 我觉得很可能是 不过也不是完全确定
2022-01-212 - blentle限制应该是写入块的公平性吧.
作者回复: blentle同学你好。 重要的是如果让几个不同的元数据和data block数据按照磁盘调度的顺序写入;一定也要保证commits操作是一个单独的阶段;也就是正式写入TxE之前,之前的所有写操作已经完成。 否则断电发生时,即使引入了日志机制,也仍然会有产生脏数据的风险。 可以加wechat: constant_variation 一起打卡学习
2022-01-1522 - 女干部被作者的知识储备量吓到了
作者回复: 哈哈哈 其实认真的话好好积累一年可能就可以了;多看一些经典的计算机课程更好; 我自己储备其实还很有待提高的 一起加油 可以加我微信 constant_variation
2022-02-251 - 阿甘怎么发现事务以及提交了,但是实际文件操作没有成功呢?是不是有一个当前已经提交的事务id?如果是的话这个id的更改是不是要是事务性的?
作者回复: 事实上,并不会真的去主动发现这件事。如果出现崩溃,文件系统会直接从checkpoint开始往后执行redo log里的所有指令。 另外事务ID就是一个自增的值而已,本身就是原子的操作。
2022-01-26 - 春风那么MySQL的redo log所谓的顺序写入,其实也要写几处地方吗?
作者回复: 我理解数据库里面也有元数据等信息;一条数据的插入需要修改的地方很多;比如索引等。具体和不同的DBMS实现有关。
2022-01-22 - HappyHassonjournaling log占用空间大小怎么设定,按照图解,应该不能弹性扩展吧,如果jouraling预留空间不够,会有数据搬迁?2022-04-071
- Jagger优化里提到,日志只记录元数据,不记录数据块,是否意味着要数据块区先确保数据块写完,才能记录TxE?2023-02-04归属地:上海
- 平凡是唯一答案这个文章前面说了一句: 以及许多类似于 inode 这样的元数据的数据结构。 后面解释索引节点区的时候,说了这样一句: Inode 也是元数据主要存储的地方。 请问,这个文章当中,Inode 和 元数据 ,到底是什么关系? Inode就是元数据,还是说,Inode是存储元数据的区域啊?2022-12-29归属地:北京
- 平凡是唯一答案这里有个阅读理解上的问题。 上文说,Linux将「文件」划分成几块区域:至少包括:超级块、索引节点区、数据块区。 下文开始具体说这几个区域。其中解释「超级块」的时候,是这样解释的。 超级块,是「文件系统」的第一个块。 那么,这里从阅读上就有歧义。Linux到底是将「文件」划分成了三个块,还是将「文件系统」划分成了三个块? 这里的「文件」和「文件系统」是个什么关系?2022-12-29归属地:北京
- 全麦小面包用单片机往闪存写状态的例子,除了预写日志的方式,我觉得也可以额外加1个状态:"写入中"。 写入前将"写入中"状态置为1,写入完成后将"写入中"状态置为0。 若中间突然断电,重启后,因"写入中"状态为1,将所有状态擦除,置为默认值(就是不知道是否有默认值?还有,这样直接丢掉上一次操作是否可行?)。 麻烦老师指点下,谢谢~2022-09-27归属地:上海