mdadm raid5による二重ディスク障害の回復-ひねり(ドライブ順)


14

最初に、間違いを犯したこと、およびこのRAID上のすべてではないがほとんどのデータのバックアップがあることを認めさせてください。残りのデータを回復することを望んでいます。ドライブを復旧の専門会社に持ち込むようなお金はありません。

間違い#0、100%のバックアップがない。知っている。

私が持っているmdadm4x3TBのRAID5システムを。/ dev / sd [be]をドライブし/dev/sd[b-e]1ます。すべて1つのパーティションがあります。非常に大きなドライブでのRAID5にはリスクがあることは承知していますが、とにかくそれを行いました。

最近のイベント

2つのドライブに障害が発生すると、RAIDは劣化します。一方のドライブ[/ dev / sdc]は実際になくなっており、もう一方の[/ dev / sde]は電源を入れ直した後に復旧しましたが、RAIDに自動的に再追加されませんでした。そのため、2つのアクティブドライブ[/ dev / sdbおよび/ dev / sdd]のみを持つ4デバイスRAIDが残っていました。

間違い#1、RAIDの復元にドライブのddコピーを使用していない。ドライブも時間もありませんでした。間違い#2 mdadm -E。スーパーブロックと残りのドライブのバックアップを作成していません。

回復の試み

RAIDを縮退モードで再構成しました

mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.

その後、データにアクセスできました。/dev/sdcスペアに交換しました。空の; 同一のドライブ。

/dev/sdc1RAIDから古いものを削除しました

mdadm --fail /dev/md0 /dev/sdc1

間違い#3、ドライブを交換するにこれを行わない

次に、新しいパーティションを作成/dev/sdcし、RAIDに追加しました。

mdadm --add /dev/md0 /dev/sdc1

その後、RAIDの復元を開始しました。ETA 300分 私はプロセス/proc/mdstatを2%で実行し、他のことをしました。

結果を確認する

数時間後(ただし300分未満)、プロセスをチェックしました。の読み取りエラーにより停止しました/dev/sde1

ここが本当にトラブルが始まるところです

次に/dev/sde1、RAIDから削除して、再度追加しました。なぜこれをしたのか思い出せません。遅かった。

mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1

ただし、/dev/sde1現在はスペアとしてマークされていました。そこで、-assume-cleanを使用して、正しい順序だと思っていたものを使用し、欠落している配列全体を再作成することにしました/dev/sdc1

mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1

それは機能しましたが、マウントしようとしたときにファイルシステムが認識されませんでした。(EXT4である必要があります)。

デバイスの注文

次に、持っていた最近のバックアップを確認し/proc/mdstat、ドライブの順序を見つけました。

md0 : active raid5 sdb1[0] sde1[4] sdd1[2] sdc1[1]
      8790402048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

その後、私はこのRAIDが約1年前にドライブの損失を被っていたことを思い出し、故障したドライブを予備のドライブと交換することで回復しました。これにより、デバイスの順序が少し乱れた可能性があります。したがって、ドライブ[3]はなく、[0]、[1]、[2]、および[4]のみがありました。

