【发布时间】:2011-04-15 10:56:40
【问题描述】:
在 POSIX 文件系统中持久重命名文件的正确方法是什么?特别想知道 目录 上的 fsync。 (如果这取决于 OS/FS,我问的是 Linux 和 ext3/ext4)。
注意:StackOverflow 上还有其他关于持久重命名的问题,但 AFAICT 他们没有解决对目录进行 fsync 的问题(这对我来说很重要 - 我什至没有修改文件数据)。
我目前有(在 Python 中):
dstdirfd = open(dstdirpath, O_DIRECTORY|O_RDONLY)
rename(srcdirpath + '/' + filename, dstdirpath + '/' + filename)
fsync(dstdirfd)
具体问题:
- 这是否也隐式地 fsync 源目录?或者我可能会在重启后在两个目录中都显示该文件(这意味着我必须检查硬链接计数并手动执行恢复),即无法保证持久的原子移动操作?
- 如果我同步源目录而不是目标目录,是否也会隐式同步目标目录?
- 是否有任何有用的相关测试/调试/学习工具(故障注入器、自省工具、模拟文件系统等)?
提前致谢。
【问题讨论】:
标签: directory posix rename ext4 fsync