二週間程前の話。
週末にある会社のビル停電に伴って、金曜の晩に部門のサーバを止めるべくリモート接続を行い、各サービスを停止させ、シャットダウンのコマンドを発行した。
十数分後、ワークステーションルームにコンセントを抜きに行ったのだが、ダウン時に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: bindmd: 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
参考リンク
http://www.ioss.jp/sohodiy/mdadm8-1_5.html
http://www.heart-pot.co.jp/Software-RAID_HOWTO.html

Managing RAID on Linux: Fast, Scalable, Reliable Data Storage
- 作者: Derek Vadala
- 出版社/メーカー: O'Reilly Media
- 発売日: 2002/12
- メディア: ペーパーバック
- この商品を含むブログを見る