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>
キチンとリビルドが走っている様子が分かる。