web-dev-qa-db-ja.com

クラッシュしたLinux md RAID5アレイを回復する方法は?

少し前に、私は自宅にRAID5システムを持っていました。 4つのディスクの1つに障害が発生しましたが、取り外して元に戻した後、問題がないように思われたため、再同期を開始しました。それが終わったとき、私は恐ろしいことに、4つのディスクのうち3つが故障していることに気付きました。しかし、私はそれが可能であると信じていません。ディスクには複数のパーティションがあり、それぞれが異なるRAIDアレイの一部です。

  • md0は、sda1、sdb1、sdc1、およびsdd1で構成されるRAID1アレイです。
  • md1は、sda2、sdb2、sdc2、およびsdd2で構成されるRAID5アレイです。
  • md2は、sda3、sdb3、sdc3およびsdd3で構成されるRAID0アレイです。

md0とmd2はすべてのディスクが稼働していることを報告し、md1は3つが失敗したことを報告します(sdb2、sdc2、sdd2)。ハードドライブが故障すると、中間のパーティションだけでなく、すべてのパーティションが失われるべきだというのが私の理解です。

その時点で、コンピュータの電源を切り、ドライブを取り外しました。それ以来、新しいディスクの小さいコンピュータを使用していました。

データを回復する希望はありますか?私のディスクが実際に機能していることをmdadmに納得させることができますか?実際に問題があるのはsdcだけですが、そのディスクも他のアレイによって報告されています。

更新

ようやく古いディスクを接続して、このマシンをSystemRescueCdから起動する機会を得ました。上記はすべてメモリから書き込まれたものです。今私はいくつかのハードデータを持っています。これがmdadm --examine /dev/sd*2の出力です

/dev/sda2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:40:48 2010
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b48835 - correct
         Events : 53204

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     0       8        2        0      active sync   /dev/sda2

   0     0       8        2        0      active sync   /dev/sda2
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdb2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b4894a - correct
         Events : 53205

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8       18        1      active sync   /dev/sdb2

   0     0       0        0        0      removed
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48975 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     2       8       34        2      active sync   /dev/sdc2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdd2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48983 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     4       8       50        4      spare   /dev/sdd2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2

前回のブート以降、状況が変わったようです。これを正しく読んでいる場合、sda2、sdb2とsdc2は機能しており、同期されたデータが含まれており、sdd2はスペアです。 3つのディスクが故障したのをはっきりと覚えていますが、これは朗報です。それでも、アレイはまだ機能していません。

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md125 : inactive sda2[0](S) sdb2[1](S) sdc2[2](S)
      1875194880 blocks

md126 : inactive sdd2[4](S)
      625064960 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

md0はmd127に名前が変更されているようです。 md125とmd126は非常に奇妙です。それらは2つではなく1つのアレイである必要があります。以前はmd1と呼ばれていました。 md2は完全になくなっていますが、それは私のスワップなので、気にしません。

私は別の名前を理解でき、それは本当に重要ではありません。しかし、なぜ3つの「アクティブ同期」ディスクを備えたアレイが読み取れないのですか?そして、sdd2が別の配列になっているとどうなりますか?

更新

スーパーブロックをバックアップした後、次のことを試しました。

root@sysresccd /root % mdadm --stop /dev/md125
mdadm: stopped /dev/md125
root@sysresccd /root % mdadm --stop /dev/md126
mdadm: stopped /dev/md126

ここまでは順調ですね。 sdd2はスペアなので、まだ追加したくありません。

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2 missing 
mdadm: cannot open device missing: No such file or directory
mdadm: missing has no superblock - Assembly aborted

どうやらできません。

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2        
mdadm: /dev/md1 assembled from 1 drive - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdb2[1](S) sda2[0](S)
      1875194880 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

それもうまくいきませんでした。すべてのディスクで試してみましょう。

mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c,d}2
mdadm: /dev/md1 assembled from 1 drive and 1 spare - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat                           
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)
      2500259840 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

運が悪い。 この答えに基づいて 私は試してみるつもりです:

mdadm --create /dev/md1 --assume-clean --metadata=0.90 --bitmap=/root/bitmapfile --level=5 --raid-devices=4 /dev/sd{a,b,c}2 missing
mdadm --add /dev/md1 /dev/sdd2

安全ですか?

更新

私はコメントでそのテーブルを作成するために使用した superblockパーサースクリプト を公開しています。多分誰かがそれを便利だと思うでしょう。あなたのすべての協力に感謝します。

17
stribika

まずディスクを確認し、スマートセルフテストを実行してみてください

for i in a b c d; do
    smartctl -s on -t long /dev/sd$i
done

完了するまでに数時間かかる場合がありますが、各ドライブのテストステータスを数分ごとに確認してください。

smartctl -l selftest /dev/sda

読み取りエラーのためにディスクのステータスが完了していないと報告された場合、このディスクはmd1の再構成に対して安全でないと見なす必要があります。セルフテストが終了したら、アレイの再組み立てを開始できます。オプションで、特に注意したい場合は、続行する前にディスクを別のマシンに移動します(RAM /コントローラーなどが不良の場合に備えて)。

最近、このようなケースがありました。 1台のドライブが故障し、アレイに再度追加しましたが、再構築中に4台中3台のドライブが完全に故障しました。/proc/mdadmの内容はあなたのものと同じでした(おそらく同じ順序ではありません)

md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)

しかし、私は幸運で、これでアレイを組み立て直しました

mdadm --assemble /dev/md1 --scan --force

あなたが提供した--examine出力を見ると、次のシナリオが発生したことがわかります:sdd2が失敗し、それを削除して再追加したため、再構築しようとしているスペアドライブになりました。しかし、sda2の再構築が失敗した後、sdb2が失敗しました。したがって、イベントカウンターは、アレイ内の最後のアクティブなドライブであるsdc2とsdd2で大きくなります(ただし、sddは再構築する機会がなかったため、最も古いものです)。イベントカウンターの違いにより、-forceが必要になります。だからあなたもこれを試すことができます

mdadm --assemble /dev/md1 /dev/sd[abc]2 --force

結論として、上記のコマンドが失敗した場合は、次のように配列を再作成する必要があると思います。

mdadm --create /dev/md1 --assume-clean -l5 -n4 -c64 /dev/sd[abc]2 missing

あなたが--createmissingの部分は重要です。アレイに4番目のドライブを追加しないでください。構築が始まり、データが失われます。ドライブが欠落しているアレイを作成しても、その内容は変更されず、コピーelsewhereを取得する機会があります(raid5は機能しませんraid1)と同じです。

それでも配列が表示されない場合は、ここでこの解決策(Perlスクリプト)を試してください 配列の再作成

最終的にアレイを正常に起動できた場合、ファイルシステムは汚れており、おそらく破損しています。再構築中に1つのディスクに障害が発生した場合、アレイが停止して他のディスクへの書き込みを行わないままフリーズすることが予想されます。この場合、2つのディスクに障害が発生し、たぶんシステムが完了できなかった書き込み要求を実行していたため、一部のデータが失われた可能性がありますだけでなく、あなたがそれに気付かない可能性もあります:-)

編集:いくつかの説明が追加されました。

12
forcefsck

mdadmの使用中に多くの問題が発生しましたが、データが失われることはありませんでした。すべてのデータが失われる可能性があるため、--forceオプションは使用しないか、慎重に使用してください。 /etc/mdadm/mdadm.confを投稿してください

1
Glendyr