バリアを備えたSATAドライブの書き込みキャッシュの安全性


13

私は最近、SATAドライブに関する書き込みキャッシュ、NCQ、ファームウェアバグ、バリアなどについて読んでいますが、停電の場合にデータを安全に保つための最適な設定は何かわかりません。

私が理解したことから、NCQを使用すると、ドライブは書き込みを並べ替えてパフォーマンスを最適化し、どのリクエストが物理的に書き込まれたかをカーネルに通知できます。

書き込みキャッシュは、データが物理ディスクに書き込まれるのを待たないため、ドライブがリクエストをはるかに高速に処理できるようにします。

ここでNCQと書き込みキャッシュがどのように混在するかわかりません...

ファイルシステム、特にジャーナリングされたものは、特定のリクエストがいつ書き留められたかを確認する必要があります。また、ユーザー空間プロセスはfsync()を使用して特定のファイルを強制的にフラッシュします。fsync()の呼び出しは、ファイルシステムがデータがディスクに書き込まれたことを確認するまで戻りません。

SASドライブでのみ見た機能(FUA、Force Unit Access)があります。これは、ドライブを強制的にキャッシュをバイパスし、ディスクに直接書き込みます。他のすべてについては、書き込みバリアがあります。これは、ドライブでキャッシュフラッシュをトリガーできるカーネルによって提供されるメカニズムです。これにより、重要なデータだけでなく、すべてのキャッシュが強制的に書き込まれるため、たとえばfsync()を使用すると、システム全体が悪用されます。

ファームウェアのバグがあるドライブ、またはデータが物理的に書き込まれた時期について意図的に存在するドライブがあります。

これを言って..ドライブ/ファイルシステムを設定する方法はいくつかあります:A)NCQおよび書き込みキャッシュを無効にするB)NCQのみを有効にするC)書き込みキャッシュのみを有効にするD)NCQと書き込みキャッシュの両方を有効にする

バリアが有効になっていると思います。ところで、実際に有効になっているかどうかを確認する方法は?

電力損失の場合、ディスクへのアクティブな書き込み中に、ファイルシステムジャーナルとデータの両方でオプションB(NCQ、キャッシュなし)が安全であると推測します。パフォーマンスが低下する場合があります。

バリアまたはFUAを使用する場合、オプションD(NCQ + cache)は、fsync()を使用するファイルシステムジャーナルおよびアプリケーションにとって安全です。キャッシュで待機していたデータにとっては悪いことであり、それを検出(チェックサム)するのはファイルシステム次第であり、少なくともファイルシステムが(願わくば)不安定な状態になることはありません。パフォーマンスに関しては、より良いはずです。

しかし、私の質問は立っています...私は何かが欠けていますか?考慮すべき他の変数はありますか?これを確認できるツールがあり、ドライブが正常に動作することはありますか?


あなたの状況でのアプリケーションは何ですか?RAIDコントローラーとそのキャッシュがセットアップに与える影響や影響を見逃しています。どのオペレーティングシステムにも注目していますか?どのファイルシステムを検討していますか?
ewwhite

特定のアプリケーションはありません。私はソフトウェアraid1を何年も使用していますが、書き込みキャッシュが表す問題を掘り下げることはありません。また、信頼できるfsckがまだないbtrfsを調べたため、使用する場合、破損を防ぐために何ができるか疑問に思います。
julianjm

1
代わりにLinuxでZFSを使用し、専用のZILデバイスと組み合わせてください。ZFSシステムにDDRDriveを使用しています:)
ewwhite

FUSEでZFSを使用していますか?
julianjm

2
必ずUPSを入手してください。
マイケルハンプトン

回答:


11

まっすぐなエンタープライズシステムの場合、ストレージアダプター(ほとんどの場合はRAIDカード)の形の追加レイヤーがあり、その上にさらに別のキャッシュレイヤーが存在します。最近のストレージスタックには多くの抽象化があります。これについては、Know your I / Oで行ったブログシリーズで詳しく説明しました。

RAIDカードはディスク上のキャッシュをバイパスできますが、その一部はRAID BIOSでこの機能を切り替えることもできます。これが、エンタープライズディスクがエンタープライズである理由の1つです。このファームウェアでは、コンシューマドライブ(特に「グリーン」ドライブ)が許可しないようなことが許可されています。この機能は、懸念されるケースに直接対処します:コミットされていない書き込みによる電源障害。RAIDカードのキャッシュは、バッテリーまたはフラッシュバックである必要がありますが、電源が回復し、それらの書き込みが再コミットされるまで保持されます。

