知识卡片

日志与事务实现磁盘写入的原子性

专业/工作 · 514.b

内容

磁盘写入过程中断电或宕机,可能导致数据只写了一半、新旧数据混杂在一起。解决办法是把一次修改要做的所有操作打包成一个事务,先整体作为一条日志写入日志盘并持久化(journal submit),再把数据实际写入对象文件(journal apply),最后确认数据真正落盘后才删除对应日志(journal sync)。这套机制能生效的前提是所有更新操作必须幂等——因为提交阶段中断时日志被直接丢弃(数据未改,安全);应用阶段中断时系统重启后要重放(replay)日志重新写一遍,如果操作不是幂等的,重放就可能产生错误的结果。日志的作用本质是把”一次修改”变成”先记录意图、再执行、意图和执行结果最终必须一致”的可恢复流程。

参考来源

《Ceph源码分析》第7章《本地对象存储》