Permute_arrayスクリプト(https://raid.wiki.kernel.org/index.php/Permute_array.pl)でドライブの順序を見つけようとしましたが、正しい順序が見つかりませんでした。

ご質問

主に2つの質問があります。

  1. ドライブのすべてのスーパーブロックを台無しにしましたが、与えたのは次のもののみです。

    mdadm --create --assume-clean
    

    コマンド(したがって、データ自体を上書きするべきではありません/dev/sd[bde]1。正しいデバイスの順序が見つかった場合、理論的にはRAIDを復元できると/dev/sde1思いますか?

  2. /dev/sde1RAIDでデバイス番号[4]を指定することは重要ですか?私がそれを作成するとき

    mdadm --create /dev/md0 --assume-clean -l5 -n4 \
      /dev/sdb1 missing /dev/sdd1 /dev/sde1
    

    番号[3]が割り当てられます。それがパリティブロックの計算に関係があるのだろうか。それが重要であることが判明した場合、どのようにして/dev/sdb1[0]missing [1]で配列を再作成でき/dev/sdd1[2] /dev/sde1[4]ますか?それが機能するようになったら、劣化モードで起動し、新しいドライブ/dev/sdc1を追加して、再同期させます。

これが最善の行動ではなかったかもしれないことを私に指摘したいのなら大丈夫ですが、あなたは私がこれに気づいたことがわかるでしょう。誰か提案があれば素晴らしいでしょう。


1
+1これは非常によく考えられ、文書化された質問です。私はあなたのために答えがあればいいのに。
付与

コメントありがとうございます、これは難しいと思います。
ピーターボス

これをあきらめましたか、それともまだ作業中ですか?あなたがそれに取り組んでいるなら、私のアドバイス、あなたが敷設しているすべてのドライブを探し出し、DDイメージを作成できる別のマシンでJBODを作成します。(LVMを使用し、終了したらスナップショットを使用するため、スナップショットを削除し続けることができ、全体を再コピーする必要はありません)。私は同じような船に乗っていて、ほとんどのデータを無傷でアレイを回復することができました。
リーガン

あなたの反応をありがとう。しばらくして、これをあきらめ、2台のドライブを新しいドライブに交換し、バックアップから98%を回復し、2%のデータ損失を受け入れて先に進みました。現在RAID-Zを使用しており、バックアップ戦略を更新しています。ここまでは順調ですね。
ピーターボス

回答:


3

質問に答えるために、

  1. 復元できますか?

    • まず最初に-停止し、座って少し考えてみてください。はい、アルゴリズム、チャンクサイズ、およびディスクの順序は、存在するファイルシステムを取得して適切に再構築するために不可欠です。ただし、スーパーブロックを上書きしているため、試行錯誤が残ります。
    • 第二に、以前のディスクレイアウトを取得する方法はありますか?そのディスクレイアウトを安全な場所に保つために、常にmdadm --detail> backupfileを実行します。RAIDでディスクがどのように構成されたかについては、dmesg、/ var / logを確認してください。
    • 最後に、以前のチャンクサイズとディスクの順序が一致する場合、ext4スーパーブロックが破損している可能性があります-他のスーパーブロックを巧みにスキャンする方法があります(そして、既存のファイルシステムのスーパーブロックをスキャンして参照しようとするTestDiskと呼ばれる気の利いたプログラムがあります手動:http : //www.cgsecurity.org/wiki/Main_Page
  2. sdcは新しいため、欠落している句を使用して手動でアセンブルを試行し続けます。そうです、劣化モードでアセンブルするには、sdeが正しい順序である必要があります。正しいレイアウトを見つけたら-配列からすべてのデータをコピーし、レイアウトを文書化して再度開始します(したがって、この問題に再び遭遇することはありません)。

幸運を


1
ext3 / 4は冗長スーパーブロックを書き込みます。スーパーブロックオフセットを引数としてmountまたはfsckに渡して、代わりにバックアップスーパーブロックを使用できます。それでも、RAID 5 =ゲームオーバーでは2台のドライブがダウンします。
dmourati

1

他に何かを行う前に、アレイ内にあった各ドライブの「mdadm --examine / dev / sdX1」と、そこから「mdadm --detail / dev / md0」をキャプチャします。正確なレイアウト。

別の質問でSynologyアレイを回復するには、自分でこれを行う必要がありました。

ドライブが「E」状態のSynology NASでmdadmアレイを復元する方法は?

編集:申し訳ありませんが、すべてのドライブでスーパーブロックを失ったと言ったのを見ました。

後のコマンドは正しく表示されます。最も簡単なオプションは、可能な順序で作成を実行し、それらのファイルシステムを読み取り専用でマウントしてアクセスできるかどうかを確認することです。


1

この質問は古く、誰もあなたを助けることができないと確信していますが、他の人は読んでいます:

あなたが犯した最も危険な間違いは、あなたが番号を付けたものではなく、実行することでした:

mdadm --create ...

元のディスクに、何をすべきかを知る準備ができる前に。これによりメタデータが上書きされるため、ドライブの順序、データオフセット、チャンクサイズなどの記録はありません。

これから回復するには、それらを正しい値で再度上書きする必要があります。これを知る最も簡単な方法は、メタデータを調べることですが、すでにそれを破棄しています。次の方法は推測することです。このようなコマンドのさまざまな組み合わせで、知っているもの(4つのデバイス、レベル5)を除くオプションの値が異なること、およびディスクの順序が異なることを推測してください。

mdadm --create /dev/md0 --assume-clean --metadata=1.2 --raid-devices=4 --level=5 --layout=... --chunk=512 --data-offset=128M /dev/sdb1 missing /dev/sdd1 /dev/sde1

しかし、正しい結果がわからないので、古いディスクでそれを実行してさらに破壊し、同じ致命的な間違いを犯してはなりません。代わりに、オーバーレイを使用します。たとえば、この手順は、オリジナルを安全に保つために機能するはずです。

fsckまたはマウントして検証できる作業配列を生成する引数を見つけたら(たとえば、チェックサム/ pgpで保存しておくべきisoのようなすべてのraidメンバーにまたがるのに十分な大きさのファイルのチェックサムをチェックします)署名、またはunzip -tまたはgunzip -ta大アーカイブ)


ありがとうございました。その間、私はZFS(RAIDZ2)の使用に移りました。しかし、メモを読むのはとても面白かったです。createコマンドメタデータを上書きしたのに、今上書きしないと思っていたことがわかりました。また、オーバーレイファイルについても知りませんでした。それは本当にすてきです!ありがとう!
ピーターボス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.