前回は CentOS 4.9 のインストール方法をまとめましたが、実サーバからKVM環境に移行するのにrsyncなど使うのはちょっとと考えていました。backup & restore で移行する方法がないか調べていたらヒットし、実際にKVMへの移行が成功したので簡単にまとめます。ここでは CentOS 4.9 を例に書いていますが、CentOS であれば、5, 6 でも可能です。試していませんが、RedHat Enterprise Linux でも同じ手順で移行ができるようです。
利用するのは mondo rescue というもの。元々はLinuxのバックアップツールです。このツールで起動状態でデータをバックアップして、ISOファイルに切り分けてくれます。リストアはISOファイル(もしくはDVD-Rなど)で起動してLinuxのインストールと同じような要領で書き戻すだけです。
元々のディスク使用量分のハードディスクが必要ですが、パーティションの切り直し機能を持っているので、元のディスクより小さなハードディスクなどにも書き戻しができる優れものです。実環境からKVM環境に以降する際にデバイス名が違ってしまう事がありますが、それもインストールの途中で手動ではありますが変更する事が可能です。インストーラーはCUIですのでちょっと敷居が高いかも。複数台ある実サーバや、古いサーバで動いているものをKVMでまとめたいなんて人にはもってこいの仕組みです。
1. mondo rescueのインストール
インストール自体はRPMで簡単です。wgetなどでダウンロードしてインストールします。
# wget ftp://ftp.mondorescue.org/rhel/4/i386/afio-2.5-1.rhel4.i386.rpm
# wget ftp://ftp.mondorescue.org/rhel/4/i386/buffer-1.19-4.rhel4.i386.rpm
# wget ftp://ftp.mondorescue.org/rhel/4/i386/mindi-busybox-1.18.5-3.rhel4.i386.rpm
# wget ftp://ftp.mondorescue.org/rhel/4/i386/mindi-2.1.5-1.rhel4.i386.rpm
# wget ftp://ftp.mondorescue.org/rhel/4/i386/mondo-3.0.3-1.rhel4.i386.rpm
# rpm -ivh afio-2.5-1.rhel4.i386.rpm buffer-1.19-4.rhel4.i386.rpm mindi-busybox-1.18.5-3.rhel4.i386.rpm mindi-2.1.5-1.rhel4.i386.rpm mondo-3.0.3-1.rhel4.i386.rpm
2. データのバックアップ
以下のコマンドで、/backup 以下に 4G で切り分けられたISOイメージが、server-backup-(日付)-n.iso という形で連番で作られます。/backup 以下はバックアップ対象に含めません。ホットバックアップが売りですが、ファイルハンドラがオープンされたままのファイルがバックアップ後も正しく読めるかどうかの担保はされていないようなので、バックアップする際はファイルアクセスをするサービスは停めた方が良さそうです。自分の環境では、25G前後のバックアップで1時間半ほどかかりました。KVMサーバにISOイメージをコピーするのだけで1時間以上かかったので、併せて2時間半ほどになります。ISOイメージのコピーが済んだらバックアップ元の実サーバを止めます。
# mondoarchive -O -i -g -0 -s 4g -p server-backup-`date +%Y%m%d` -l GRUB -d /backup -E /backup
3. インストーラの起動
KVMであればISOイメージの1番を接続、ISOイメージが利用出来ない場合や移行先も実サーバの場合は作成したISOイメージをDVD-Rに焼いて、そこから起動します。起動すると boot プロンプトが出るので以下のように打って Enter キーを押します。これでハードディスク初期化モードで、かつインタラクティブモードのCUIインストーラが起動します。
boot: nuke interactive
4. パーティションの変更
自分の環境ではパーティションのデバイス名が変わっていたので変更しました。また、KVMのハードディスクイメージが実HDDのサイズより小さいので、パーティションサイズも小さくしました。
5. リストア
インストーラの通りに進めると簡単にリストアが終わります。自分の環境では、30分強でおわりました。
6. boot loader のインストール(GRUB)
boot loader (GRUB) の情報も必要があれば書き換えます。自分の場合はインストール先のパーティション名と、パーティションのデバイス名などを変更しました。
7. MACアドレスの書き換え
ここでする必要はありませんが、先にネットワークカードのMACアドレスを書き換えます。具体的には実際のネットワークカードのMACアドレスから、KVMの仮想ネットワークカードのMACアドレスに書き換えます。
sh-3.00# mount /dev/sda3 /mnt
sh-3.00# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0
=====
-HWADDR=00:XX:XX:XX:XX:XX
+HWADDR=52:XX:XX:XX:XX:XX
=====
8. インストーラーの終了(ゲストOSの終了)
exit コマンドで終了すると記載がありますが、私の環境ではできませんでした。KVM 側から強制終了します。
9. CDROMの切断
KVMでCDROMを切断します。
10. 起動 しかし 失敗
KVM を起動させましたが、GRUBが立ち上がりません。数回テストしたうち、問題無く立ち上がるようにリストアできた事もあったので、操作に問題があったのかもしれません。何度もトライするのが面倒だったので、GRUBを自分でインストールする事にしました。
11. レスキューモードで起動
CentOS 4.8 のISOファイルを接続し起動。プロンプトに 「boot: linux rescue」と入れてレスキューモードで起動。キーボードやネットワークの設定をして進むとシングルモードで起動します。
12. GRUB のインストール
grub-install コマンドで GRUBをインストールします。
# chroot /mnt/sysimage/
# grub-install /dev/hda/
13. 再起動
KVM で DVD イメージを切断した上で、exit コマンドを2回打ってレスキューモードを抜け再起動させます。
これでKVMで起動が確認できました。古いうるさく熱いサーバが一台止まったのでずいぶんと快適になりました。将来はこのサーバもKVMをストップさせて、Raspberry Pi で運用したいと考えています。いつになるかな、、、(^^;;