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。

  1. いくつかkernelパッケージが入っているとエントリが複数あるけど、kernel-xenじゃない通常のkernelでbootしてくるようにdefaultの指定を編集

  2. 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は別に合わせなくても問題ない。

  • KVMゲストの登録、確認 作成した設定ファイルからVMを登録する。virsh 便利。 ``` sh sudo virsh define /etc/libvirt/qemu/test.tnmt.info.xml ``` ``` sh sudo virsh list --all ``` ### 起動、確認 ``` sh sudo virsh start test.tnmt.info ``` ``` sh sudo virsh console test.tnmt.info ``` 初回ブート時はkudzuがあがっていると色々設定するか聞いてくるけど、適宜設定すればOK。ログイン画面が出てログインできれば作業完了。

    今回はゲストOSが単一ディスクイメージだけど、たとえばLVM領域にインストールしてても要領は一緒の模様(※参照)。FullVirtualizedなイメージは試してないから分からない。

    2010年5月にリリース予定のFedora 13では、XenイメージからKVMイメージへのマイグレーションツールが入る予定とのこと。とはいえRHELに組み込まれるのはまだ大分先の話かな。。

    参考: Migrate Paravirtualized Xen to KVM under RHEL そのままズバリです。