fdatasync()在目录描述符上使用时的语义是什么?



具体来说,如果我只关心目录结构而不关心时间戳或其他目录元数据,可以使用fdatasync代替fsync。如果可以,它是否有任何性能优势?

POSIX定义这个吗?常见的操作系统,例如Linux和FreeBSD,是做什么的?

从VFS API的角度来考虑,它通常实现为:同步内容+可选的元数据。在目录中,它的意思是:同步一些子元数据+可选的自己的元数据。

但是,最终如何处理它取决于文件系统。

如果属性元数据像unix文件系统那样部分解耦,那么它可能不会被刷新,但在其他文件系统上它可能被存储在一起,如FAT16存储:文件名、属性、时间戳、集群#

从磁盘数据结构的角度来看,在类unix文件系统中,例如ext4,条目包含:inode#、条目长度、类型和文件名。然后是inode实际存储属性,如权限,时间戳等。

BTRFS虽然要复杂得多,但仍然遵循unix文件系统的传统,并存储:inode键、名称和类型,而inode项存储权限、时间戳等。

在这个传统中还有:

  • li> NTFS
  • XFS
  • UFS/UFS2 FFS
  • MINIX
  • F2FS
  • JFS
  • BFS
  • VxFS
  • ODS-2 (VMS)
  • UDF

选择实现:

  • ReiserFS和Reiser4(时间戳与inode分开存储)

但是,即使在unix文件系统中,哪些元数据被刷新也很大程度上取决于实现,并且只在较小程度上取决于底层磁盘上的格式考虑。

最新更新