これはデフォルトで有効になっています。Linuxのデフォルトのファイルシステム。Enterpriseのデフォルトのファイルシステム。Linuxファイルシステム。「データを食べないLinux用COWファイルシステム。」この問題は、以下の歴史からわかるように、主にLinuxに関係しています。ZFSがどのように動作するかを知ることは興味深いでしょうが、私はそれがこれを実装しないと思いがちです。fsync()は、ファイルデータを書き込む正しい方法として十分に文書化されています。テキストエディタで「保存」をクリックしたとき。それが広く理解されていますテキストエディタは、rename()を使用して既存のファイルをアトミックに置き換える必要があります。これは、電力の損失を防ぐためのもので、常に古いファイルを保持するか、新しいファイル(名前変更の前にfsync()された)を取得するようにします。新しいファイルの半分だけ書かれたバージョンだけを残したくないのです。人気のあるLinuxファイルシステムであるext3でfsync()を呼び出すと、システム全体が事実上数十秒間ハングするという問題がありました。アプリケーションはこれについて何もできないので、fsync()なしでrename()を楽観的に使用することは非常に一般的でした。このパターンは、システムの電源が切れた場合でも、このファイルシステムではかなりうまく機能するように見えました。したがって、fsync()を正しく使用しないアプリケーションが存在します。ファイルシステムの次のバージョンであるext4は、一般にfsync()のハングを回避しました。同時に、fsync()の正しい使用に依存するようになりました。これはすべてかなり悪いです。この歴史を理解することは、競合するカーネル開発者の多くが使用している軽miss的なフレーズによってはおそらく助けにはなりません。これはext4で解決され、古いext3ファイルシステムのようにクラッシュ時の動作を提供するために、fsync()をクラッシュセーフに必要とせずにrename()パターンをサポートします。マウントすると、この動作を再び無効にできます。1この質問には間違いがあります。よって完全にクラッシュセーフになることを暗示していました。これはext4には当てはまりません。古いext3でもそうではなかったと思います。btrfsおよびbcachefsについては、trueです。rename()は完全な原子性を提供し、クラッシュからデータを保護するために明示的なfsync()を必要としません。同時期に追加されたと思います。btrfs実装はrename()呼び出しを待機させないため、パフォーマンスの低下を回避するという主張もあります。fsync()親ディレクトリで、「ログツリー」全体が書き込まれるのを待ちます。現在、完全なレベルの保護を提供しているように見えますが、ドキュメントは見つかりませんでした。コードを確認してください。拒否して、rename()のクラッシュ安全対策を追加しています。別のケースでのデータ損失のリスクを減らす(ただし、削除しない)コードを取得したようです。(たとえば、多くのOpenwrtデバイスで使用)には、rename()のクラッシュ安全対策は含まれていません。受け入れられますが、多くの作業が必要になります。