RAID1に対するLinuxソフトウェアRAIDの堅牢性と他のRAIDレベル


3

RAID5アレイを実行していて、昨日セットアップしたraid1も持っています。RAID5はパリティを計算するため、1つのディスクでサイレントデータの破損をキャッチできるはずです。ただし、RAID1の場合、ディスクは単なるミラーです。考えれば考えるほど、RAID1は実際には非常に危険であると考えています。確かにそれはディスク障害から私を救うでしょうが、ディスク上のデータを保護することに関してはあまり良くないかもしれません(実際私にとってより重要です)。

  1. LinuxソフトウェアRAIDは、実際にどのようにRAID1タイプのデータをディスクに保存しますか?
  2. どのスピンドルが破損したデータを提供しているのかをどのように知るか(ディスク(サブシステム)がエラーを報告していない場合)

RAID1が実際にデータ保護を提供していないのに、ディスク保護ではなく、mdadmを使用して2つのディスク「RAID5のような」セットアップを作成できる方法がありますか?たとえば、容量がゆるいが、データに対しても冗長性を維持しますか?


RAID 5はパリティ計算のためにRAID 1よりも遅く、マシンの電源が失われると書き込み中にデータを失う可能性があります。RAID 1はより信頼性が高い(ただし、ハードウェアRAIDははるかに信頼性が高く、パフォーマンスが高いため、ソフトウェアRAIDは使用していません)。RAID 5は、同じ数(3つ以上)のドライブをより多く使用できるため、「より良い」として販売されていますが、この問題を間違った方法で見ていると思います。RAIDはバックアップではありません

ご心配をありがとう。RAIDはバックアップではないことを完全に認識しています。RAID 5はRAID 1よりも少し遅いことも知っています。しかし、ハードウェアRAIDはソフトウェアRAIDよりも信頼性が高いことに同意しません。その理由を説明してください。
ワックスヘッド

OSが停止すると、RAID構成も停止します。ハードウェアRAIDでは、OSが破損した場合でもデータは回復可能です。

Linux md raidのセットアップでは、ファイルシステムのUUIDを保存するだけで「安全」になります。私見
Waxhead

回答:


3

実際の質問に焦点を合わせて...

RAID 5でさえ、サイレントビット腐敗を修正することはできませんが、データスクラブ中にそれを検出できます。ただし、ディスクによってUnrecoverable Read Error(URE)が発生していると報告された単一のブロックを修正できます。RAID5ストライプ内のすべてのドライブが通常のデータ読み取りのために読み取られるわけではないため、エラーが未使用ディスクのストライプに存在する場合、データスクラブを実行するまで検出されないことに注意してください。標準RAIDでのサイレントビット腐敗検出は、データスクラブ中にのみ発生します。RAID 5は、故障したディスクの再構築中にもこれを行うことができません。これが最近の懸念事項がRAID 5にあることです。

  1. Linux mdadm RAID 1は、ほぼすべてのRAID 1実装と同様に、同じデータを複数のディスクに複製/ミラーリングしています。エラー修正または検出データは追加されません。RAID 1からディスクを取り出して別のPCで使用すると、通常の単一ディスクとして機能する可能性が非常に高くなります。Linux mdadmはディスクの先頭にアレイの説明を追加して、どのパーティションがどのアレイに属しているかを認識できるようにします。したがって、mdadmはRAID 1であると認識しますが、単一ディスクをマウントして使用できます。
  2. すべてのRAID 1コントローラは、ソフトウェアであれハードウェアであれ、HDDが独自のエラー検出および修正方法を使用するという事実に依存しています。HDDがこれを行う方法に関する情報については、このwikipeadiaの記事を参照してください。特に、Error Correction Coding(ECC)の使用に注意してください。

これが、ほとんどのビット腐敗がディスクシステムによって修正不能な読み取りエラー(URE)としてmdadmに報告される理由です。ただし、次のようなエラーがディスクによって報告されることはありませんが、データには依然としてリスクがあります。

  • 書き込み中にヘッドポジショニングエラーが発生した場合、近くのランダムセクタがデータで上書きされ、そのブロックのECCデータが修正されます。実際に書き込まれたブロックを読み取ると、ブロックが正しく読み取られたと報告されますが、そうではありません。
  • アレイ内のすべてのディスクにデータを書き込む前にサーバーの電源が失われた場合、そのストライプの一部のブロックは他のブロックと一致しなくなります。

およびServerFaultページで説明されているような他のタイプのエラーは、ハードドライブ上のビットの腐敗は本当の問題ですか?それについて何ができますか?

