什么是 posix/linux/文件系统对有序文件写入的持久性保证?

问题描述 投票:0回答:1

假设我有一个(单线程)程序,它(专门)打开一个大文件并执行两次不重叠的写入:

int fd = open(path, O_RDWR);
pwrite(fd, data1, size1, offset1);
pwrite(fd, data2, size2, offset2);
close(fd);

是否有任何保证(通过 posix、linux 或 ext4 等常见文件系统),在电源故障的情况下,data2

no
部分将最终永久存储,除非data1
all
也最终在永久存储?

或者,换句话说,文件(在永久存储中)不会最终处于第二次写入开始而第一次写入尚未完成的状态?

或者我是否必须在写入之间

fsync(fd)
/
fdatasync(fd)
才能实现此目的?

linux file posix persistence durability
1个回答
0
投票

无法保证向文件发出的写入是持久的(即写入稳定存储),或者它们在没有显式同步的情况下保持特定的顺序。

如果耐用性和订购很重要(例如,为了停电安全),您应该:

  1. 写入第一个块(data1)。
  2. 调用fsync(fd)以确保其提交到稳定存储。
  3. 写入第二个块(data2)。
  4. (可选)再次调用 fsync(fd) 来持久化 data2。

这应该保证写入的顺序和持久性。

© www.soinside.com 2019 - 2024. All rights reserved.