私が理解しているように、ハードドライブとSSDはドライブ内にいくつかの基本的なエラー修正機能を実装しています。決定します。ただし、これは保存されたエラー診断が100%正しいかどうかによって異なります。これは事実ではなく、2台のドライブRAID-1ミラーなどの一般的な構成は脆弱です。あるドライブの一部のビットが自動的に破損し、ドライブが読み取りエラーを報告しないとします。したがって、btrfsやZFSなどのファイルシステムは、故障したドライブファームウェア、故障したSATAケーブルなどを信頼しないように独自のチェックサムを実装します。
同様に、RAMにも信頼性の問題がある可能性があるため、この問題を解決するためにECC RAMがあります。
私の問題はこれです:2ディスク構成(メインラインカーネルドライバなど)でドライブファームウェアが捕捉できない自動破損/ビット破損からLinuxスワップファイルを保護する標準的な方法は何ですか?私の考えでは、btrfsが提供するのと同じ構成でエンドツーエンドの保護が不足すると、ECC RAMが提供する心の平和がある程度相殺されます。しかし、良い方法は思い出されません。
- btrfsはスワップファイルをまったくサポートしていません。 btrfsファイルでループデバイスを設定して交換できます。しかし、問題があります。
- ランダム書き込み性能が悪い。https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation
- 書き込み中のコピーを無効にする提案は、チェックサムも無効にすることで、この演習の全体的なポイントを無効にします。彼らはデータファイルに独自の内部保護があると仮定しています。
- Linux の ZFS では、ZVOL をスワップ領域として使用できます。これがうまくいくと思います。http://zfsonlinux.org/faq.html#CanIUseaZVOLforSwap- しかし、私が読んだことによれば、ZFSは一般的に多くのメモリを必要とするので、スワップ専用アプリケーションで動作させるにはこの問題を解決するために少しの作業が必要になると思います。最初の選択ではないと思います。信頼できるスワップを得るためにツリー外のカーネルモジュールを使用する理由は、私の能力では不可能です。今日、ほとんどの最新のLinuxディストリビューション/カーネルを使用してこれを達成する方法が必要ですか?
- 実際、Linuxカーネルメーリングリストには、メモリマネージャ自体内でチェックサムを有効にするためのパッチを含むスレッドがあります。これが私がこの質問でこれについて議論する理由です。 http://thread.gmane.org/gmane.linux.kernel/989246- 残念ながら、私が知っている限り、パッチは終了し、私が知らない理由でアップストリームに適用されませんでした。残念ながら良い機能のようです。一方、RAID-1にスワップを適用する場合 - 破損がチェックサムリカバリ能力を超えている場合は、メモリマネージャがパニックまたはそれ以上の可能性がある他のドライブから読み取ろうとします。メモリ管理者がすべきこと。
簡単に言うと:
- RAMにはエラーを修正するためのECCがあります。
- 永続ストアのファイルには、エラーを修正するためのbtrfsがあります。
- 交換はありますか? ? ? <---これは私の問題です
答え1
我々は、交換から取得されたデータの整合性を信頼します。ストレージハードウェアチェックサム、CRCなどがあります。
上記のコメントの1つで、次のように言われました。
はい、しかし、ディスク自体の外側のビットフリップは防止できません。
ここで、「It」はディスクのチェックサムを表す。
これは本当ですが、SATAは32ビットCRCを使用します。コマンドとデータに使用されます。したがって、ディスクとSATAコントローラ間のデータが検出されずに破損する可能性は40億分の1です。つまり、継続的なエラーソースは送信された125MiBごとにエラーを引き起こす可能性がありますが、宇宙船などのまれなランダムエラーソースは非常に低い割合で検出できないエラーを引き起こす可能性があります。
また、ソースから送信された125MiBあたりの1つのエラーに近い割合で検出されなかったエラーが発生した場合、パフォーマンスが低下することに注意してください。悪い数が多いから検出済み再送信が必要なエラーです。モニタリングとロギングにより、タイムリーな問題を警告し、検出されない損傷を防ぐことができます。
ストレージメディアのチェックサムに関して、すべてのSATA(およびそれ以前のPATA)ディスクは一種のセクタ固有のチェックサムを使用します。 「エンタープライズ」ハードドライブの特徴の1つは、保護されているセクターが大きいことです。追加データ整合性機能、検出されないエラーが発生する可能性が大幅に減少します。
これらのアクションがなければ意味がありません。スペアセクタプールすべてのハードドライブ:ドライブ自体は不良セクタを検出できないため、新しいセクタを交換できません。
他のコメントでは、次のように質問しました。
SATAがそんなに信頼できるのなら、なぜZFS、btrfs、ReFSなどのようなチェックサムファイルシステムがありますか?
一般的に、長期保存データの交換は必要ありません。スワップ記憶容量制限はシステム全体に適用されます。稼働時間、システムの仮想メモリシステムを通過するほとんどのデータは寿命の短いプロセスに属するため、スワップ内のほとんどのデータは長く持続しません。
さらに、コアとコアの実行頻度が増加するにつれて、稼働時間は一般に長年にわたって減少しました。libc
アップデート、仮想化、クラウドアーキテクチャなど
さらに、スワップ内のほとんどのデータは基本RAM自体を消費しないため、よく管理されたシステムでは本質的に使用されません。そのようなシステムで交換で終わる唯一のことページこのプログラムはほとんど使用されません。これはあなたが思うよりも一般的です。プログラムがリンクするほとんどの動的ライブラリには、プログラムで使用されていないルーチンが含まれています。動的リンカー。オペレーティングシステムは、ライブラリ内のプログラムテキストの一部を使用していないことを発見したら、それを置き換えてプログラムコードとデータのスペースを解放します。はい使用。このように交換されたメモリページが破損した場合、誰が知っていますか?
ZFSとは異なり、データがシステムの現在の稼働時間以降だけでなく、ストレージシステムを構成する個々のストレージデバイスの寿命を超えて持続するようにデータを継続的に保存したいと考えています。 ZFS解決などの問題は、交換で解決された問題よりも約2倍長い時間スケールを持ちます。したがって、ZFSの損傷検出要件は、Linuxスワップ領域よりもはるかに高いです。
ZFSなどは別の主な方法でスワップとは異なります。スワップファイルシステムを一緒にRAIDしません。いつマルチスイッチングデバイス機械に使用され、JBODRAID-0以降とは異なり、スキームです。 (例えば、macOSのチェーン交換ファイルスキーム、Linuxswapon
など)スワップデバイスは独立しており、RAIDのように互いに依存しないため、多くのチェックサムは必要ありません。これは、スワップデバイスを交換するときに、交換デバイスで実行する必要があるデータに対して他の相互依存スワップデバイスを見つける必要がないためです。デバイス。 ZFS 用語では、他のストレージデバイスの重複コピーからスワップデバイスを再同期しません。
これらすべては、安定したスイッチングデバイスを使用する必要があることを意味します。私は一度失敗したZFSプールを救うために20ドルの外部USB HDDエンクロージャを使用したことがあります。 ZFSの強力なチェックサムが私を救ってくれました。ファイルを交換すると、記憶媒体をそのように粗く扱うことができない。スワップデバイスが寿命を延ばし、125MiB転送ごとに検出できないエラーが注入される最悪のシナリオに近づく場合は、できるだけ早く交換してください。
この質問に対する編集証の全体的な感覚は、例えば説明される。ビザンチン将軍問題。注意深く読んで、コンピュータサイエンスコミュニティに問題を説明する学術論文の1982年の日付を考慮し、2019年に問題についての新しい考えがあるかどうか決定しなさい。そうでなければ、おそらくそうです。使用この技術は、ビザンチン将軍の問題を理解している30人のコンピュータサイエンスの卒業生によって設計されています。
これは陳腐な表現です。コンピュータサイエンスジャーナルで取り上げられていないアイデア、反対、解決策は思い浮かばないかもしれません。
SATAは確かに完全に信頼できませんが、学界やカーネル開発チームに参加する予定がなければ、既存の技術に実質的な貢献をすることはできません。すでに知っているように、これらの問題はすでに非常によく解決されています。 ZFS、btrfs、ReFS...オペレーティングシステムのユーザーとして、オペレーティングシステムの作成者がこれらの問題を解決していることを信頼する必要があります。ビザンチン将軍について学びます。
これは現在は実用的ではありませんスワップファイルをZFSまたはBtrfsに入れます。しかし、上記の内容で安心できない場合は、少なくともxfsまたはext4に入れることができます。これは専用のスワップパーティションを使用するよりも優れています。
答え2
DM-整合性
望むより:ドキュメント/device-mapper/dm-integrity.txt
dm-integrity
通常はログモードで使用されます。交換の場合、ログを残さないように設定できます。これにより、パフォーマンスのオーバーヘッドを大幅に削減できます。異常終了後にエラーが発生しないように起動するたびに、スワップ整合性パーティションを再フォーマットする必要があるかどうかはわかりません。
内部に予備発表dm-integrity
、著者は「より高いレベルのデータ整合性保護」を好むと表現した。スワッピングの場合、チェックサムをRAMに保存する可能性が開きます。ただし、このオプションを使用するには、現在のスワップコードを大幅に変更する必要があり、メモリ使用量も増えます。 (現在のコードは、個々のページ/セクタではなく範囲を使用してスワッピングを効率的に追跡します。)
DIF/DIX?
OracleはLinux 2.6.27にDIXサポートを追加します。(2008).
DIXを使用すると、エンドツーエンドの整合性が提供されますか?
サプライヤーに連絡することができます。彼らが嘘をついているのかどうかわかりません。
データを保護するにはDIXが必要ですOS(オペレーティングシステム)とヒドロキシ安息香酸。
DIF自体でデータ保護を強化HBAとストレージデバイス間の移動。 (また見てください:いくつかの数値を使用してエラー率の違いを示します。)。
保護フィールドのチェックサムが標準化されているため、技術的に次のことが可能です。どの未使用データを保護します。 HBA(またはストレージデバイス)が読み取り時にチェックサムを再生成するようにします。もともとDIXプロジェクトはこのビジョンを非常に明確にしました。
- DIF/DIXの例直交論理ブロックチェックサム
- 私たちはまだあなたを愛しています、btrfs!
- 論理ブロックチェックサムエラーは、破損したデータを検出するために使用されます。
- 読み取り時に検出が発生しました
- ...おそらく数ヶ月後に元のバッファが失われる可能性があります。
- 元のバッファが歪むと、重複したコピーも破損する可能性があります。
- DIF/DIXは約です。腐敗を積極的に防ぐ
- 間違ったデータがディスクに保存されるのを事前に防ぐ
- ...元のバッファがメモリから削除される前に問題を見つけます。
DIXの最初の記事の1つは、ドライブがDIFをサポートしていなくても、オペレーティングシステムとHBAの間でDIXを使用できることを述べました。
DIXが使用されている現在の「企業」環境では、露骨な嘘はほとんど目立たない。さらに、DIFは既存のハードウェアに基づいており、520バイトセクタを使用してフォーマットできます。 DIFを使用するためのプロトコルでは、まずドライブを再フォーマットする必要があります。sg_format
コマンドなどを参照してください。
実装が実際に従わない可能性が高いです。エンドツーエンドの原則。たとえば、ベンダーがCPUサイクルを節約するためにDIXのより弱いチェックサムオプションをサポートした後、そのオプションはスタックの下でより強力なチェックサムに置き換えられたと言います。これは便利ですが、完全なエンドツーエンド保護ではありません。
あるいは、オペレーティングシステムで独自のチェックサムを作成してアプリケーションマークスペースに保存することもできます。しかし、現在、Linux(v4.20)ではこの機能をサポートしていません。。 2014年に作成されたレビューでは、「実際にアプリケーションタブスペースの使用を可能にするストレージデバイスがほとんどない」ことが原因であると提案しています。 (これがストレージデバイス自体を指しているのか、HBAを指しているのか、それとも両方を指しているのかわかりません。)
LinuxではどのタイプのDIXデバイスを使用できますか?
データと整合性メタデータバッファの分離とチェックサムの選択をデータ整合性拡張(DIX)と呼びます。これらの拡張はプロトコル本体(T10、T13)の範囲外であるため、OracleとそのパートナーはStorage Networking Industry Association内でそれを標準化しようとしています。
Wikipediaによると、DIFはNVMe 1.2.1で標準化されたという。 SCSI HBAの場合、参照する標準がないと判断するのは難しいようです。今では、「Linux DIX」のサポートについて話すのが最も正確です。利用可能なデバイスは次のとおりです。
Red Hat Enterprise Linux 7.4は、ハードウェアベンダーがそれを認証し、特定のHBAおよびストレージアレイ構成を完全にサポートしている場合は、SCSI T10 DIF / DIX [sic]を完全にサポートします。 DIF / DIXは他の構成ではサポートされず、ブートデバイスでの使用もサポートされず、仮想化ゲストでもサポートされません。
現在、このサポートを提供することが知られているベンダーは次のとおりです。
RHEL 7.5リリースノートに記載されているすべてのハードウェアはファイバーチャネルです。
私はこの市場を理解していません。将来的には、DIXがサーバーでより広く使用されているようです。消費者クラスのSATAディスクで動作する理由がわかりません。私が知っている限り、コマンド形式の事実上の標準さえありません。 NVMeでより広く利用可能であることを確認したいと思います。
答え3
交換はありますか? ? ? <---これは私の問題です
交換が残る保護されていないLinuxでは(ただし、UPDを参照)
もちろん、LinuxのZFSをスワップストレージとして使用することもできます。しかし、まだロックがあります。場合によっては、オプションを効果的にキャンセルします。
Btrfsはまだスワップファイルを処理できません。。彼らは、パフォーマンスが悪い場合でもループバックを使用できると述べました。 Linux 5にようやくそのような機能が搭載されるという兆し(?)があります…
レガシースイッチングを保護するためのパッチチェックサムを使用すると、それ自体では主流になりません。
要約すると:いいえ。 Linuxはこの分野でまだギャップがあります。
UPD。:ように@ソースジェダイ 指摘dm-integrityのようなツールがあります。バージョン4.12以降、Linuxカーネルはすべてのユニバーサルブロックデバイスのチェックサムを提供するために使用できるデバイスマッパーターゲットを取得し、スワップに使用されるデバイスも例外ではありません。このツールは主要なディストリビューションに広く統合されておらず、ほとんどのディストリビューションはudevサブシステムをサポートしていませんが、最終的には変更する必要があります。 MD(LinuxソフトウェアRAID)の上に配置されているような冗長プロバイダとペアになっている場合、ビット破損を検出するだけでなく、I / O要求を通常のデータに再ルーティングすることもできます。これは、dm-integrityが問題があることを示し、MDがそれを表示する必要があるためです。処理しなさい。
答え4
私は「標準的な」方法がないと思うので、次は私の個人的な意見です。
潜在的なユーザーの観点からbtrfsの進捗状況を監視した結果、まだ私にとってはあまり曖昧であると言わなければなりません。一部の機能は成熟して生産に使用する準備ができていますが、一部の機能はまだ成熟していないため、使用する危険があります。
個人的にどの機能を使用するか、どの機能を使用しないかを決定する時間がないため、その機能をオフまたはオンにする方法を見つけるために時間を費やす必要があります。
これと比較して、ZFSは堅牢で成熟しています(IMHO)。したがって、あなたの質問に答えるためにZFSを使用します(しかし、メモリを消費しません。以下を参照)。
しかし、btrfsはすでに使用していて(私の推測が正しい場合)、上記の説明の1つがそれをスワップに使用する方法を示しているので、正しい選択かもしれません。
純粋に偶然に、過去数日間、ルートファイルシステムとスワップを含むいくつかのLinuxサーバーをZFSにインストールしました。これを行う前に、私はいくつかの徹底的な調査を行いましたが、数日かかりました。私が学んだことを簡単にまとめると、次のようになります。
ZFSメモリ消費
ZFSのメモリ消費に関する一般的な誤解があります。 ZFSは通常次のとおりです。いいえ多くのメモリを消費します。実際には、2GBのRAMを搭載したシステムでテラバイトの記憶領域として実行できます。使用する場合のみ重複排除(デフォルトではオフ) 多くのRAMが必要です。
ハードウェア障害検出/訂正
SATA、PATA、RAID、またはその他のエラー検出/修正メカニズムがデータの整合性を保証するのに十分であるかどうかは、Web上のさまざまな場所で無限の議論と熱い議論を引き起こすトピックです。理論的には、ハードウェアストレージデバイスは発生したすべてのエラーを報告および修正し、さまざまなレベルのデータ転送ハードウェア(チップセット、メモリなど)も同じことを行う必要があります。
まあ、彼らはすべての場合にそうしないか、エラーに驚くほどよく反応します。一般的なRAID5構成を例に挙げます。通常、あるディスクに問題がある場合はRAIDに報告し、RAIDは別のディスクから読み取るデータを構築して渡しますが、エラーが発生したディスクに書き換えます(ディスクを再マップできます)。データを書き込む前のセクタ)、同じディスクがあまりにも多くのエラーを報告している場合、RAIDはそのディスクをオフラインにして管理者に通知します(正しく設定されている場合)。
これまでは大丈夫でしたが、場合によってはディスクからエラーを報告せずに、間違ったデータがディスクから出てきます(次のセクションを参照)。ほとんどのRAIDはパリティ情報を使用してこの状況を検出できますが、反応は愚かです。エラーを報告してデータ転送を停止するのではなく、無効なデータに基づいてパリティを再計算します。そして、そのディスクに新しいパリティが書き込まれ、誤ったデータが永久に正しいとマークされます。
これが合理的な行動ですか?私が知っている限り、ほとんどのハードウェアRAID5コントローラ、さらにはLinuxのmd RAIDもこのように動作します。
btrfsエラーの修正はよくわかりませんが、特にRAIDにbtrfsを使用している場合は、マニュアルをもう一度注意深く読んでください。
静かなビット腐敗
すべての熱い議論と(類似)科学的議論にもかかわらず、現実は主に理論とは異なり、理論はこれとは反対であると言うかもしれませんが、自動ビット腐敗は確かに起こります(自動ビット腐敗は通常ハードウェアストレージのデータが破損し、ストレージデバイスが破損することを意味します)。このデータの読み込み中にエラーは報告されませんでしたが、転送パスのどの場所でもこの定義にフリップビットを追加します。
このようなことが起こっているというのは私の個人的な意見ではありません。少なくとも、Google、Amazon、CERN は、そのトピックを扱う詳細なホワイトペーパーを発表しました。この論文は一般人が無料でダウンロードできます。彼らは、検出されていないデータ破損の問題に直面したか、または問題が発生する前にこれを停止する方法を知りたかったので、何百万ものハードドライブと数十万のサーバー/ストレージデバイスに対して体系的な実験を行いました。
全体的に、サーバーファームのデータは、MTBF統計や他の理論で予測するよりもはるかに高い割合で破損しています。そしてはるかに高いということは、規模の順序を意味します。
したがって、自動ビット破損(つまり、伝送路のどの点でも検出されないデータ破損)は実際の問題です。
データライフ
交換されたデータのライフサイクルが短いというWarren Youngの言葉は正しいです。しかし、私は次の考慮事項を追加したいと思います。データ(文書化の観点から)スワップに切り替えられますが、オペレーティングシステムやその他の一部は(おそらく)ソフトウェアの実行。 MP3を交換すると、ビットを反転しながらも生きていくことができます。 (極端な場合のために)本番httpdサーバーソフトウェアの一部が交換された状態にある場合、検出されないと、その後に破損したコードが実行される可能性があるビットを反転することは決して耐えられません。
結論
私にとって、ZFSはこれらの問題を解決します。より正確には、問題をディスクからメモリに移動して、問題が発生する可能性を減らします。静かなビットは数倍に減衰されます。また、正しく構成されている場合(RAID以外のミラーリングなど)、クリーンで合理的なエラー修正を提供し、期待どおりに機能し、最終的に理解しやすくなります。
しかし、決して完全に安全ではないことに注意してください。個人的には、私はディスクよりもECC RAMを信頼し、ZFSとZFSのエンドツーエンドのチェックサムが問題の可能性を数倍減らすことができると信じています。私はできます。いいえただし、ECC RAMなしでZFSを使用することをお勧めします。
免責事項:私はZFSベンダーまたは開発者とは関係ありません。これはZFSのすべてのバリエーション(フォーク)に対応します。数日でファンになりました...