应用程序崩溃和文件系统一致性

时间:2019-05-03 22:27:12

标签: crash filesystems consistency

在文件重命名的应用程序崩溃但文件系统正常的情况下,一致性保证是什么?

关于如何确保数据在文件系统崩溃中幸免(由于断电等),有很多文献,但是我找不到关于如何确保数据在应用程序崩溃中幸免的讨论。 / p>

具体来说,如果我有一个文件foo.txt,其初始内容为foo...(长度为> 4k)并运行

FILE* f = fopen("foo.txt.tmp", "w");
char buf[] = "bar...";  // sizeof(buf) > 4k
fwrite(buf, sizeof(char), sizeof(buf), f);
fclose(f);
rename("foo.txt.tmp", "foo.txt")

是否可以确保在文件系统运行状况良好的情况下,任何读取foo.txt的应用程序只能看到foo...bar...?还是在fsync(f)之前没有fclose)意味着单独的应用程序可能会看到某些中间状态?

我用一个写入线程和多个并发读取线程进行了模糊测试,该测试没有观察到任何部分状态,但这并不一定排除观察到部分状态的可能性。

我对Linux下ext4文件系统的行为最感兴趣。

0 个答案:

没有答案