linux - 我们是否需要 fsync UBIFS 中的父目录以进行原子 * 和 * 持久文件更新

标签 linux filesystems fsync ubifs

这是 typical and well-known approach对于原子 文件更新:

fd = open(“foo.new”, O_WRONLY);
write(fd, buf, bufsize);
fsync(fd);
close(fd);
rename(“foo.new”, “foo”);

一般来说,如果我们还需要持久性(即保证在发生崩溃时文件的版本可用),那么我们还需要在父目录上调用 fsync

问题:UBIFS 也需要这个吗? documentation说:

fsync() may be called for directories - it synchronizes the directory inode meta-data. [...]

The fdatasync() call for directories is "no-op" in UBIFS and all UBIFS operations which change directory entries are synchronous.

如果我没看错的话,后者(“所有更改目录条目的 UBIFS 操作都是同步的”)似乎暗示在父目录上调用 fsync 是不必要的。然而,我的测试似乎表明并非如此。我是否误读了文档,或者此信息是否已过时?

最佳答案

我在 MTD 邮件列表上询问过;似乎文档含糊不清,calling fsync on the parent dir is necessary与其他文件系统一样。

关于linux - 我们是否需要 fsync UBIFS 中的父目录以进行原子 * 和 * 持久文件更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53702698/

相关文章:

macos - OSXFUSE - "local"安装选项到底是什么意思?

python - 在 stdout/stderr 文件描述符上调用 os.fsync 会杀死一个子进程

python - 子进程调用的重定向输出丢失了吗?

c++ - C++ : How to correctly actualize a file against power loss?

linux - 如果 CPU 使用率持续高于一定数量,则发送警报电子邮件

linux - 相同的 Docker 镜像在一台主机上转发 X11 但在另一台主机上不转发

sql-server - SYN 收到 RST,ACK 非常频繁

c++ - 文件修改或文件打开时的断点

c - 找出一个进程一次可以打开的最大信号量数

perl - perl 中的 Unicode,mkdir 练习