RAID 10デバイスを初期化する必要があるのはなぜですか?


9

Linuxソフトウェアraidデバイスをraid10デバイスとして作成するとき、なぜ初期化する必要があるのか​​と混乱します。同じ質問がraid1またはraid0にも当てはまります。

結局のところ、ほとんどの人はその上にある種のファイルシステムを置き、そのファイルシステムはディスクのデータの状態を想定すべきではありません。各書き込みは、Nミラーが書き込まれるraid10またはraid1セットアップの両方のディスクに影響します。raid10は時間の経過とともに発生するため、最初に初期化する理由はまったくありません。

パリティ要件があるraid5 / 6セットアップの理由は理解できますが、それでもこれは遅延して実行できるようです。

それは人々が気分を良くするためだけのものですか?


1
良い質問。RAIDが作成されているときに同期をスキップすることは可能であり、1つ以上の基盤となるデバイスがSSDである場合にそうするための推奨事項に遭遇しました。正しく動作するために同期が必要になるシナリオが存在するかどうかはわかりません。
kasperd

回答:


2

ミラー間の違いは定期的なチェック中にエラーとして表示されるため、初期同期が必要です。

そして、定期的なチェックを行う必要があります。


1
データの読みやすさの定期的なチェックが役立つ理由がわかります。しかし、レプリカが同一であるかどうかを定期的にチェックすると、どのようなメリットがありますか?このようなチェックは、データをチェックサムするファイルシステムによって実行される場合に役立ちます。しかし、ファイルシステムの知識のないRAIDレイヤーでは、2つの異なるレプリカのどちらが適切であるか、最初に不一致がどのように発生したか、そしてどのファイル(存在する場合)が影響を受けるかを知ることができません。したがって、この層での不整合に関するアラートは、管理者がアラートを使って何もできないため、ほとんど役に立たないようです。
kasperd

とにかくデータを読み取る必要があるので、データを比較するコストは最小限ですが、ディスクの1つが他の方法では検出されない問題(たとえば、ドライブ自体のキャッシュの不良RAM)を引き起こしたことがわかります。次に、管理者はアレイを分割し、手動で違いを確認して、交換するドライブを選択します。
Simon Richter

その場合は、回答でそれを拡張する必要があります。
kasperd

もう何年も経っていますが、これが唯一の正当な理由です。データが同期していない場合、それは重要ではないと思います。そのデータは、定義上、まだ書き込まれていないため、raidドライブに適用されたファイルシステムがこれらのブロックから読み取られることはないためです。ただし、定期的なチェックが最初から成功していることを確認するには、これが必要になります。ありがとう!
マイケルグラフ

7

RAID 1はミラーであるため、ミラー内のすべてのディスクが相互の正確なコピーであることに依存しています。ランダムなハードドライブと別のランダムなハードドライブを使用すると、データが異なる可能性があるため、この推定に違反します。これが、初期化が必要な理由です。最初のドライブの内容を他のドライブにコピーするだけです。一部の条件では、ドライブを初期化しなくても済むことに注意してください。通常、工場出荷時の新しいデバイスには、すでにゼロが配置されているため、単にこれを無視できます。mdadmオプションでは、--assume-cleanこれを行いますが、あなたを警告します:

   --assume-clean

mdadmに、アレイが既に存在し、クリーンであることがわかっていることを伝えます。実際にアレイに書き込みを行わない限り、データが影響を受けないことが確認できるため、重大な障害から回復しようとする場合に役立ちます。RAID1またはRAID10を作成するときに、最初の再同期を避けたい場合にも使用できますが、この方法は(通常は安全ですが)推奨されません。これは、自分が何をしているか本当にわかっている場合にのみ使用してください。

これを行わないと、ドライブと読み取りの間に矛盾が生じ、ドライブが何を読み取るかがわかりません。ほとんどの場合、そのデバイスから何かを読み取る前に書き込みを行うため、ファイルシステムはかなり安全であるはずです(ただし、以下に注意してください)。

少なくともLinux mdadmはバックグラウンドでアレイを初期化することに注意してください。最初の1秒でその上にFSを楽しく作成できます。初期化が完了するまでパフォーマンスは低下しますが、それだけです。

だが:

a)mkfs一部のユーティリティを実行するときは、そのドライブにすでに何かがあるかどうかを確認します。これはドライブのよく知られたいくつかの領域にしか触れませんが、何かを書き込む前に読み取るため、危険にさらされます。

b)アレイを定期的に再同期する場合、RAIDデバイスはFSを認識しません。それは単にすべてのデバイスからすべてのブロックを読み取り、それらを比較します。また、コピーオンライトFS(ZFSやBTRFSなど)を使用しておらず、FSを一杯にしない場合は、ブロックがFSの観点から何年も初期化されていない状態が続く可能性が非常に高くなります。

RAID1デバイスと再同期する理由

同じ理由で、RAID5デバイスまたはその他のレベル(RAID0を除く)と再同期します。すべてのデータを読み取り、RAIDチェックサム(RAID 5または6)を比較/検証します。ビットが何らかの方法で反転された場合(HDメモリが自発的に反転したため、あなたとあなたの5人の隣人の携帯電話がプラッターのこの特定の領域で偶然干渉したため)、それは不整合を検出しますが、できません助けます。OTOH、ハードドライブの1つが単に「そのブロックを読み取れません」と報告する場合は、ドライブの障害が発生している可能性が高く、障害を早期に検出し、低下モードで実行している時間を短縮します(ドライブの故障ではなく、気づいたときから)。1つのドライブに障害が発生した場合、RAIDはあなたを助けません。

