附加到文件并确保崩溃时为零?

问题描述

我正在尝试了解崩溃的可能结果 写在文件末尾。在这里,碰撞可能会被杀死 由于SIGKILL,操作系统出现紧急情况或电源故障。这是在 编写命令日志文件以供以后重播。我的问题 考虑的是一致性,而不是持久性。

命令日志的实现如下。当一个 事务启动后,将单字节txn-open标记写入 文件。代表命令中任意数量的字节 交易可能随之而来。提交时,调用fsync()刷新所有 数据到文件。接下来,将txn-open标记覆盖 txn提交的标记和另一个fsync()被执行。阅读时 崩溃后返回此文件,将txn-open标记视为结尾 文件。第一个fsync()是为了保持一致性,第二个是为了保持一致 耐久性。

现在,崩溃后在文件中会留下什么样的垃圾崩溃 写入(或在写入期间)txn-open,也许还有一些字节 命令?

通常,答案似乎是任何垃圾都可以在那里 可以使用校验和以高概率检测到。据我 可以看出,ext4 data = writeback就是这种情况。这是真的吗?

在较新的文件系统上,例如ext4 data = ordered,我希望 以垃圾结尾是不可能的。更确切地说,必要的 上述算法正确性的条件是 单字节开放交易标记的写入被重新排序 在随后的命令写入中,标记将在那里或 零字节将代替它。 ext4 data = ordered是否成立? 这是否适用于当今常用的文件系统(不仅限于Linux)?

第三个fsync()-写开放交易后的这个{ 标记-排除多个方块被 涉及,但将垃圾与附加的问题留空。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)