LoginSignup
4
5

More than 1 year has passed since last update.

mdadm raid5 の復旧

Last updated at Posted at 2019-07-24

※CUIでの操作を前提に書いています。
#PCの構成
OS:Ubuntu 18.04.2 LTS

/dev/sda1 : システムパーティション
/dev/md1 : データ用パーティション、raid5、3TB x4 + spare 3TB x1

  • /dev/sdb1 : md1 active device ← 今回破損したHDD
  • /dev/sdc1 : md1 active device
  • /dev/sdd1 : md1 active device
  • /dev/sde1 : md1 active device
  • /dev/sdf1 : md1 spare device

#RAID破損の経緯
md1の中身を操作していると、突然cdコマンドが利かなくなり、ディレクトリ移動できなくなる。

再起動すると、OSがエマージェンシーモードでしか立ち上がらなくなる。

ubuntuの入ったbootable usbを用意し、これを起動して、sda1から必要なファイルを抜いてsdaにOSを再インストール。

インストール後、mdadmでraidディスクを調べると…

#症状
raidパーティション名がmd127となっている。
raidデバイス/dev/mdが存在しない。
md127はマウントできない。
mdadm --detail で見ると、raid5で組んでいたはずのアレイが、raid0と表示され、しかもinactiveとなっている。

terminal
$ sudo mdadm --detail /dev/md127

        Version : 1.2
     Raid Level : raid0
  Total Devices : 5
    Persistence : Superblock is persistent

          State : inactive
Working Devices : 5

           Name : xxxx:1
           UUID : xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx
         Events : 12583

Number  Major  Minor RaidDevice
  -       8      xx      -        /dev/sdf1
  -       8      xx      -        /dev/sde1
  -       8      xx      -        /dev/sdd1
  -       8      xx      -        /dev/sdc1
  -       8      xx      -        /dev/sdb1

xxは伏せ字

#復旧手順
まず、異常のある構成デバイスを探す。(sdb1を例として記載)

terminal
$ sudo mdadm --examine /dev/sdb1

        Magic : a92b4efc
      Version : 1.2
  Feature Map : 0x1
   Array UUID : xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx
         Name : xxxx:1
Creation Time : Sun Dec 11 21:09:08 2016
   Raid Level : raid5
 Raid Devices : 4
     .
     . (省略)
     .
  Device Role : Active device 3
  Array State : ...A ('A' == active, '.' == missing, 'R' == replacing)

Array Stateの行から、sdb1に異常があることがわかる。
sdb1以外の構成デバイスのArray stateはAAAAだった。

raid5なので、HDD1基が壊れても復旧できることを信じ、sdb1以外でアレイを構成する。そのためにmd127を止める。

terminal
$ sudo mdadm --stop /dev/md127

mdadm: stopped /dev/md127

sdb1以外でassembleする。

terminal
$ sudo mdadm --assemble /dev/md127 /dev/sdc1

mdadm: /dev/md127 assembled from 1 drive - not enough to start the array.

$ sudo mdadm --assemble /dev/md127 /dev/sdd1

mdadm: Merging with already-assembled /dev/md/xxxx:1
mdadm: /dev/md/xxxx:1 assembled from 2 drives - not enough to start the array.

$ sudo mdadm --assemble /dev/md127 /dev/sde1

mdadm: Merging with already-assembled /dev/md/xxxx:1
mdadm: /dev/md/xxxx:1 assembled from 3 drives - need all 4 to start it (use --run to insist).

$ sudo mdadm --assemble /dev/md127 /dev/sdf1

mdadm: Merging with already-assembled /dev/md/xxxx:1
mdadm: /dev/md/xxxx:1 assembled from 3 drives and 1 spare - need all 4 to start it (use --run to insist).

アレイをrunする。

terminal
$ sudo mdadm --run /dev/md127

mdadm: started array /dev/md/xxxx:1

アレイのdetailを確認する。

terminal
$ sudo mdadm --detail /dev/md127

           Version : 1.2
     Creation Time : Sun Dec 11 21:09:08 2016
        Raid Level : raid5
        Array Size : 8781616128 (8374.80 GiB 8992.37 GB)
     Used Dev Size : 2927205367 (2791.60 GiB 2997.46 GB)
      Raid Devices : 4
     Total Devices : 4
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Mon Jul 22 23:26:15 2019
             State : clean, degraded
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

           Name : xxxx:1
           UUID : xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx
         Events : 12583

Number  Major  Minor RaidDevice State
  0       8      xx      0      active sync  /dev/sdc1
  1       8      xx      1      active sync  /dev/sde1
  3       8      xx      2      active sync  /dev/sdd1
  -       0      0       3      removed
         
  4       8      xx      -      spare  /dev/sdf1

この後、何もせずともspare rebuildingが始まり、復旧を完了した。

#おまけ 外した構成デバイスをフォーマットしてraidアレイに戻す
※HDDがハード的に生きていると確認できた場合のみ。

パーティションsdb1を削除し、GPTパーティションテーブルを作成する。

terminal
$ sudo fdisk /dev/sdb
fdisk
コマンド (m でヘルプ): g
新しい GPT ディスクラベル (GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) を作成しました。

sdbにパーティションを作成する。

terminal
コマンド (m でヘルプ): n
パーティション番号 (1-128, 既定値 1): 
最初のセクタ (2048-5860533134, 既定値 2048): 
最終セクタ, +セクタ番号 または +サイズ{K,M,G,T,P} (2048-5860533134, 既定値 5860533134): 

新しいパーティション 1 をタイプ Linux filesystem、サイズ 2.7 TiB で作成しました。
パーティション #1 には linux_raid_member 署名が書き込まれています。

署名を削除しますか? [Y]es/[N]o: Y

署名は write (書き込み)コマンドを実行すると消えてしまいます。

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

riadアレイにsdb1をaddする。

terminal
$ sudo mdadm --manage /dev/md127 --add /dev/sdb1

mdadm.confを更新するため、mdadm.confのパーミッションを変更する。
(super userでログインしている場合は不要)

terminal
$ sudo chmod 647 /etc/mdadm/mdadm.conf

mdadm.confにraidアレイの最新情報を書き込む。

terminal
$ sudo mdadm --detail /dev/md127 --brief >> /etc/mdadm/mdadm.conf 

最後に、パーミッションを戻す。

terminal
$ sudo chmod 644 /etc/mdadm/mdadm.conf

mdadm.confに古いアレイの情報がある場合は削除を忘れずに。
mdadm.confでraidアレイのパーティション名を変更すれば、--scanをつかって--assembleし直したときにパーティション名が変わる。

以上。

2022/11/9 追記
またこの記事に助けられた。これで何回目だろう。多分5回目。うちの趣味サーバーはよくクラッシュする。今回はRAID5のチェックを回しながら、サーバー内部のFANの角度を調整していたらSATAケーブルに触れて活電挿抜してしまったらしく、OSがクラッシュした。OS再インストール後にRAIDを復旧してみると、もともとアクティブだったHDD 2枚がbusyでassembleできず、顔面蒼白。誤って触ってしまったSATAカードを交換してみたところ、何故か、HDD 1枚が復活、ギリギリのところで復旧させられた。最後まで諦めない大切さを改めて感じた。本当に焦った。もうRAIDチェックを回しながらPCの蓋は開けない。それと2ポートのSATAカードを使う場合はRAID6で組んだほうがいいのかも。カードが原因でHDD 2枚がお亡くなりになっても復旧できるだろうから。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5