破損したLinux md RAID5アレイを修復する方法は?

破損した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

安全ですか?

修正する

投稿しましたスーパーブロックパーサースクリプト一度コメントにこの表を作成したことがあります。たぶん誰かが役に立つと思うかもしれません。助けてくれてありがとう。

答え1

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

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

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

smartctl -l selftest /dev/sda

読み取りエラーが原因でディスクの状態が不完全であると報告された場合、そのディスクはmd1の再組み立てに対して安全ではないと見なされるべきです。セルフテストが完了したら、アレイの再組み立てを開始できます。または、特に注意を払う場合は、続行する前にディスクを別のコンピュータに移動してください(メモリ/コントローラなどが損傷している場合)。

最近、このようなケースに触れました。 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

--createこの部分は重要です。これにより、missingアレイに4番目のドライブを追加しようとしないでください。これにより構築が開始され、データが失われます。。不足しているドライブを持つアレイを作成しても、その内容は変更されず、コピーを取得できます。他の場所で(raid5はraid1とは異なる動作をします。)

アレイを起動できない場合は、ここでこの回避策を試してください(perlスクリプト)。配列の再作成

結局のところ、アレイを起動すると、ファイルシステムがきれいでなく破損する可能性があります。再構築中に1つのディスクに障害が発生すると、他のディスクに書き込まずにアレイが停止して停止することがあります。この場合、2 台のディスクが故障します。おそらくシステムが完了できない書き込み要求を実行しているため、一部のデータが失われる可能性がありますが、まったく気付かない可能性があります。 :-)

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

答え2

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

関連情報