仅刷新文件元数据

8 c++ unix winapi file linux-kernel

我们正在开发一种新的ACID数据库系统,该系统更注重数据完整性而不是吞吐量.其存储引擎直接访问辅助存储设备中包含的标志O_DIRECTFILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERING.

在某些情况下,我们只使用fallocate()或等内核函数更改文件元数据SetFileValidData()- 在这些情况下,我想刷新元数据而不是所有未决文件I/O,以便在调用阻塞时利用执行性能,直到设备报告传输已完成- 即使没有使用文件缓冲,它仍然只适用于应用程序数据,文件系统仍然可以缓存文件元数据.

到目前为止,我已经发现fsync()FlushFileBuffers()刷新了元数据,但遗憾的是它还刷新了所有待处理的I/O. 有人知道刷新文件元数据的方法吗?此问题适用于Linux,UNIX和Windows.

Mav*_*vla 2

我是FS新手。但是,当您执行任何物理 FS(ext4/ext3/等)的实现时,它们并没有向上层公开此类功能。但在 fsyc() 实现内部,它们仅更新文件的元数据,其余任务委托给 generic_block_fdatasync()。您可能想编写一个 hack 来满足仅刷新元数据的要求。