我正在直接在块设备之上编写自己的数据存储。为了确保持久性,我想同步到磁盘。但事情是这样的:我只想同步其中的一部分。
我保留了一份用于崩溃恢复的日志,并将未来的更改写入日志,然后再将它们应用到磁盘上的实际位置。然后我想确保日志更改写入磁盘,然后才对磁盘的其余部分进行实际更改(我不关心 fsync,直到我检查日志)。
我可以简单地同步整个块设备,但这会迫使很多不紧急的事情被写出。
我想到了两种选择,但令我惊讶的是没有部分 fsync(2) 调用,而且从我发现的情况来看,没有人要求它。
我正在直接在块设备之上编写自己的数据存储。为了确保持久性,我想同步到磁盘。但事情是这样的:我只想同步其中的一部分。
我保留了一份用于崩溃恢复的日志,并将未来的更改写入日志,然后再将它们应用到磁盘上的实际位置。然后我想确保日志更改写入磁盘,然后才对磁盘的其余部分进行实际更改(我不关心 fsync,直到我检查日志)。
我可以简单地同步整个块设备,但这会迫使很多不紧急的事情被写出。
我想到了两种选择,但令我惊讶的是没有部分 fsync(2) 调用,而且从我发现的情况来看,没有人要求它。
有一个 Linux 特定的系统调用:sync_file_range()
(旁注,使用块设备不能移植到FreeBSD)