会社で、OpenStack上に作成して動かしてたVMをKVMホストに移行させる必要があったので、備忘として残しておく。
といっても大したことは特に必要ない。以下の流れに沿って作業を行うだけだ。

1.OpenStack上でスナップショットを取得する

OpenStack上で、対象の仮想マシンのスナップショットを取得する。
これは、(OSのアップデート中とか高負荷状態でないなら)VMの動作中でも構わない。

スナップショットの取得も特殊なことは必要なく、普通にブラウザから対象のVMを選択してスナップショットの取得を行うだけだ。

2.スナップショットのデータ(仮想HDDデータ)を取得してKVMホストにコピーする

スナップショットが取得できたら、OpenStackのホストにsshで接続し、スナップショットのイメージファイルを抽出する。
まず、コマンドからのアクセス用の変数を入れたファイルを作成する。ファイル名は適当。

keystonerc_admin

unset OS_SERVICE_TOKEN
export OS_USERNAME=<OpenStackのユーザ名>
export OS_PASSWORD=<OpenStackのユーザパスワード>
export OS_AUTH_URL=http://ホストのIPアドレス:5000/v2.0
export PS1='[\u@\h \W(keystone_admin)]\$ '

export OS_TENANT_NAME=<移行対象のVMがいるプロジェクト名>
export OS_REGION_NAME=RegionOne

ファイル作成後、読み込んで環境変数を設定する。

. ./keystonerc_admin

環境変数設定後、以下のコマンドでスナップショットの一覧を取得する。

nova image-list
[root@test ~(keystone_admin)]# nova image-list
+--------------------------------------+-----------------------------------+--------+--------------------------------------+
| ID                                   | Name                              | Status | Server                               |
+--------------------------------------+-----------------------------------+--------+--------------------------------------+
| 4c68f274-8beb-421e-bac9-8eb59a8b0fd4 | test_snapshot                     | ACTIVE | fa5c3dd2-94a8-4b25-b6a1-31b3e929d9e0 |
+--------------------------------------+-----------------------------------+--------+--------------------------------------+

移行対象となるVMのスナップショットのID(一番左のカラム)がわかったら、以下のコマンドでイメージを抽出する。

glance image-download --file 抽出後のHDDイメージ名 SnapshotのID

コマンド実行後、抽出されたHDDイメージをscpなどでKVMホストにコピーしてやればよい。

3.HDDデータを使ってVMを作成する

あとは、OpenStackから抽出時点でqcow2フォーマットになっているので、そのままKVM側でVMを作ってやればよい。