仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

virt-v2vによるXenからKVMへのVM移行手順

 仮想化通信メールマガジン Vol.010でレポートしましたvirt-v2vの移行手順をご紹介します。

 用意するものは次の2台のマシン(もしくは、1台のマシンでハードディスクを差し替えても可)です。

  • RHEL5Xen環境で作られたRHEL5仮想マシン
    • 仮想マシンlibvirtで管理されている必要があります
    • RHEL5がない場合はCentOS5でも問題ありません。また、本稿ではCentOS5を前提とします
  • 移行先となるRHEL6(ベータ)のKVM環境
    • ブリッジ設定は適宜手動で行う必要があります

 まず、仮想マシンのデータを移行先のマシンに用意します。Xen環境で作成したVMをコピーすれば良いでしょう。ディスクイメージはコピー元と同じパスに配置します(/var/lib/xen/imagesを作成します)。設定ファイルは、libvirtXML形式として出力したものを作業ディレクトリ(本稿では/rootとします)にコピーします。出力方法は次のとおりです。

# virsh dumpxml /etc/xen/<VM名> > /root/<VM名>.xml

 次に、virt-v2vをインストールします。RHEL6標準のパッケージではバージョンが古く使い方がやや不明ですので、最新のソースをGitリポジトリからダウンロードしてビルドしたものを使用します。2010/5/14現在の最新は0.5.3です。ビルドの前に、あらかじめ次のパッケージをYumおよびCPANでインストールします。

# yum install git perl-libguestfs perl-XML-DOM-XPath perl-Sys-Virt
# cpan Locale::TextDomain

 インストールが済んだら、virt-v2vの最新ソースをダウンロードします。

# git clone git://git.fedorahosted.org/virt-v2v.git

 コンパイルおよびインストールの手順は次のとおりです。

# perl Build.pl
# ./Build
# ./Build install

 次に、変換したディスクイメージに組み込むカーネルとその関連パッケージ情報を記述した設定ファイルを作成します。これは、Xen用のカーネルから通常のカーネルに差し替える必要があるためです。すでに出来上がった設定ファイルを用意しましたので、こちらを使用(もしくは参考に)して下さい。

100514virt-v2v.conf.txt

 パッケージのバージョンは2010/5/10時点のものですが、virtioがサポートされているバージョン(RHEL5 Update3 or CentOS5.3以降)であれば問題ありませんので、必ずしも最新である必要はありません。この設定ファイルはタグ形式で記述します。以下にタグの説明を示します。

<root-path>各パッケージ情報を記述する際のベースパスです
<iso-path>この設定で記述したパッケージはvirt-v2vによってISOイメージ化されます。そのISOイメージ保存先を指定します。
<app>パッケージの情報を記述します。「os='**'」の部分はRHELなら「redhat」、CentOSなら「centos」となります。
<path><root-path>に続くパスを指定します。
<dep>関連パッケージを指定します。関連パッケージも別途<app>を記述します。
<network>ネットワークの変換情報を記述します。外側のnetworkタグが移行元、中のnetworkタグは移行先のネットワーク情報です。

 パッケージ情報を記述し終えたら、それぞれのパッケージを指定したパスにダウンロードします(設定ファイル内にダウンロード用のwgetコマンドを埋め込んでおきました)。

 最後に、次の2点を行います。

  • ストレージのプールをvirt-managerもしくはvirshコマンドで作成します。
  • /var/lib/virt-v2vディレクトリを作成します。

 以上で準備は完了です。いよいよvirt-v2vコマンドを実行して、変換を行います。

# virt-v2v -i libvirtxml -op <ストレージのプール名> -f virt-v2v.conf <VM名>.xml

 変換中はしばらく何もメッセージが表示されませんが、問題ありません。問題があった場合はメッセージが表示され、処理が中断されます。今回の例では最後に次のメッセージが表示されるかと思います。VMのデバイスにvirtioが利用されています、とのことです。

virt-v2v: <VM名> configured with virtiodrivers

 変換が完了したらlibvirtに登録するのですが、qemuの権限設定の問題でエラーとなってしまうため、対策を行います。/etc/libvirt/qemu.confを開いて、次の箇所のコメントアウトを戻します。保存したらlibvirtdを再起動して下さい。

# The user ID for QEMU processes run by the system instance
user = "root"   ←#をとる

# The group ID for QEMU processes run by the system instance
group = "root"   ←#をとる

 virshコマンドで変換したVMを登録します。登録が成功すると、即座にVMが起動するので、気を付けて下さい。virsh create(登録と同時に起動)もしくはvirsh define(登録のみ)で登録可能です(peo3さんご指摘ありがとうございました)。

# virsh create /etc/libvirt/qemu/<VM名>.xml
ドメインVM名>が/etc/libvirt/qemu/<VM名>.xmlから作成されました

 以上で変換作業は完了です。