Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第九十六章:断电时写到一半怎么办

复习

  • 一项文件操作通常会修改内容、目录和元数据等多个位置。

TL;DR

  • 多步持久化更新可能被断电打断,留下互相矛盾的磁盘状态。
  • 文件系统需要安排写入顺序,并设计恢复方法。

正文

  创建一个文件,至少可能涉及分配数据块、写入文件内容、更新 inode、把名字写入目录。若先写目录、后写 inode,而断电发生在中间,目录就可能指向一份不存在的记录。内存里的操作看起来是一次动作,落到设备上却是一连串独立写入。

  崩溃一致性研究的正是:任意写入点突然断电后,系统下次启动能否识别并恢复到可用状态。最简单的办法是严格排序并在启动时检查;更常见的办法是额外记下一份可恢复的修改记录。

  下一章的日志不是给人阅读的日志,而是文件系统为这类意外准备的施工清单。

思考题

为什么把数据块和目录项都“最终写完”仍不一定安全?

小结

  • 持久化更新由多次设备写入构成。
  • 崩溃一致性要求中途停止后仍能恢复。

思考题答案(仅供参考)

  断电可能发生在它们之间,或发生在元数据尚未同步时;不同结构是否彼此对应取决于写入顺序。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。