RAID10

現在、RAID10の場合、上記のすべてが成り立ちます。結局のところ、RAID10は、「2つのRAID1デバイスをRAID0ペアに入れている」ことを伝える賢い方法にすぎません。

警告:

これはすべて未定義の動作です。mdadm他のソフトウェアRAID実装を使用してLinuxで確認した理由は、動作が異なる場合があります。mdadm私が使用しているもの以外のバージョンのLinuxカーネルやツールも、動作が異なる場合があります。


1
の引用を入力してくださいIf you don't do it, there is a discrepancy between the drives and it's read, the RAID device will report failure of a drive。私はその発言は正しくないと思います。少なくともエラーメッセージの例を提供し、どのような状況下で発生したかをソースに問い合わせて確認できるようにします。
kasperd

1
それは良いです。ゼロの書き込みに関するステートメントを確認しましたか?私はそれがゼロを書き込むのではなく、ディスクの1つを他のディスクにコピーすると思います。
kasperd

1
While this only touches a few well-known regions of drive, it reads before you write anything, thus putting you in danger.何の危険にさらされていますか?読み取りによって何かが発生する可能性があることは承知していますが、(a)読み取られている情報がどこでも使用されておらず、(b)書き込みが行われようとしている場合に、ユーザーに何らかの危険が生じるのはなぜですか?
Vegard

1
@kasperd正解です。最初のデバイスを2番目のデバイスにコピーします。urandomLinuxでmdadmを使用して初期化されたデバイスでテストすると、最初の80kと最後の48kが異なることが示されています。後者は、おそらくRAIDサイズをブロックサイズに丸めるためです。私はさまざまなデバイスサイズでテストしていませんが、80 + 48はRAIDデバイスと基盤となるブロックデバイスのサイズの違いです。
Torinthiel 2016年

1
考慮すべきことの1つは、通常、初期化中に、RAIDシステムは常にディスクAを読み取り、ディスクBにコピーするということです。なぜですか?初期化中にディスクを使用できるため、ブロック100,000でデータを書き込んだ可能性があります。raid initがそのブロックに到達すると、AとBの両方が既に同一であるため、何も起こりません。代わりにブロックをゼロにすると、適切なデータが消去されます。したがって、もう一度、ブロックが同一であることを確認する2つの理由を確認します。「常に実行されている」と「後でチェックを実行できる」-このチェックの有用性についても質問します。読書は良いですよね?わからない。
Michael Graff、2016年

5

RAID 1はミラーであり、RAID 10はミラーのストライプであることを忘れないでください。

問題は、各ミラーのどのディスクでデータが有効かということです。新しく作成されたアレイでは、ディスクに異なるデータが含まれる可能性があるため、これを知ることはできません。

RAIDは非常に低いレベルで動作することも覚えておいてください。ファイルシステムやディスクに保存されている可能性のあるデータについては何も知りません。でも、そこにいない可能性がありますこと、使用中のファイルシステム。

したがって、これらのアレイの初期化は、各ミラーの1つのディスクのデータをそのまま他のディスクにコピーすることで構成されます。

これは、配列が作成の瞬間から安全に使用でき、バックグラウンドで初期化できることも意味します。ほとんどのRAIDコントローラー(およびLinux mdraid)には、このオプション、または自動的に実行するオプションがあります。


コメントは詳細な議論のためのものではありません。この会話はチャットに移動しました
マイケルハンプトン

1

簡単に言うと、2つの新しいディスクは、最初からお互いのミラー完全コピーであるとは想定されていないためです。

彼らはお互いの完全なコピーに変える必要があります。

さらに、初期化には、アレイ構成に関する情報を含むメタデータスーパーブロックの設定も含まれます。

/ proc / mdstatファイルは、デバイスが起動したこと、ミラーが再構築されていること、および再構築の完了のETAを通知します。再構築は、アイドルI / O帯域幅を使用して行われます。したがって、ディスクLEDにも多くのアクティビティが表示されますが、システムは引き続き応答するはずです。

再構築プロセスは透過的であるため、ミラーが現在再構築中である場合でも、実際にデバイスを使用できます。


2
しかし、なぜ彼らはお互いの完全なコピーである必要があるのでしょうか?ファイルシステムによって決して使用されなかったセクターで2つが矛盾していることから、何が壊れる可能性がありますか?
kasperd

@kasperd RAIDは、どのファイルシステムよりも低いレベルで実装されています。だから問題は、あなたが参照する「ファイルシステム」とは何かということになります。
Taemyr、2016年

@Taemyr私は特定のファイルシステムについて言及していません。ファイルシステムを初期化する前に、レプリカを同期していなかったRAID-1でそれを使用することにより、何が問題になるかを説明します。
kasperd

@kasperd RAIDが動作するレベルで破壊するファイルシステムはありません
Taemyr、2016年

1
私の場合、元のポスターのように、どのファイルシステムでもかまいません。書き込まれたことがないセクターを読み取るファイルシステムがないことは知っています。したがって、これらの書き込まれていないセクターの不確定な状態は問題ではありません。
Michael Graff、2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.