仮想化通信メールマガジン Vol.010でレポートしましたvirt-v2vの移行手順をご紹介します。
用意するものは次の2台のマシン(もしくは、1台のマシンでハードディスクを差し替えても可)です。
まず、仮想マシンのデータを移行先のマシンに用意します。Xen環境で作成したVMをコピーすれば良いでしょう。ディスクイメージはコピー元と同じパスに配置します(/var/lib/xen/imagesを作成します)。設定ファイルは、libvirtのXML形式として出力したものを作業ディレクトリ(本稿では/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用のカーネルから通常のカーネルに差し替える必要があるためです。すでに出来上がった設定ファイルを用意しましたので、こちらを使用(もしくは参考に)して下さい。
パッケージのバージョンは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から作成されました
以上で変換作業は完了です。