HDD障害時の復旧手順まとめ

【症状】
Raid1構成。HDDが2台とも死んでる状態。
Xenserverのサービスが止まり、再起動してもロゴで止まる状態。
しかも、VMメタデータのバックアップを取っていない状態。


まず障害が起きたHDDを出来るだけ触らないようにする。fsckなどは厳禁。
Ubuntu等のLiveCDで起動する。(コマンドはsudo抜きで書いてます)
ddコマンドで、新しいHDDに丸ごとデバイスコピーする。
通常のddでエラーがでてしまう場合は以下コマンド。エラーを回避しつつコピーしてくれる。

dd if=コピー元HDD(例:/dev/sda等) of=コピー先 bs=4096 conv=noerror,sync

HDDの型番を調べたい場合は、hdparm -i /dev/sdaとすれば/dev/sdaが何のHDDか分かるので慎重に。
コピーし終えたら、シャットダウンして障害が起きたHDDは抜いて、どこか安全な場所に置いておく。(また使うかもしれないので)
この時点で一度新しいHDDで起動出来るか試してみるのも良い。ダメだったらUbuntu起動して中身を調査してみる。
今回、Raid1のミラーリング構成だったので、そのままだとLVMが認識しない。
なので、片肺状態でRaid1をとりあえず組む。

apt-get install mdadm
apt-get install lvm2
mdadm -A /dev/md0 /dev/sda3
pvscan
vgscan
lvscan

これでPV,VG,LVが認識すればまだローカルストレージが生きてる可能性が高い。
ダメだったら障害が起きた2台目のHDDからddしてやり直してみるとよいと思います。どっちも全破壊ということはあまりないかと。


以下、LVMを認識した後の作業です。
もう一台新しいHDDを用意して、そちらに新規Xenserverをインストールする。
ローカルストレージが邪魔なので、削除しておく。(xe sr-listでローカルストレージのuuid確認、xe pbd-unplugしてxe sr-destroy。)
終わったらシャットダウンして、障害HDDコピー済み新HDDと新規Xenserverインストール済みHDDをつなげてUbuntuを起動。
状況としてはUbuntuが立ち上がっていて、/dev/sdaに障害が起きたHDDをコピーしたHDDが、/dev/sdbに新規Xenserverが入ったHDDがある。
復旧したいストレージデータがあるのが/dev/sda3(LVM)なので、これまたddでコピーする。
新しいHDD同士なので、bsは大きめで速度重視。

dd if=/dev/sda3 of=/dev/sdb3 bs=32M

これで新規Xenserverが入ってるHDDだけで起動してみる。(ここからはHDDが1台だけなので/dev/sdaになる)
もちろんこれだけではストレージは認識しないので、コンソールに入る。
/dev/sda3はRaid1で稼働していたものなので片肺Raid1を組み上げる。

mdadm -A /dev/md0 /dev/sda3
pvscan
vgscan
lvscan

確認出来たら、XenserverのSRに組み込む。
この時絶対sr-createしてはならない。/dev/sda3が初期化されます。(まぁ、消えてもまたddすればいいんですが)

xe sr-introduce type=lvm content-type=user device-config:device=/dev/md0 name-label="Local storage" uuid=[pvscanで確認したuuid]
xe host-list #UUID確認
xe pbd-create sr-uuid=[sr-introduceの返り値] device-config:device=/dev/md0 host-uuid=[host-listで確認したuudi]
xe pbd-plug uuid=[pbd-createの返り値]

これでXenCenterから見た時にローカルストレージが視えるようになるはず。
ただ、メタデータをインポートしていないと、どのストレージがどのVMか分からない状態なので
以下のページにあるように、一度VMを作ってストレージをアタッチして起動すると良い。
https://support.citrix.com/article/CTX121868
今回、CentOS6だったのだが、罠があって、適当にVM作ってストレージをアタッチして起動しても
「The bootloader for this VM returned an error -- did the VM installation succeed? INVALID_SOURCE」みたいなエラーが出る。
VMはどっかにインストールしたかどうかのフラグみたいなやつがあるみたいで、一度CDでも何でもいいのでインストーラーを起動してアクションしないといけないようだ。
なので、新規VMを作って(HDDはデフォルトの8Gとかでも良い)で、インストーラーで最後までいって、シャットダウンさせた後で
アタッチさせる必要がある。これで起動出来るはず。
後はサルベージなりなんなりすればOK。


参考資料:
・Mikeのプログラミング・メモ: XenServerのiSCSI共有ストレージが壊れた時の復旧方法メモ
http://blog.makotoishida.com/2011/07/xenserveriscsi.html
・ローカルディスク上の仮想マシンを維持しながらXenServerを再インストールする方法
https://support.citrix.com/article/CTX121868
・Citrix Chapter 4. ストレージ
http://docs.vmd.citrix.com/XenServer/4.0.1/ja/reference/ch04.html#
・よしづみブログ : XenServer起動不可
http://yoshidumi.blogspot.jp/2010/10/xenserver.html