つい最近ですが、古いXen環境上のVMをProxmox VEに移行しました。
なかなか無いケースだと思いますのでご紹介したいと思います。
目次
XenからProxmox VEへの移行について
まずは結論から。
Xen環境上のVM(CentOS)をProxmox VEに移行する場合、移行元のVMに通常カーネルをインストールすればそのまま移行できました。
なお、移行元と移行先の環境などは下記の通りです。
- 移行元ホストサーバ:CentOS5.3 Xen 3.0.3
VM1:CentOS 4.9
VM2:CentOS 5
VM3:CentOS 5.3 - 移行先ホストサーバ:Proxmox VE 8.2.2
移行元のVM1~3まですべてProxmox VEに移行できています。
移行の経緯
今回の移行に至った理由は、移行元のサーバのハードウェアの問題です。
移行元のサーバはCentOS5が使われているくらいなのでかなり古いサーバでした。
VMの方も同じようにCentOS4、CentOS5と古いのでリプレイスしたいところなのですが、お客様の都合などでなかなかそうもいかず、ハードウェアを乗り換えてサーバを維持する作戦に出ました。
当初はCentOS7でXen環境を構築して、そちらに移すことを検討しましたが、他に使い勝手の良さそうな環境に移せないか、とも思っていました。
そこで、ダメ元でProxmox VEに移行元VMの仮想ハードディスクイメージをインポートしてみたら、ブートローダーまでは動いていて結構いけそうな感じだったので、試行錯誤した結果移行することができた、という経緯です。
XenからProxmox VEへのVM移行手順
移行の大まかな流れとしては次のようになります。
- 移行元VMでの作業
通常カーネルのインストールなど、Proxmox VEに移行する準備 - Proxmox VEでの作業
VMの作成、移行元VMの仮想ハードディスクのインポート、VMの起動設定、ブートローダ設定など
移行元VMでの作業
通常カーネルのインストール
先述の通り、最初はダメ元で移行元VMの仮想ハードディスクイメージをそのままProxmox VEにインポートしてみましたが、カーネルが読み込めなくてOSが動きませんでした。
これは、Xen環境上のVMでXen環境専用のXenカーネルが使われていたことが原因でした。
通常カーネルをインストールすることでこれを回避できます。
1 2 |
通常カーネルのインストール # yum install kernel |
なお、通常カーネルでは逆にXen環境で起動できないので注意が必要です。
ちなみに、今回通常カーネルをインストールした時点でVMを再起動したところ問題なく起動できましたが、通常カーネルが読み込まれてしまうと起動できないので安易に再起動しない方が良いです。
もし起動できなくなった場合は、下記のようにVMのXML構成ファイルを編集して、Xenカーネルを指定すると起動できるようになります。
Xenカーネルのパスが必要なので控えておくと安心かもしません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
XML設定ファイルを取得 # virsh dumpxml VM名 > vm_config.xml XML設定ファイルを修正 # vi vm-config.xml ----------------------------- <os> <type arch='x86_64' machine='xenpv'>linux</type> <kernel>/vmlinuz-2.6.18-128.4.1.el5xen</kernel> ←追加 <initrd>/initrd-2.6.18-128.4.1.el5xen.img</initrd> ←追加 </os> ----------------------------- 設定を適用 # virsh define vm_config.xml |
起動時設定変更
通常カーネルをインストールすることでProxmox VE上でOSが動くようになりますが、それだけだとProxmox VEからコンソールが使用できませんでした。
その状態でもSSHなどで接続できますが、コンソールが使えないのはさすがに問題があります。
これは「/etc/inittab」を下記のように修正することで解決できました。
1 2 3 4 5 6 7 8 |
# Run gettys in standard runlevels #co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav ←コメントアウト 1:2345:respawn:/sbin/mingetty tty1 ←コメントアウト解除 #2:2345:respawn:/sbin/mingetty tty2 #3:2345:respawn:/sbin/mingetty tty3 #4:2345:respawn:/sbin/mingetty tty4 #5:2345:respawn:/sbin/mingetty tty5 #6:2345:respawn:/sbin/mingetty tty6 |
これでProxmox VEからコンソールが使用できるようになります。
なお、上記を修正すると逆にXenの方ではコンソールが使えなくなりました。
ここまでの設定変更ができたら、VMの仮想ハードディスクイメージをPCのストレージ上など手元にダウンロードしておきます。
今回の環境ではXen環境のホストOS上の「/var/lib/xen/images/~.img」というファイルが仮想ハードディスクイメージでした。
Proxmox VEでの作業
VM作成
Proxmox VEの方で移行先となるVMを作成しておきます。
OSのインストールイメージ、ハードディスクなどは無しでVMを作成します。
仮想ハードディスクのインポート
ダウンロードしておいた仮想ハードディスクイメージファイルをProxmox VEのホストOS上のストレージ領域にアップロードして、下記のコマンドから先ほど作成したVMにインポートします。
1 2 |
仮想ハードディスクのインポート # qm importdisk 作成したVMのID 仮想ハードディスクイメージファイルのパス local-lvm |
インポートが完了すると、VMのハードウェア構成の中に未使用のハードディスクが追加されます。
仮想ハードディスクをVMに接続
追加されたハードディスクをVMに接続(アタッチ)します。
このとき、デバイスタイプは「IDE」にします。
※「SATA」も試しましたが、IDEでないと起動しませんでした。
起動オプション設定
追加したハードディスクからブートするように設定変更します。
VMの起動
起動オプションの設定まで完了したらVMを起動します。
起動時、ブートローダーでXenカーネルが選択されていると読み込みに失敗して起動しませんが、ブートローダーのメニューから通常カーネルを選択すれば起動できます。
ブートローダー設定
ブートローダーの設定でXenカーネルが読み込まれる設定になっていると、再起動時に起動に失敗する恐れがあるので、Xenカーネルを読み込まないように設定変更します。
「/boot/grub/grub.conf」を次のように変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
変更前 ------------------------------------------ title CentOS (2.6.18-128.4.1.el5xen) root (hd0,0) kernel /vmlinuz-2.6.18-128.4.1.el5xen ro root=/dev/VolGroup00/LogVol00 console=xvc0 initrd /initrd-2.6.18-128.4.1.el5xen.img title CentOS (2.6.18-128.el5xen) root (hd0,0) kernel /vmlinuz-2.6.18-128.el5xen ro root=/dev/VolGroup00/LogVol00 console=xvc0 initrd /initrd-2.6.18-128.el5xen.img title CentOS (2.6.18-164.el5) root (hd0,0) kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 console=xvc0 initrd /initrd-2.6.18-164.el5.img ------------------------------------------ |
xenカーネル部分を削除しておきます。
1 2 3 4 5 6 7 |
変更後 ------------------------------------------ title CentOS (2.6.18-164.el5) root (hd0,0) kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 console=xvc0 initrd /initrd-2.6.18-164.el5.img ------------------------------------------ |
これでProxmox VEへのVM移行は完了です。
あとは必要に応じてネットワーク設定などを修正すればOKです。
まとめ
正直ダメ元で試してみただけでしたが、意外と上手くいきました。
移行したVMで稼働していたサービス(Web/DB/メールなど)も問題なく動作しているので大丈夫そうです。
Proxmox VEであればXen環境に比べて構築が楽ですし、Proxmox Backup Serverと併用すれば、仮に移行先のホストマシンが壊れても復旧が極めて簡単な作業で済むので、結果的に保守環境の改善にもなったのではないかと思います。
何事も試してみるというのは大事なことかもしれません。