ソフトウェアRAIDのデグレード(縮退)モードからの復旧

RAID1 - mirror


二週間程前の話。
週末にある会社のビル停電に伴って、金曜の晩に部門のサーバを止めるべくリモート接続を行い、各サービスを停止させ、シャットダウンのコマンドを発行した。


十数分後、ワークステーションルームにコンセントを抜きに行ったのだが、ダウン時にRAIDデバイスの部分でエラーが発生して止まっており、シャットダウンできていなかった。
ディスクへのアクセスもない状態だったので、止むを得ず一旦強制停止。
念のため再起動を行ってみたところ、見事にRAIDを組んでいるディスクがデグレードモード(縮退運用)で動いていた。


デグレードとはいえ問題なく運用できていたのと、ディスク自体は認識されていた(dmesgのチェック、およびそのディスクからswap領域が確保されていた)ため、週末に作戦を練って月曜の朝に対応するべしと思い、一旦電源を落として放置。(すいません^^;)

状況確認と調査

さて、月曜の朝。
電源を投入後、状況を確認。

server:~# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
      154296192 blocks [2/1] [U_]

unused devices: 

当然、状況は変わらず。

server:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Wed Oct 18 19:25:59 2006
     Raid Level : raid1
     Array Size : 154296192 (147.15 GiB 158.00 GB)
    Device Size : 154296192 (147.15 GiB 158.00 GB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Mon Dec  4 10:37:56 2006
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           UUID : 2870fc35:3c013f8c:113c7dbe:9fc94036
         Events : 0.723195

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       0        0        1      removed

もう少し詳しめに状態のチェック。
上記のコマンド「mdadm --detail {デバイス名}」で確認できます。
出力で、Stateは「degraded」、Failed Devicesは「0」、一番下で、「removed」となってるあたり、ディスクが何らかの障害で一旦切り離されているように見えます。


せっかくなので、/var/log/dmesgもチェック。syslogでもOK。

md: md driver 0.90.3 MAX_MD_DEVS=256, MD_SB_DISKS=27
md: bitmap version 4.39
md: raid1 personality registered for level 1
md: md0 stopped.
md: bind
md: bind
md: kicking non-fresh sdb1 from array!
md: unbind
md: export_rdev(sdb1)
raid1: raid set md0 active with 1 out of 2 mirrors

ふむ、ディスクの整合性が取れていないのか、詳細な原因は不明だが、起動時に自動的に復旧(リビルド)はしてくれないみたい。

復旧作業

というわけで、手動で復旧させる。

server:~# mdadm /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1

上記のコマンド(mdadm)の「--add」オプションは、アレイを止めずに指定されたデバイスを追加 (hotadd) するもの。
再追加されたっぽい。

server:~# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[2] sda1[0]
      154296192 blocks [2/1] [U_]
      [>....................]  recovery =  1.7% (2729792/154296192) finish=44.6min speed=56546K/sec

unused devices: 

おっ、リカバリが始まった。

server:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Wed Oct 18 19:25:59 2006
     Raid Level : raid1
     Array Size : 154296192 (147.15 GiB 158.00 GB)
    Device Size : 154296192 (147.15 GiB 158.00 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Mon Dec  4 10:42:40 2006
          State : clean, degraded, recovering
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

 Rebuild Status : 6% complete

           UUID : 2870fc35:3c013f8c:113c7dbe:9fc94036
         Events : 0.723293

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       2       8       17        1      spare rebuilding   /dev/sdb1

せっかくなので、途中経過の「mdadm --detail」をペタッと貼り付け。
Working Devicesが「2」になりました。いい感じでリビルドが進んでいます。

結果

さらに待つこと1時間弱。

server:/var/log# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
      154296192 blocks [2/2] [UU]

unused devices: 

お、[UU]になって、正常にミラーリングされている状態に戻りました。

server:/var/log# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Wed Oct 18 19:25:59 2006
     Raid Level : raid1
     Array Size : 154296192 (147.15 GiB 158.00 GB)
    Device Size : 154296192 (147.15 GiB 158.00 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Mon Dec  4 11:36:26 2006
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 2870fc35:3c013f8c:113c7dbe:9fc94036
         Events : 0.724200

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

一番下のRaidDevice Stateが、両方とも「active sync」になっています。


こういう状況別の「mdadm --detail」みたいな詳細な情報を見比べるのって、結構勉強になりますね。
正直、今回の私のように初めて出くわした状態のときは、実際にこうやって状況確認しながら手探りでやるしかないですもんね。
次に、RAIDデバイスに何か発生した場合は、これ見てやることにしよう。うん。


# おかしい記述とか、もっとエレガントなやり方があれば教えてくださいm(_"_)m