ブロックデバイスに書き込むときの部分的なfsync

ブロックデバイスに書き込むときの部分的なfsync

私はブロックデバイスの上に直接データストアを作成しました。耐久性を確保するためにディスクに同期したいと思います。しかし問題はこんな感じです。一部だけ同期したいです。

私はクラッシュ回復のためにログを保持し、ディスクの実際の場所に適用する前に、将来の変更をログに記録します。その後、残りのディスクに実際の変更が適用される前に、ログの変更がディスクに書き込まれていることを確認したいと思います(ログを確認するまでfsyncに興味はありません)。

ブロックデバイス全体を簡単に同期できますが、そうすることで緊急ではない多くの項目を記録する必要があります。

私は2つのオプションを考えましたが、部分的なfsync(2)呼び出しがないという事実に驚きました。

  1. mmap(2) 完全なブロックデバイスと使用法同期(2)一部を同期してください。
  2. オープン(2)デバイスを2回ブロックします。一度はO_SYNC遅延書き込み用で、一度は私のジャーナル書き込み用です。

答え1

Linux関連のシステムコールがあります。同期ファイル範囲()

(参考までにブロックデバイスを使用することは移植性がありません。FreeBSD)

関連情報