XenからKVMへのゲストイメージマイグレーション

2010-02-08

仮想化の仕組みがいくつかある中、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 そのままズバリです。

  • Shinya Tsunematsu

    a Software Engineer loves tech, curry, music, fitness.

    Great! You've successfully subscribed.
    Great! Next, complete checkout for full access.
    Welcome back! You've successfully signed in.
    Success! Your account is fully activated, you now have access to all content.