ディスク書き込みキャッシュが有効になっている場合のデータ破損

ディスク書き込みキャッシュが有効になっている場合のデータ破損

最近、ディスク書き込みキャッシュを有効にするとシステム パフォーマンスが大幅に向上することを知りました。ただし、突然の電源障害が発生した場合にデータが破損または失われる潜在的なリスクが懸念されます。

私のセットアップについての背景は次のとおりです。

オペレーティング システム: Windows Server 2012 R2

ディスクタイプ: SATA 3.0 HDD

目的: パフォーマンスを向上させるために、ディスクの書き込みキャッシュを有効にすることを検討しています。書き込みキャッシュのデータがまだディスクにコミットされていないときに電源障害が発生した場合、オペレーティング システムがクラッシュした場合、またはデータにアクセスするアプリケーションがクラッシュした場合、データが破損する可能性があると理解しています。

調査中に、私はこの中に以下の詳細を発見した。記事、彼らは「アクティブ ディスクの書き込みキャッシュが有効になっていて、ディスクが Read Look Ahead (RLA) を実行し、それが途中で終了すると、ユーザーが気付かないうちにデータ破損が発生します」と述べています。私はこの声明の正確な意味を理解できませんでした。

書き込みキャッシュを有効にした後、停電時にデータの書き込みが行われていなくても、データ破損/ファイル破損が発生するケースはありますか。

答え1

最新のファイル システム (XFS、ZFS、JFS、ext4、APFS、NTFS など) はすべてジャーナリングを使用しているため、一部のデータ (最新のコミットと、まだコミットされておらずキャッシュに保存されているもの、これは明らかです) は失われますが、データの破損は発生しません。

IBM の JFS に関する多くの図と詳細な説明が掲載された優れた記事がこちらにあります。記事の内容はすべて、他のジャーナリング ファイル システムに 100% 関連しています。

https://www.ibm.com/docs/en/aix/7.2?topic=types-journaled-file-system-jfs

いずれにせよ…バックアップは必ず行う必要があります。いわゆる「3-2-2 バックアップ ルール」に従う必要があります。

https://www.starwindsoftware.com/blog/3-2-1-backup-strategy-why-your-data-always-survives

これが役に立つことを願っています!

答え2

短縮版:いいえ、最新のSATAディスクとジャーナリングされたファイルシステムを使用すると、ディスクキャッシュが有効になっている場合でも、確認された(同期された)書き込みが破損することはありません。一方、同期されていない(バッファリングされた)書き込みは、電源が切れた場合に失われたり破損したりする可能性があります。ただし、リンクされた記事は特定のファームウェアの問題ディスク キャッシュを使用する場合の一般的な動作については説明していません。

拡張ディスクテスト演習を実行する際、潜在的なファームウェアの問題が発見されました。

長い答え:2 種類の書き込みを発行できます。

  • 同期書き込み。ATA FLUSH または FUA を活用して永続性 (および順序付け) を保証します。
  • ディスク DRAM キャッシュによってキャッシュ、集約、および並べ替えることができる、同期されていない (バッファリングされた) 書き込み。

HDD やコンシューマー SSD を扱う場合、同期書き込みは非常に低速です。単一の書き込みをフラッシュするプロセスは、各単一の書き込みごとに IO ごとのレイテンシが支払われることを意味します。そのため、同期書き込みは通常、最も重要な IO (ジャーナル コミット、データベース、電子メール配信など) 用に予約されています。その他の重要度の低い書き込み (ユーザー ファイルのコピーなど) は、キャッシュ/バッファリングされた書き込みとして発行され、適切なタイミングで電源が失われると (元の書き込みから 30 ~ 60 秒後まで)、データが失われます。

昔の PATA および SATA ドライブは、同期を尊重するふりをしながら、実際には必要なフラッシュ動作を破棄して OS に嘘をついていたことに注意してください。このため、ディスク DRAM キャッシュを完全に無効にする (または読み取り専用モードに設定する) ことが提案され、書き込まれたデータは実際には (耐久性のある) ディスク プラッタに保存されるようになりました。キャッシュが無効になっているディスクは、各書き込みを同期として効果的に処理し、パフォーマンスを大幅に犠牲にして最大限の安全性を保証します。

ただし、これはないバッファリングされた書き込みは失われないことを意味します。OS がバッファをフラッシュする前にクラッシュが発生した場合、同期されていないデータはすべて失われます。このため、また、最新の (2008 年以降の) ディスクが ATA FLUSH または (2015 年以降の) FUA を尊重していることを考慮すると、現在一般的なアドバイスは、ディスク キャッシュを有効にして、重要な書き込みをフラッシュするために OS に依存することです。

停電保護機能付き SSD および HW RAID カード安全にキャッシュするためのオンボード回路を搭載することで、このパフォーマンスと安全性のトレードオフを回避することができます。どれでも書き込み(同期のものも含む)は可能です。いずれにせよ、HW RAID カードを使用する場合、ディスク キャッシュの管理方法は実装に依存します(つまり、PERC は SAS ディスクでは無効にしますが、SATA ディスクでは無効にしません)。

関連情報