けれども、少なくとも3枚のディスクをRAID 6、およびRAID 1つのアレイは、検出したエラーなどの個々のディスクによって報告されていないサイレントビット腐敗のいくつかの形態を修正することができる可能性を有する唯一の標準のRAIDレベルがわかりません。 mdadmがこれに必要なコードを実装する場合前方誤り訂正スタイルの投票システムを使用する。

  • RAID 6の場合-エラーがパリティブロックの1つにある場合のみ。これは、データ、パリティ1、パリティ2間の3ウェイ投票の可能性が原因です。パリティブロック1または2でエラーがあるが、他の2ではエラーがない場合、パリティブロックは基本的に投票できません。エラーがデータブロックの1つにある場合に問題を修正できないのは、3ディスクRAID 6(通常は許可されていない)でない限り、どのデータブロックにエラーがあるかを知ることができないためです。mdadmを含む実装では、このようなあいまいな修正スキームに悩まされ、エラーとして報告されるだけではないでしょう。
  • すでに同期されていると思われる3つ以上のアクティブなディスクを備えたRAID 1では、単純多数決を実施できます。繰り返しますが、多くの人が3+ディスクRAID 1を使用していないため、RAID実装がこのロジックに煩わされるかどうかはわかりません。
    • 通常は3つのディスクがありましたが、サイレントビット腐敗のあるブロックは自動修正できましたが、再同期中ではなかったため、アクティブな同期ディスクの数が2に減りました。
    • 4ディスクRAID 1は、1台の故障したディスクの再構築中であっても、単一の不良ブロックを持つストライプを自動修正できます。
    • 5台のディスクは、2つの無音の不良ブロックを含むストライプを自動修正できますが、同時に障害が発生した1つまたは2つのディスクの再構築中に見つかった場合は1に減ります。

参考までに、Synology DS1813 +デバイスはデータとシステムパーティションの両方にmdadmを使用し、システムパーティションの8つのディスクすべてでRAID 1を使用していることに気付きました。

お気づきかもしれませんが、これはエラーとして不良データを報告できるディスクに大きく依存しています。誰もがこの問題を解決するためにZFSを使用するよう言っていますが。私はZFSのメインデータの整合性の改善は、それが鏡をチェックし、すべての読み取りと/パリティ、(多くの静か壊れたブロックはもはや沈黙し、可能な場合は修正していることを意味しない)独立したブロックレベルのパリティによるスクラビングより頻繁にデータを提供するとしていると信じて、それがかもしれませんサイレントデータ破損の上記のロジックを実装します。

特定のシステムがサイレントデータ破損を検出または修正できるかどうかをテストするには、Linux ddコマンドを使用して、ランダムデータをアレイ内のパーティションの1つに書き込み、データがアレイ上でまだ正常かどうかをテストします。システムがテストに失敗する可能性があるため、保持したいデータがあるシステムではこのテストを行わないでください。標準のRAIDレベルでは、破損とテスト読み取りの間でデータスクラブを実行する必要があります。


6

RAID5は、ディスク上のサイレントデータ破損を検出しません。それを防ぐために、ブロックレベルのチェックサムを備えたZFSやBTRFSなどのファイルシステムが必要です。また、RAID5はパリティ計算のため、RAID1と同様に機能しません。どのタイプのパリティRAIDを使用する場合でも、RAID5の書き込みホールに注意する必要があります 。これにより、停電などの場合にデータが破損する可能性があります。

LinuxソフトウェアRAID1には、必要な数のミラーを作成できるという興味深い利点があります。したがって、アップタイムが最優先事項の場合、7つの冗長コピーを保持する8ディスクRAID1を構成できます。

RAID1を使用したデータ破損の可能性は、単一のディスク(RAIDなし)を使用した場合とほぼ同じです。

データの破損が本当に心配な場合は、チェックサムファイルシステムを使用するか、変更されていないデータを複数のバックアップと定期的に比較する必要があります。人気のあるZFSのサクセスストーリーは、コンピューターが静かにデータを破壊している人の物語であり、ZFSの使用を開始するまでそれを知りませんでした。少しトラブルシューティングを行った後、彼は原因が電源装置の故障であると考えました。

また、データが破損する可能性があるのはハードドライブだけではないことも考慮する必要があります。たとえば、ECC RAM(および互換性があるだけでなく、ECCを有効にするエンタープライズグレードのマザーボード)を使用していない場合、宇宙線はメモリ内のビットを反転させる可能性があります。私たちが話しているデータの種類によっては、それも重要ではありません。ビデオファイルまたは音楽ファイルの場合、ファイルを再生するときにビットフリップは見過ごされます。

