XenからKVMへのゲストイメージマイグレーション
仮想化の仕組みがいくつかある中、RedHatがRHELで対応する標準の仮想化をXenからKVMに切り替えたこともあり、自分で使っている仮想機ホストOSもXenからKVMに移行した。ホストOSの移行についてはmizzyさんのこの記事が参考になる。
新しくKVMなVMだけ作っていくなら上の手順で、後は通常通り運用していけば特に問題ないのだけれど、今まで使っていたXenのDomUをそのままKVMでも使えるようにしたいなーと思い、ゲストOSの移行を試してみたのでメモ。
一応環境を
ホストOS: CentOS 5.4 (XenからKVM移行済み)
ゲストOS: CentOS 4.7 test.tnmt.info (Xen Paraviutualized VM, 単一ディスクイメージファイル)
ゲストOSでの準備
これは移行したいゲストOSでの作業、動いているXenのDomUで行う。どこか別のDom0で作業出来るといいけど、一時的にマイグレート先KVMホストOSをxenカーネルであげてもOK。
grub, kernel(not kernel-xen)パッケージが入っていることを確認、無ければインストール
sudo yum install -y grub kernel
/boog/grub/menu.lst修正
ゲストOSにgrubとkernelが入っていれば、以下の作業はディスクイメージをマウントして、直接作業でもOK。
-
いくつかkernelパッケージが入っているとエントリが複数あるけど、kernel-xenじゃない通常のkernelでbootしてくるようにdefaultの指定を編集
-
kernelのオプションで、consoleの指定を修正
kernel /vmlinuz-2.6.9-89.0.20.EL ro root=LABEL=/ console=xvc0
↓
kernel /vmlinuz-2.6.9-89.0.20.EL ro root=LABEL=/ console=ttyS0,115200
/etc/inittab修正
co:2345:respawn:/sbin/agetty xvc0 9600 vt100-nav
↓
co:2345:respawn:/sbin/agetty ttyS0 9600 vt100-nav
/etc/securetty追記
sudo echo ttyS0 >> /etc/securetty
この作業で、KVMのローカルVNCからもコンソールでの接続が行えるようになる。
ホストOSでの作業
KVMへの移行は済んでいる前提、もしゲストOSの上記準備を同じホストOSで行った場合は、通常のkernelで起動しなおすのを忘れないこと。
ディスクイメージコピー
Xenのイメージをコピーする
sudo cp /var/lib/xen/image/test.tnmt.info-disk0 /opt/qemu/test.tnmt.info-disk0
KVMのVM用設定ファイル作成
今回は手で作った。たとえば、下記のようなXenのVM設定ファイル /etc/xen/test.tnmt.info があるとする
name = "test.tnmt.info"
uuid = "575b7c53-46d2-46a0-8f3a-3270a31a833d"
maxmem = 128
memory = 128
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ ]
disk = [ "tap:aio:/var/lib/xen/images/test.tnmt.info-disk0,xvda,w" ]
vif = [ "mac=00:16:3e:XX:XX:XX,bridge=br0" ]
と、これに対応する、KVMのVM設定ファイル /etc/libvirt/qemu/test.tnmt.info.xmlは下記のようになる。
<domain type='kvm'>
<name>test.tnmt.info</name>
<uuid>575b7c53-46d2-46a0-8f3a-3270a31a833d</uuid>
<memory>131072</memory>
<currentMemory>131072</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<source file='/opt/qemu/test.tnmt.info-disk0'/>
<target dev='hda' bus='ide'/>
</disk>
<interface type='bridge'>
<mac address='00:16:3e:XX:XX:XX'/>
<source bridge='br0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target port='0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' keymap='ja'/>
</devices>
</domain>
直接スクラッチから書いてもいいんだけど、既存のKVMイメージの設定ファイルコピって、メモリ容量、ディスクの位置とMACアドレスだけ書き変えればいいと思う。VMのUUIDは別に合わせなくても問題ない。
今回はゲストOSが単一ディスクイメージだけど、たとえばLVM領域にインストールしてても要領は一緒の模様(※参照)。FullVirtualizedなイメージは試してないから分からない。
2010年5月にリリース予定のFedora 13では、XenイメージからKVMイメージへのマイグレーションツールが入る予定とのこと。とはいえRHELに組み込まれるのはまだ大分先の話かな。。
参考: Migrate Paravirtualized Xen to KVM under RHEL そのままズバリです。