【问题标题】:Does fsync of a parent directory guarantee synchronization of meta data of all recursive sub directories?父目录的 fsync 是否保证所有递归子目录的元数据同步?
【发布时间】:2013-07-12 13:49:25
【问题描述】:

目前我正在编写一个需要在本机端处理大量文件的 Android 应用程序。

最近我在更新或重命名这些文件时遇到了几个数据丢失或不一致的问题。 (所有这些文件都存储在一个公共父/根目录的几个子目录中。)

在阅读了几篇关于 fsync() 的文章后,我决定使用它。 但是我有一件事不清楚:

在父目录上调用 fsync() 是否保证所有子目录的元数据递归同步?

也就是说,假设我对一个公共父目录中不同子目录中的多个文件进行了很多重命名操作。

那么我应该在每个子目录上分别调用 fsync() 还是在父目录上调用 fsync() 足以确保所有子目录(及其子目录递归)的元数据与物理同步设备?

基本上,这个想法是通过避免多次 fsync() 调用来节省时间。或者与每个单独的子目录上的 fsync() 相比,顶级目录上的 fsync() 是否需要更多时间? (假设顶层目录的 fysnc() 同步所有子目录元数据)

【问题讨论】:

    标签: android linux native ext4 fsync


    【解决方案1】:

    当在目录上调用 fsync 时,操作会将其目标视为文件而不是文件容器。从文件系统的角度来看,目录是一种特殊类型的文件,它恰好包含有关其他文件的元数据。当 fsync 应用于目录时,包含文件的元数据会同步,但子目录/文件本身不会同步。

    如果你想确保所有内容都正确同步,那么你应该明确地同步它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      相关资源
      最近更新 更多