具体来说,如果我只关心目录结构而不关心时间戳或其他目录元数据,可以使用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文件系统中,哪些元数据被刷新也很大程度上取决于实现,并且只在较小程度上取决于底层磁盘上的格式考虑。