問題の核心にたどり着くと、データのサイレント破壊はすべて確率に関するものです。データが破損する可能性はそれほど高くありません。そうしないと、データが再び破損していることを全員が常に呪いをかけます。(おそらく、コンピューターが1つの良いコピーを保持することを信頼しないため、誰もが複数のバックアップとすべてのハードコピーを保持するでしょう。)データ破損に気付く可能性はさらに低くなります。ほとんどの人は、サイレントデータ破損の概念に完全に気づいていないので、問題ありません。また、エンタープライズグレードのディスクストレージシステムの多くでさえ、ファイルシステムレベルでのサイレントデータ破損を防止できないことに注意してください。ただし、ギャンブルをする人ではない場合は、エンタープライズレベルのハードウェア(ECC RAM、


RAID5書き込みホールについて言及し、zfsとbtrfsを宣伝するための+1。
スティーブン

3

raid1もraid5も、破損がハードディスクによって行われた場合、サイレントビット破損から保護されません。

考えてみてください:raid1とraid5の両方では、データが破損していることを簡単に検出できますが、どのディスクが良いデータを取得し、どのディスクが悪いデータを取得したかを判断する方法はありません。

しかし、覚えておいてください:ハードディスクのサイレントビット破損は本当にめったに起こりません(ハードディスクはすべてのブロックで独自の内部チェックサムを取得しました)。そしてraidはバックアップの必要性を取り除きません。

サイレントディスクの破損を乗り切る必要がある場合は、raid6のようなもの、またはすべてのファイルをチェックサムするファイルシステムを使用してください。


3

raid5はパリティを計算するため、1つのディスク上のサイレントデータ破損をキャッチできるはずです。

いや。セクターをランダムなデータで完全に消去することができ、RAID5はまつげを打つことはありません。RAID1にも同じ問題があります。

一般に、RAIDはリアルタイムのデータ整合性チェックを提供しません。それが提供するのは、1つ(またはいくつかのRAIDレベルで)のドライブ障害に直面した場合の耐障害性です。これらは2つの非常に異なるものです。

ファイルの破損をキャッチするものを探している場合は、ファイルシステムのサポートが必要です。RAIDはそれを行いません。少なくとも、それ自体ではありません。

特定の質問に答えるには:

RAID1は、単純に2つ(またはそれ以上)の同一ミラーとして実装されます。ミラーがセクターの内容に同意しない場合、破損が発生しています。大事なことは、RAIDシステムは特定のセクターを取得するように要求されたときに通常すべてのミラーを読み取らないため、これを認識する位置にいないことが多いということです。効率を上げるために、1つのディスクを読み取るようにスケジュールすることをお勧めします(できれば、現在ヘッドが最も近くにあるディスク)。

「スクラブ」操作中に、RAIDシステムがすべてのデータの整合性を明示的に確認するように要求されたときに、不整合が発見されたと仮定します。この矛盾をどのように解決するかという質問には、簡単な答えはありません。この問題は、RAID1や他のRAIDレベルと同様にRAID5にも等しく影響することに注意してください。

RAID1では、矛盾は異なるデータを含む2つのミラーセクターとして表示されます。RAIDシステムはどのセクターが正しいデータを表すかをどのように決定しますか?まあ、それは実装の詳細であり、正直なところ、Linuxシステムが正確に実装されている方法はわかりません。しかし、問題は根本的なものです。ミラー化されたセクターは異なり、なぜそのようになったのかについての兆候はないかもしれません。したがって、RAIDシステムでできることは、コインを投げることです。ランダムに1つを選択して「正しい」データにします。

3ディスクRAID5では、パリティセクターが正しくないトリプルセクターの形で矛盾が発生します。問題は、3つのセクターのどれが間違っているかということです。繰り返しますが、明らかな答えはありません。3つのうちのいずれかが破損している可能性があり、おそらく知る方法はありません。1つのセクターを他の2つのセクターから再計算する必要がある場合、実際に破損したセクターを選択する可能性は3分の1になります。この意味で、RAID1は実際にはRAID5よりも「安全」であることを示しています。RAID1は、間違ったセクターを選択する確率が50%であり、RAID5は間違ったセクターを選択する確率が67%です。

要約すると、RAIDは、発生したディスクエラーをキャッチするようには設計されていません。RAIDは、ドライブ全体に障害が発生した場合の耐障害性を提供​​します。これ以上何もない。


私が間違っている場合は修正してください。raid5はサイレントディスクの破損を修正できないことを理解していますが、理解できる限りそれをキャッチできるはずです(つまり、エラーを記録することを意味します)。上記のMTilstedの回答は、raid6がサイレントデータ破損を再構築できることも示しています。
ワックスヘッド

1
前述したように、RAIDシステムは通常、サイレントディスク破損を検出する立場にはありません。RAID5は、効率とパフォーマンスの理由でセクターを読み取るとき、要求を満たすために必要なものだけを読み取ります(先読みキャッシングは無視します)。読み取り要求ごとにディスク上のパリティを検証するRAID5を作成できると思いますが、要求された読み取りごとに基本的に2つの物理読み取りを行う必要があるため、処理速度が大幅に低下します。また、読み取りの一部のみを検証すると、サイレント破損のいくつかのインスタンスを見逃すことは避けられません。
スティーブン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.