Man On a Mission

システム運用屋が、日々のあれこれや情報処理技術者試験の攻略を記録していくITブログ…というのも昔の話。今や歴史メインでたまに軍事。別に詳しくないので過大な期待は禁物。

Linux備忘録 KVM仮想化ホスト間での仮想マシン移動

 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 イメージファイルのパス

以上で、仮想マシンの移動は完了です。