web-dev-qa-db-ja.com

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

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

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

RAID1が実際にデータ保護を提供しておらず、ディスク保護を提供している場合、mdadmを使用して2つのディスクの「RAID5のような」セットアップを作成するためのトリックはありますか?例えば。容量は緩いですが、データの冗長性も維持していますか?

3
Waxhead

実際の質問に焦点を当てて...

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

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

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

  • 書き込み中にヘッド位置決めエラーが発生したため、近くのランダムなセクターがデータで上書きされ、そのブロックのECCデータが修正された場合。実際に書き込まれたブロックを読み取ると、そうではない場合でも、ブロックを正常に読み取ったことが報告されます。
  • サーバーは、アレイ内のすべてのディスクにデータを書き込む前に電源を失い、そのストライプ内の一部のブロックが他のブロックと一致しなくなります。

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

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

  • RAID6の場合-エラーがパリティブロックの1つにある場合のみ。これは、データ、パリティ1、およびパリティ2の間で3方向の投票が行われる可能性があるためです。パリティブロック1または2がエラーがあると言っているが、他の2はエラーがない場合、パリティブロックは基本的に投票されません。エラーがデータブロックの1つにある場合に問題を修正できない理由は、通常は許可されていない 3ディスクRAID 6でない限り、どのデータブロックにエラーがあるかを知ることができないためです。 。 mdadmを含む実装が、このようなあいまいな修正スキームに煩わされ、エラーとして報告されることはないと思います。
  • すでに同期されていると思われる3つ以上のアクティブなディスクを備えたRAID1の場合、単純な多数決を行うことができます。繰り返しになりますが、3つ以上のディスクRAID 1を使用する人はあまりいないため、RAID実装がこのロジックに煩わされるかどうかはわかりません。必要なロジックを実装した場合は[.____]
    • 通常は3つのディスクがあり、サイレントビット腐敗のあるブロックは自動修正できますが、再構築中の場合は、ActiveSyncされたディスクの数が2つに減ります。
    • 4ディスクRAID1は、1つの障害が発生したディスクの再構築中でも、1つの不良ブロックを持つストライプを自動修正できます。
    • 5つのディスクは、2つのサイレント不良ブロックを含むストライプを自動修正できますが、同時に障害が発生した1つまたは2つのディスクの再構築中に見つかった場合は、1に減ります。

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

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

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

3
BeowulfNode42

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

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

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

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

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

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

6
rob

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つのうちのいずれかが破損している可能性があり、おそらく知る方法はありません。他の2つから再計算するセクターを1つ選択する必要がある場合、実際に破損したセクターを選択する可能性は3分の1です。これは、この意味で、RAID1が実際にはRAID5よりも「安全」であることを示しています。 RAID1は50%の確率で間違ったセクターを選択しますが、RAID5は67%の確率で間違った選択をします。

要約すると、RAIDは、発生したディスクエラーをキャッチするようには設計されていません。 RAIDは、ドライブ全体の障害に直面してもフォールトトレランスを提供します。これ以上何もない。

3
Steven Monday

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

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

ただし、覚えておいてください。ハードディスクでのサイレントビットの破損はほとんど発生しません(ハードディスクはすべてのブロックで独自の内部チェックサムを取得します)。RAIDによってバックアップが不要になるわけではありません。

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

3
MTilsted