特定のエンタープライズSSDには、完全に電源を切る前にオンボードキャッシュをコミットするのに十分な容量のオンボードコンデンサが含まれています。

ディスクがマザーボードに直接接続されているシステムで作業している場合、保証はほとんどありません。ディスク自体に書き込みキャッシュをコミットする能力がない限り、電源障害は実際に損失を引き起こします。ファイルシステムが原因ちょうどこの故障モードを生き残るためには、それのできないために信頼性の欠如のための評判を得て、設計されたストレージの存続可能性を備えた完全なエンタープライズシステムで実行するように設計されました。

しかし、時間が経ち、XFSはこれを乗り切るように設計されました。他の主要なLinuxファイルシステム(およびWindowsの)には、この非常に失敗したモードを乗り切るためのエンジニアリングがすでにありまし。どのように機能するかは、失われた書き込みがFSジャーナルに表示されず、コミットされなかったことがわかるため、破損が安全に検出され、回避されます。

ここで問題となるのは、ディスクファームウェアの存在です。この場合、FSジャーナルは現実に対して誤った仮定をしており、破損はしばらく検出されない可能性があります。パリティRAIDとミラーRAIDは、別のコミットされたコピーを取得する必要があるため、これを回避できます。しかし、単一ディスクのセットアップにはそのようなクロスチェックがないため、実際には障害が発生します。

はるかに多くの検証を取得するエンタープライズクラスのドライブを使用して(想定されるワークロードパターンと比較してテストされます)、ストレージシステムを設計して、このような不誠実さを克服できるようにすることで、ファームウェアのリスクを回避します。


ハードウェアRAIDでは、キャッシュを行うのはコントローラー次第であり(できればバッテリーバックアップ)、実際のディスクキャッシュを無効にすることをお勧めします。私の場合(言及しなかった)、私はソフトウェアraidを使用しています。データ損失の原因となるため、書き込みキャッシュは推奨されないようです。大惨事ではないかもしれませんが(ファイルシステムの破損)、とにかくデータが失われます。とりあえず、softraid1 + ext4をbtrfs + raid1に移行することは控えます。:)
julianjm

RAIDは、データを1つのドライブと同じくらい簡単に両方のドライブの書き込みキャッシュに配置できるため、これには役立ちません。
psusi

@psusi 100%の軽減ではありませんが、追加の保護を提供します。これはタイミングの問題です。個々のRAID実装は異なります。
sysadmin1138

緩和策ではありません。セカンダリドライブはまったく問題になりません。クラッシュが発生した場合、プライマリがセカンダリにコピーされて回復するためです。したがって、書き込みが(最初の)ドライブに対して行われたかどうかに戻ります。
psusi

3

ファイルシステムジャーナルは、もともと、ドライブの書き込みキャッシュがないと仮定して、メタデータへの書き込みを発行する前に、ジャーナルへの書き込みが完了するのを待っていました。ドライブの書き込みキャッシュを有効にすると、この仮定が破られ、データが失われる可能性があります。したがって、障壁が作成されました。バリアを使用すると、ディスクが書き込みキャッシュを使用している場合でも、ジャーナルはメタデータへの書き込みの前にジャーナルへの書き込みが完了することを確認できます。ディスクドライバー層では、ドライブが書き込みキャッシュを持ち、有効になっていることをドライブが報告すると、バリアは後続のIOが送信される前にディスクキャッシュを強制的にフラッシュします。それ以外の場合、これは必要ないため、バリアは、前のIOが完了するまで、ドライブへの後続のIOの発行を防ぐだけです。NCQは、複数の保留中の要求が完了するのを待ってからさらに発行する必要がある場合があることを意味します。


バリアはジャーナルの破損から保護すると思います(ファイルシステムが要求した場合)が、ファイルの実際のデータについてはわかりません...書き込みのたびにキャッシュフラッシュを発行すると、書き込みキャッシュが使用できなくなります?
julianjm

@julianjm、もちろん... NCQまたはドライブの書き込みキャッシュの有無にかかわらず、クラッシュした場合、キャッシュされたファイルデータは常に失われます。
psusi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.