ディスクを交換した後にRAID 5が壊れる

ディスクを交換した後にRAID 5が壊れる

サーバーから、ディスクの 1 つがブロックの読み取りに失敗したというメールが届きました。そこで、完全に故障する前に交換することにしました。新しいディスクを追加し、故障したディスクを交換しました。

sudo mdadm --manage /dev/md0 --add /dev/sdg1
sudo mdadm --manage /dev/md0 --replace /dev/sdb1 --with /dev/dbg1

同期後、失敗した /dev/sdb1 を削除したかったので、次のコマンドでアレイから削除しました。

sudo mdadm --manage /dev/md0 --remove /dev/sdb1

しかし、ケースからディスクを取り出すときは、まず他の 2 つを取り外し、すぐに元に戻します。その後、RAID がまだ動作しているかどうかを確認しますが、動作していませんでした。自動的に修復されることを期待して、再起動を試みました。これまではこれが問題になったことはありませんでしたが、ディスクを交換したこともありません。

これが機能しなくなった後、何をすべきか考えてディスクを再度追加してみましたが、これは役に立たず、アセンブルも機能しませんでした。

sudo mdadm --assamble --scan

ディスクが2つしか検出されないので、ディスクの名前を伝えようとしました

sudo mdadm -v -A /dev/md0 /dev/sda1 /dev/sdf1 /dev/sdc1 /dev/sdd1

しかし、すべてのディスクがビジー状態であると表示されます。

sudo mdadm -v -A /dev/md0 /dev/sda1 /dev/sdf1 /dev/sdc1 /dev/sdd1 
mdadm: looking for devices for /dev/md0
mdadm: /dev/sda1 is busy - skipping
mdadm: /dev/sdf1 is busy - skipping
mdadm: /dev/sdc1 is busy - skipping
mdadm: /dev/sdd1 is busy - skipping

再起動後、sdg1 は sdf1 を取得します。

mdstat はディスクを正しく検出しているようです (役立つことを期待して sdb1 を再度挿入し、ありとなしで試しました)。

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : inactive sdd1[3](S) sdb1[1](S) sdc1[2](S) sda1[0](S) sdf1[4](S)
      14650670080 blocks super 1.2
       
unused devices: <none>

ディスクのみをクエリして/dev/sda1同じ/dev/sdf1アレイ状態を表示するとAA..

sudo mdadm --query --examine /dev/sda1 
/dev/sda1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 7c3e9d4e:6bad2afa:85cd55b4:43e43f56
           Name : lianli:0  (local to host lianli)
  Creation Time : Sat Oct 29 18:52:27 2016
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 5860268032 (2794.39 GiB 3000.46 GB)
     Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262056 sectors, after=0 sectors
          State : clean
    Device UUID : 3e912563:b10b74d0:a49faf2d:e14db558

Internal Bitmap : 8 sectors from superblock
    Update Time : Sat Jan  9 10:06:33 2021
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : c7d96490 - correct
         Events : 303045

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AA.. ('A' == active, '.' == missing, 'R' == replacing)
sudo mdadm --query --examine /dev/sdd1 
/dev/sdd1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 7c3e9d4e:6bad2afa:85cd55b4:43e43f56
           Name : lianli:0  (local to host lianli)
  Creation Time : Sat Oct 29 18:52:27 2016
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 5860268032 (2794.39 GiB 3000.46 GB)
     Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262056 sectors, after=0 sectors
          State : clean
    Device UUID : bf303286:5889dc0c:a6a1824a:4fe1ae03

Internal Bitmap : 8 sectors from superblock
    Update Time : Sat Jan  9 10:05:58 2021
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : ef1f16fd - correct
         Events : 303036

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 3
   Array State : AA.A ('A' == active, '.' == missing, 'R' == replacing)
sudo mdadm --query --examine /dev/sdc1 
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 7c3e9d4e:6bad2afa:85cd55b4:43e43f56
           Name : lianli:0  (local to host lianli)
  Creation Time : Sat Oct 29 18:52:27 2016
     Raid Level : raid5
   Raid Devices : 4

 Avail Dev Size : 5860268032 (2794.39 GiB 3000.46 GB)
     Array Size : 8790402048 (8383.18 GiB 9001.37 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262056 sectors, after=0 sectors
          State : clean
    Device UUID : b29aba8f:f92c2b65:d155a3a8:40f41859

Internal Bitmap : 8 sectors from superblock
    Update Time : Sat Jan  9 10:04:33 2021
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 47feb45 - correct
         Events : 303013

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 2
   Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)

引き続き試してみますが、現時点ではアイデアが尽きています。RAID 内のディスクを交換するのは今回が初めてです。誰かが助けてくれることを願っています。

少なくともバックアップはありますが、バックアップも機能していないことに気付かれるようにハードドライブをリセットしたくはありません...

アップデート: すべてのディスクを追加してアセンブルすると、次のようになりました。

sudo mdadm -v -A /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sdf1
mdadm: looking for devices for /dev/md0
mdadm: /dev/sda1 is identified as a member of /dev/md0, slot 0.
mdadm: /dev/sdb1 is identified as a member of /dev/md0, slot 1.
mdadm: /dev/sdc1 is identified as a member of /dev/md0, slot 2.
mdadm: /dev/sdd1 is identified as a member of /dev/md0, slot 3.
mdadm: /dev/sdf1 is identified as a member of /dev/md0, slot 1.
mdadm: added /dev/sdf1 to /dev/md0 as 1
mdadm: added /dev/sdc1 to /dev/md0 as 2 (possibly out of date)
mdadm: added /dev/sdd1 to /dev/md0 as 3 (possibly out of date)
mdadm: added /dev/sda1 to /dev/md0 as 0
mdadm: /dev/md0 assembled from 2 drives - not enough to start the array.

答え1

解決策を見つけました:

さらに調査を進め、詳細モード ( ) で取得した「古い可能性があります」という情報に基づいてsudo mdadm -v -A /dev/md0 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sdf1、次のページを見つけました。https://raid.wiki.kernel.org/index.php/RAID_Recovery

「--force を使用してアセンブルを試行」のセクションでは、イベント カウントの差が 50 未満の場合に強制的に使用するように説明されています。私の場合はそれよりずっと少なかったので試してみましたが、RAID アレイを再度接続すると、ディスクの 1 つがまだ古いものとして検出されましたが、他のディスクの情報と同期できると思います。そのため、一部のデータを失った可能性がありますが、アレイから間違ったディスクを削除した場合は、アレイが同期されるまで待つ必要があることがわかりました...

レイドを再び動作させるために使用したコマンド:

sudo mdadm --stop /dev/md0
sudo mdadm -v -A --force /dev/md0 /dev/sda1 /dev/sdc1 /dev/sdd1 /dev/sdf1

アップデート: おそらく 1 つのドライブが追加されなかったため、アレイを動作可能な状態に戻すために、強制的に 1 つのドライブのみが追加されました。イベントの差が最も大きいデバイスは、後で追加する必要がありました--re-add

sudo mdadm --manage /dev/md0 --re-add /dev/sdc1

これでアレイは再び同期され、障害のあるハードドライブを再度削除できるようになりました。

関連情報