KVM仮想化環境において、独立した2台の仮想化ホスト間で、仮想マシンを移動したい場合があります。たまに。
備忘録としてやり方を記録しておきます。
ちなみに、適合環境(というか、この記事を書く前に、実際に移動を行った環境)は以下の通り(双方とも)。
仮想化ホストOS:CentOS 6.7
仮想化環境:KVM(標準パッケージによるインストール)
※仮想化ホスト、仮想マシンともIPアドレスは静的に設定。
※仮想化ホスト間で共用ストレージ等は無し。それぞれが独立動作です。
なお、やり方は他にも色々あると思いますので、あくまでも一例として参照下さい。それでは以下、順に記述していきます。
移動する仮想マシンの停止
仮想化ホスト間での移動前に、移動する仮想マシンは、停止しておいてください。
仮想マシン上のOSから停止するか、仮想化ホストにて以下コマンドで停止します。
virsh shutdown <ドメイン名>
仮想マシンの関連ファイルコピー
移動元の仮想化ホストから、移動先仮想化ホストへ、関連ファイルをコピーします。
関連ファイルのパス
KVMの標準構成では、関連ファイルのパスは以下となります。
定義ファイル: /etc/libvirt/qemu/定義ファイル名.xml
イメージファイル: /var/lib/libvirt/images/イメージファイル名.img
なお、追加したストレージプールに格納しているなど、イメージファイルの格納先が異なる場合は、以下コマンドで確認して下さい。
ストレージプールの確認(一覧表示)
virsh pool-list
ストレージプール内のイメージファイルのパス確認
virsh vol-list プール名
関連ファイルのコピー
コピーでは、移動先仮想化ホストの定義ファイル格納ディレクトリ、イメージファイル格納ディレクトリを、そのままコピー先にした方が手っ取り早いでしょう。
移動先のKVM環境が標準構成なら、以下のディレクトリとなります。
定義ファイル: /etc/libvirt/qemu/
イメージファイル: /var/lib/libvirt/images/
コピーは、SFTPでもCIFS経由でもNFSでも好きな手段で。イメージファイルが大きいので、環境に合わせて適当に。
参考まで、SFTPで転送した場合、
sftp -C -l 20000 -p 移動先仮想化ホスト名またはIPアドレス put /etc/libvirt/qemu/定義ファイル名.xml /etc/libvirt/qemu/ put /var/lib/libvirt/images/イメージファイル名.img /var/lib/libvirt/images/ quit
移動先仮想化ホストでの仮想マシン登録
関連ファイルコピー後、移動先仮想化ホスト上で、以下コマンドにより仮想マシンを登録します。
virsh define /etc/libvirt/qemu/定義ファイル名.xml
登録されたか確認します。以下コマンドで、登録した仮想マシンが表示されるはず。
virsh list --all
移動元と移動先でイメージファイルの格納場所が異なる場合
移動元・移動先でイメージファイルの格納場所が異なる場合は、上記の登録を行う前に、定義ファイルを編集する必要があります。変更箇所は以下の箇所です。
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='writeback'/>
<source file='/var/lib/libvirt/images/イメージファイル名.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
上記、 <source file='/var/lib/libvirt/images/イメージファイル名.img' />の部分を環境に合わせて書き換えてください。
移動した仮想マシンの動作確認
登録できたら、移動した仮想マシンを起動して動作を確認します。
virsh start <ドメイン名>
確認内容は、仮想マシンの特性に合わせてご随意に。
最低限の確認だと、hostname確認とネットワーク疎通確認あたりでしょうか。
移動元仮想化ホスト上の仮想マシンの削除
ここから、移動元仮想化ホストでの作業に戻ります。
移動先での動作が確認できたら、移動元仮想化ホストから、当該仮想マシンを削除します。
以下コマンドを実行すると仮想化ホスト上から、仮想マシンが抹消され、定義ファイルも削除されます。
virsh undefine <ドメイン名>
次いで、仮想マシンのイメージファイルも削除します。
virsh vol-delete イメージファイルのパス
以上で、仮想マシンの移動は完了です。