从阅读文档来看,自从新数据写入日志以来,它似乎不再就地更新,技术上实现与 CoW 文件系统相同的“原子性”。
那么,有什么东西可以让 CoW 文件系统比带有 data=journal 的 ext4 更“原子”呢?
是否有理论或已证实的案例表明其中一种会/确实比另一种提供更多的碰撞安全性?
或者也许 CoW 可以被视为提供更好性能的“实施细节”?由于性能问题,data=journal 不是默认设置。
答案1
使用 data=journal 运行与 COW 不同,因为它写入所有数据两次每次 - 一旦进入日志,就会提交事务,然后检查点到文件系统并从日志中释放。 COW 文件系统为每次写入分配新块,写入这些新块,进行事务提交,然后(最终)释放旧块(模快照)。
有一个为 SMR 驱动器开发的 ext4 补丁系列,本质上使 data=journal 成为日志结构文件系统模式,其中日志非常大,并且不会将元数据和数据页固定在 RAM 中。日志中的块可能会在那里存在很长时间,而不会在文件系统上设置检查点,直到文件系统从日志中“满”,并且日志必须对旧事务进行检查点。这将导致块最终被写入文件系统,或者重新记录到新事务中。
该 SMR 补丁系列可从以下位置获取:
https://github.com/tytso/ext4-patch-queue/blob/master/series