Linux(RHEL)+マルチパスSANブート+ディスク装置のボリュームコピー環境でのシステムリストア方法。
最近では、ディスク装置の機能として持っている、論理ボリュームを丸ごとコピーする機能を利用して、システムバックアップを取得するのが、お手軽バックアップとして流行っている模様。
これを利用すると、コピー元のディスクがつぶれた場合、コピー先のディスクをホストに見せるようにするだけで(プレゼントやらマッピングやらマスキングやら・・・)リストアできるように見えるが、LInux+マルチパスSANブート環境だと簡単にはいかない。
その解決方法を以下に示す。
※ディスク装置はHP MSAを想定
※このバックアップ方法は、業務を停止することなくバックアップを取得できるメリットがある、とメーカーは言うが、OSが何しようとが関係なしに、ディスク装置側で勝手にバックアップをとってしまうため、不整合なファイルシステムの状態をとってしまうかもしれないリスクがある。(例えば、ファイル書き込み中とか・・・)
1.コピー先のディスクを、ホストに見せる(MSAの場合はマッピング)。これは当然
2.ホストをブートしてみる・・・・
3.するとinitrd処理中にエラーになり、やがてVGの重複が発生し、レスキューのためのパスワード入力プロンプトが表示されて停止する
(エラーになる原因は、ボリュームコピーによりマルチパスを構成するためのwwidが実際の物と異なっているので、マルチパスが構成できず全パスが個別の重複したディスクとして見えてしまう。マルチパスはwwidをヒントに同一ディスクの複数パスを探し出す。)
# ここで、あきらめる人が多いはず・・・
4.rootのパスワードを入力する
5./bootであるデバイスをマウントする(但し/bootのファイルシステムがパーティションの上に直接乗っているときのみ。LVM不可!)
普段/bootが/dev/mapper/mpath0p1なら、/dev/sda1。(sdb1でもsdc1でもsdd1でも可。実体は同じ)
# mount /dev/sda1 /boot
6.initrdを展開する
initrdの中のファイルをいくつか編集するので、イメージを展開する。
# cd /boot
# cp -p initrd-xxxxx.img initrd-xxxxx.img.bk
# mkdir tmp
# cd tmp
# zcat initrd-xxxxx.img | cpio -i -o
7.論理ボリュームのSCSIシリアル番号(wwid)を調べる
/dev/disk/by-id/ディレクトリにあるシンボリックリンク名の頭「scsi-」を削ったものが論理ボリュームのSCSIシリアル番号。
# ls /dev/disk/by-id/
scsi-1111222233334444aaaabbbbccccdddd
scsi-1111222233334444aaaabbbbccccdddd-part1
scsi-1111222233334444aaaabbbbccccdddd-part2
上の赤太字がSCSIシリアル番号。
8. initスクリプト中のmultipathコマンドで指定してある論理ボリュームのSCSIシリアル番号(wwid)をコピー先ディスクの番号に書き換える(下、赤斜体文字箇所)。
# vi init
:(省略)
/bin/multipath -v 0 1111222233334444aaaabbbbccccdddd
:(省略)
9.etc/multipath.conf中の信頼する論理ボリュームのSCSIシリアル番号(wwid)を新しい番号に書き換える(下、赤斜体文字箇所)。
vi etc/multipath.conf
blacklist_exceptions {
wwid “1111222233334444aaaabbbbccccdddd”
}
10.var/lib/multipath/bindingsファイル中のデバイス名エイリアスに紐づける論理ボリュームのSCSIシリアル番号(wwid)をコピー先の番号に書き換える(下、赤斜体文字箇所)。
# vi var/lib/multipath/bindings
mpath0 1111222233334444aaaabbbbccccdddd
(このファイルで、wwid:1111222233334444aaaabbbbccccddddのディスクはmpath0を使用すると定義している)
11.initrd再作成
次回以降の起動で使用できるように、編集したinitrdを再作成(イメージ化)する。
# find . | cpio –quiet -o -c | gzip -c > ../initrd-xxxxx.img
12.再起動
# exit
以上で、めでたく起動できる。