mdadmを用いたraidアレイの障害・復旧ごっこ

linuxでLVM on RAID1を組んでわーい!と喜び、reboot叩いて戻ってきたらraidが外れていて悲しかったお話。
結論から言うと、RAIDパーティションを切らずにデバイス丸ごとmirrorに突っ込んだためのよう。ただ、以下の復旧方法は誰かしらの役に立つかもしれないんので、メモとして残しておきます。

RAIDアレイがサボっているので起こす

# mdadm --detail --scan
mdadm: md device /dev/md0 does not appear to be active.

何サボってんねん……。ってことで、-R(--run)オプションにてアレイを起動。このオプションにより、アレイを構成するドライブが足らなくてもアレイを起動させることが可能。

# mdadm -R /dev/md0
mdadm: started /dev/md0
# sudo mdadm --detail --scan
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=00.90 UUID=3d01bb53:c381f289:c5f32a1e:15fba884

アレイが起動したけど、本当にミラーリングされているのか確認をする。

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb[0]
      244198464 blocks [2/1] [U_]

unused devices: <none>
root@omoikane:~# mdadm -D /dev/md0
/dev/md0:
        Version : 00.90
  Creation Time : Thu Jan 20 04:24:42 2011
     Raid Level : raid1
     Array Size : 244198464 (232.89 GiB 250.06 GB)
  Used Dev Size : 244198464 (232.89 GiB 250.06 GB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Jan 20 05:10:54 2011
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0

           UUID : 3d01bb53:c381f289:c5f32a1e:15fba884 (local to host omoikane)
         Events : 0.29

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

/dev/sdbと/dev/sdcがsyncしているはずなのだけれど、/dev/sdcと表示されるハズのところがremoved。

Device or resource busyと言われて、RAIDアレイに追加できない場合

もう一回追加を試みる。

$ sudo mdadm --manage /dev/md0 --add /dev/sdc
mdadm: Cannot open /dev/sdc: Device or resource busy

誰が忙しくさせとるんや……。ということで、調べてみるとdevice-mapperが掴んでしまっている事があるらしいので、離してもらう。

# sudo dmsetup ls
omoikane-root   (251, 1)
omoikane-swap_1 (251, 2)
mainvg-strage   (251, 0)

私の構築したLVMのLVが表示されている。この中のmainvg-strageはmd0の上に乗っかっている。md0はsdbとsdcから成るデバイスなので、これを外してみる。

# dmsetup remove mainvg-strage

再度追加。

# mdadm --manage /dev/md0 --add /dev/sdc
mdadm: re-added /dev/sdc

どうやら今度は追加できたようだ。
なお、ここでmdデバイスの残骸?が残って、再びbusyと言われることもある。

$ ls /dev/|grep md
md
md_d0
md_d0p1
md_d0p2
md_d0p3
md_d0p4

これを停止してやればよい。

$ sudo mdadm --manage --stop /dev/md_d0
mdadm: stopped /dev/md_d0

リビルドの進行状況を見る。

$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc[2] sdb[0]
      244198464 blocks [2/1] [U_]
      [>....................]  recovery =  1.5% (3868096/244198464) finish=60.3min speed=66357K/sec

unused devices: <none>

キチンとリビルドが走っている様子が分かる。

というわけで

RAID用のパーティションを切らずにデバイス丸ごとmirror対象に指定すると、その場では動いている様に見えるけれど、mdadm.confを書いてやっても正常に動作しないようです。
LinuxRAIDよー分からんので、「おめーの操作が間違ってんだよ!」っていう指摘あったら教えてください!><;