ZFSはsync = disabledを使用してローカルアプリケーションの競合の一貫性を維持しますか?

ZFSはsync = disabledを使用してローカルアプリケーションの競合の一貫性を維持しますか?

属性に関する文書sync=disabledによると

File system transactions are only committed to stable storage periodically.  This option will give the
highest performance.  However, it is very dangerous as ZFS would be ignoring the synchronous transac-
tion demands of applications such as databases or NFS.  Administrators should only use this option
when the risks are understood.

だからリスクを理解しようとしています。残念ながら、sync=disabled衝突/停電が発生したときに正確に何が起こるのか、そしてこれが実際のアプリケーションにどのような影響を与えるかについていくつかの矛盾する情報があります。

以下は、セキュリティについて議論するさまざまなフォーラムの意見の一部(議論)ですsync=disabled

  • sync=disabled最後の5秒間の書き込み内容を失っても問題ない場合は設定できます。
  • 破損のリスクはなく、sync=disabledデータの損失だけがあります。
  • 使用してもsync=disabled
  • 競合の一貫性は、ファイルシステムレベル(アプリケーションレベルではない)でのみ達成できます。
  • これを設定すると、sync=disabledデータベースアプリケーションのトランザクションセキュリティが失われます。
  • ACID準拠のデータベースはsync=disabled
  • ソフトウェアについて意図的に嘘をつきました。 ACIDデータベースとジャーナリングファイルシステム(ZFSで実行)も、予想される書き込みセマンティクスに違反するため、破損する可能性があります。

だからそれはどれですか? 5秒間のデータのみが失われますか(衝突がわずか5秒前に発生したかのように発生しますsync=standard)、またはこの5秒がACIDデータベースの一貫性を破るいくつかのトランザクションの不確実性を引き起こしますか?

明らかに、私は取引の最後の5秒を失うことを知っています。問題は、この5秒間の損失によってアプリケーションレベルの状態が破損するかどうかです(アプリケーションの状態がZFSローカルであるため、リモートサーバーまたは別の非ZFSディスクとの整合性が重要ではないと仮定)。

もしsync=disabled できるアプリケーションレベルの状態の損傷を引き起こします。この損傷がどのように発生するかについての説明やシーケンス図を提供してください。

編集:永続性や約5秒のデータ損失を気にしないことをもう一度明確にしたいと思います。私の質問はただ一貫性と取引セキュリティについて。一つある巨大約5秒間のデータ損失(トランザクションのロールバックのため)と一貫性の損失(データが回復不能に破損した場合のすべてのデータ損失)の違い。

ベストアンサー1

だからそれはどれですか?

これらすべてはほぼ同じです - データいいえディスクにフラッシュすると失われます。

  • 破損のリスクはなく、sync=disabledデータの損失だけがあります。

データ損失返品保存されたデータが破損したり、論理的な不一致が発生する可能性があることを意味します。時によって異なります。データが完全に失われました。

  • 使用してもsync=disabled
  • 競合の一貫性は、ファイルシステムレベル(アプリケーションレベルではない)でのみ達成できます。

ここで、「一貫性」は、ファイルシステム自体(すなわち、メタデータ)の一貫性のみを含み、論理的ファイルシステムに保存されたアプリケーションデータの一貫性。

  • これを設定すると、sync=disabledデータベースアプリケーションのトランザクションセキュリティが失われます。

はい。

  • ACID準拠のデータベースはアトミックであり、ZFSは次の場合でもアトミックと書き込み順序を維持します。sync=disabled

注文がわからない。
内部トランザクショングループの書き込みの順序を変更できます。 https://zfsonlinux.topicbox.com/groups/zfs-discuss/T17417b2984f6c8ff
または: https://zfsonlinux.topicbox.com/groups/zfs-discuss/T969c74e0a6dfdd74-M818821038c9248d92443f67a

アプリケーション自体が提供する原子性です。そして原子性等しくない耐久性

  • ソフトウェアについて意図的に嘘をつきました。 ACIDデータベースとジャーナリングファイルシステム(ZFSで実行)も、予想される書き込みセマンティクスに違反するため、破損する可能性があります。

はい。

5秒のデータだけが失われますか?それとも、その5秒がACIDデータベースの一貫性を破るいくつかのトランザクションの不確実性につながりますか?

どちらも。どちらも同じ意味です。つまり、(アプリケーションの)データが失われました。

これは、アプリケーションと物理メディアの間のすべてのレイヤーに対する書き込みキャッシュに関するものです。もしどのデータソース:どの(非永続)キャッシュは、欠落しているメディアにフラッシュされません。

同期が無効になっているファイルシステムは、キャッシュされたデータを更新しません。まもなくアプリケーションは強制的に実行されますが、データがストレージに保存されるという嘘をついた場合。代わりに、データは揮発性メモリに保存され、ソフトウェアやハードウェアの障害、クラッシュ、または停電が発生した場合に失われます。

たとえば、テキストファイルを作成してテキストエディタに保存します。ただし、fsync を呼び出してファイルシステムを強制的に実行しても、テキストファイルはすぐに記憶媒体に到達しません。ファイルシステムがデータを更新します。後で
途中で悪いことが起こると、ファイルが失われます。

さらに、データベースは持続性のために適切なfsync機能を使用します。

HDD、SSD、RAIDコントローラなどのハードウェアストレージも、独自のキャッシュ、ファームウェアエラー、または物理エラーにより、書き込みが成功したかどうかをオペレーティングシステムに欺くことがあります。

返品 https://superuser.com/questions/1389021/can-zfs-sync-disabled-cause-corruption-of-previously-writing-data

https://www.sqlite.org/howtocorrupt.html(「同期失敗」以下)

https://sqlite.org/atomiccommit.html(9.2. 不完全なディスクフラッシュ)

https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-FSYNC

https://www.postgresql.org/docs/current/wal-async-commit.html

https://stackoverflow.com/questions/42434872/writing-programs-to-cope-with-io-errors-causing-lost-writes-on-linux

おすすめ記事