私は最近、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()を使用するファイルシステムジャーナルおよびアプリケーションにとって安全です。キャッシュで待機していたデータにとっては悪いことであり、それを検出(チェックサム)するのはファイルシステム次第であり、少なくともファイルシステムが(願わくば)不安定な状態になることはありません。パフォーマンスに関しては、より良いはずです。
しかし、私の質問は立っています...私は何かが欠けていますか?考慮すべき他の変数はありますか?これを確認できるツールがあり、ドライブが正常に動作することはありますか?