一般的に、あなたの質問に対する直接的な答えとして、書き込みキャッシュを有効にした場合の適切な動作に関連してドライブ自体にバグがあったことを、SATAドライブの主要なブランドについて知りません。つまり、ドライブの観点からのみ、ドライブはキャッシュの観点から想定されることを実行します。また、書き込みキャッシュが有効になっている場合でも、SATAケーブルでのディスク書き込みから物理的に更新される回転メディアへの遅延は非常に短い(通常50〜100ミリ秒)ことに注意してください。ダーティキャッシュデータが一度に数秒間そこに座っているだけではありません.....ドライブはキャッシュからダーティデータを取得しようとし続けていますできるだけ早く物理メディアに。これはデータの安全性の問題だけでなく、将来の書き込みを遅滞なく受け入れる準備ができていること(書き込みの投稿)の1つです。
キャッシュが有効になっているときに発生する問題は、SATAケーブルを介したドライブへの書き込み順序と回転メディアへの書き込み順序が同じではないことです。キャッシュのすべての内容がディスクに書き込まれる前に電源が切れたり、システムがクラッシュしたりしない限り、これが問題を引き起こすことはありません。どうして?->
ここで発生する可能性のある問題は、ファイルシステムおよび/またはデータベースファイルの内容のトランザクションの堅牢性に関連しており、これらの順不同の書き込み損失です。事実上、これらの順序が狂った書き込みが失われると、理論的には、メディアへの非常に特定の順序でディスク書き込みが行われることで保証されるはずのトランザクションロジックの整合性が破損する可能性があります。
もちろん、ファイルシステム、データベース、RAIDコントローラーなどの設計者は、書き込みキャッシュに関連するこの現象を認識しています(または、確実に認識すべきです)。書き込みキャッシュは、ほとんどのランダムアクセスタイプのI / Oシナリオのパフォーマンスの観点から非常に望ましいものです。実際、書き込みキャッシュを使用可能にすることは、より高度なネイティブコマンドキューイング(NCQ)これは、新しいSATAおよび最後の数世代のPATA実装でサポートされています。そのため、このような特定の重要な時点で物理メディアへの順序を保証するために、ファイルシステムやアプリケーションなどは、メディアへの書き込みキャッシュのフラッシュを具体的に要求できます。この同期要求の完了時-(潜在的に)ファイルバッファー、OSディスクキャッシュ、物理ディスクキャッシュなどから保留中のすべては、適切な重要な操作でトランザクションシステムの設計ごとに実際にメディアに出力されます。つまり、プログラマーが最上位で適切な呼び出しを行い、このソフトウェアチェーンとハードウェアレイヤーのチェーンのすべての要素が正しく機能した場合、これは正しく行われます。つまり、ドライブ、RAIDコントローラー、ディスクドライバー、OSキャッシュ、ファイルシステム、データベースエンジンなどにこの点に関するバグはありません。これは、すべてが正確に動作する必要がある多くのソフトウェアです。さらに、通常、ほとんどすべての状況で書き込み順序はまったく関係ないため、この点で正確性を検証することは非常に困難です。そのため、最終的には、この用語のさまざまなレイヤーや意味の1つまたは複数で「書き込みキャッシュをオフにする」...特定の種類の問題を「修正する」という評判があります。実際には、RAIDコントローラーやOSディスクキャッシュ、ドライブなどの書き込みキャッシュ動作を停止することで、システムの1つ以上のバグを回避できます。また、停電や衝突のシナリオは構築するのが難しいテストです。したがって、最終的には、この用語の1つまたは複数のさまざまなレイヤーや意味で「書き込みキャッシュをオフにする」ことは、特定の種類の問題を「修正する」という評判を持っています。実際には、RAIDコントローラーやOSディスクキャッシュ、ドライブなどの書き込みキャッシュ動作を停止することで、システムの1つ以上のバグを回避できます。また、停電や衝突のシナリオは構築するのが難しいテストです。したがって、最終的には、この用語の1つまたは複数のさまざまなレイヤーや意味で「書き込みキャッシュをオフにする」ことは、特定の種類の問題を「修正する」という評判を持っています。実際には、RAIDコントローラーやOSディスクキャッシュ、ドライブなどの書き込みキャッシュ動作を停止することで、システムの1つ以上のバグを回避できます。
とにかく、質問の核心に戻ると、SATAでは、すべてのディスク読み取り/書き込みコマンドとフラッシュキャッシュコマンドの特定の処理は、SATA仕様によって明確に定義されています。さらに、ドライブメーカーは、Seagate Barracudaドライブのこの例のように、各ドライブモデルまたはドライブファミリの実装とこれらのルールへの準拠を説明する詳細なドキュメントを用意する必要があります。特に、SATA SET FEATURESの詳細をご覧ください。ドライブの動作モードを制御するコマンド、特にオプション82hを使用すると、ドライブレベルでディスクキャッシュを無効にできます。これは、デフォルトで、認識しているすべてのドライブで書き込みキャッシュが有効になっているためです。キャッシュを本当に無効にしたい場合、このコマンドは各ドライブのリセットまたは電源投入の開始時に実行する必要があり、通常はオペレーティングシステムのディスクドライバーの制御下にあります。IOCTLおよび/またはレジストリ設定タイプを使用してこのモードを設定するようにOSドライバーを奨励することもできますが、これは大きく異なります。