写入块设备时的部分 fsyncs

写入块设备时的部分 fsyncs

我直接在块设备之上编写自己的数据存储。为了确保持久性,我想同步到磁盘。但事情是这样的:我只想同步其中的一部分。

我保留了一份用于崩溃恢复的日志,并将未来的更改写入日志,然后再将它们应用到磁盘上的实际位置。然后我想确保日志更改写入磁盘,然后才对磁盘的其余部分进行实际更改(我不关心 fsync,直到我检查日志)。

我可以简单地同步整个块设备,但这会迫使很多不紧急的事情被写出。

我想到了两种选择,但令我惊讶的是没有部分 fsync(2) 调用,而且从我发现的情况来看,没有人要求它。

  1. mmap(2) 完整的块设备及使用同步(2)同步其中的一部分。
  2. 打开(2)块设备两次,一次O_SYNC用于延迟写入,一次用于我的日记写入。

答案1

有一个Linux特定的系统调用:同步文件范围()

(旁注,使用块设备不能移植到自由BSD

相关内容