31960


`hoge` という文字列をファイルに書き出すプログラムを書いているとします。このプログラムのプロセスが、任意のタイミングで kill
シグナルによって殺されうるとしたとき、このファイル書き込み処理をアトミックに行うことはできますか？

具体例としては、コミットログを作成するプログラムなどを想定しています。

もし、ファイルシステムが重要ならば、 ext4 を想定したいです。


CC BY-SA 3.0
2017-01-18T16:05:06.573
31954
2017-01-19T02:29:22.683
754
question
linux
アトミックなファイル書き込みを実現するには？


ナイーブには

  1. テンポラリファイルを作成(&オープン)する。
  2. オープンしたままunlinkする。ファイルディスクリプタはまだ握っているのでファイルの操作は可能。
  3. 書き込む。
  4. syncする。
  5. ここまででプロセスが死んだりしても半端な内容のファイルはディスクに残らない。
  6. 本来の名前にリネーム(link)。この処理自体はアトミックであることを期待。ディスクをまたがったコピーなどは行なわれない前提。

くらいが限度かな、と思いました。

sync発行しただけではたとえばディスク側で持っているキャッシュから向こう側で永続化されている保証は得られないとか言い出すとキリがないですが。


CC BY-SA 3.0
2017-01-19T02:29:22.683
31960
2017-01-19T02:29:22.683
17037
31954
answer