labunix's blog

labunixのラボUnix

virt-cloneでテンプレートマシンからの複製

■virt-cloneでテンプレートマシンからの複製
 環境は下記。

 vmplayer内のXenを、ルーティングモードでブリッジする。
 http://labunix.hateblo.jp/entry/20130714/1373786242

 Xenの設定
 http://labunix.hateblo.jp/entry/20130715/1373882921

 NFS+Xenのライブマイグレーションを試す
 http://labunix.hateblo.jp/entry/20130715/1373888357

■図にするとこんな感じ。
 一番下のvmw2をテンプレートから複製する。

 xen-debian1とxen-debian2のゲストOS同士は同一IPになるので、
 直接ネットワークがつながらないこと。

$ echo "graph { flow: south; } \
[ Guest\nlivevm-wheezy ]  -- \
[xen-debian1\nWheezy ] <-- "vmplayer/NFS" --> \
[ Host\nWheezy ] <-- "vmplayer/NFS" --> \
[ xen-debian2\nWheezy ] -- \
[ Guest\nvmw2 ]" | graph-easy
+---------------+
|     Guest     |
| livevm-wheezy |
+---------------+
  |
  |
  |
+---------------+
|  xen-debian1  |
|    Wheezy     |
+---------------+
  ^
  |
  | vmplayer/NFS
  v
+---------------+
|     Host      |
|    Wheezy     |
+---------------+
  ^
  |
  | vmplayer/NFS
  v
+---------------+
|  xen-debian2  |
|    Wheezy     |
+---------------+
  |
  |
  |
+---------------+
|     Guest     |
|     vmw2      |
+---------------+

■virt-cloneコマンドを含むvirtinstパッケージを導入

$ apt-file search virt-clone
virtinst: /usr/bin/virt-clone
virtinst: /usr/share/man/man1/virt-clone.1.gz
$ sudo apt-get install -y virtinst

■現在はautostartでXen起動時に自動的に起動するようになっている。
 バグかどうかはともかく、virsh dominfoでは自動起動が有効かどうか確認出来ないのが難点。
 (常にdiable)

■不要な仮想マシンのシャットダウン

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 1     vmvm0                          idle
 2     livevm-wheezy                  idle

$ sudo virsh shutdown vmvm0

$ sudo virsh list --all
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 2     livevm-wheezy                  idle
 -     vmvm0                          shut off
 -     vmvm2                          shut off

■不要な仮想マシンの削除

$ sudo virsh undefine vmvm2
Domain vmvm2 has been undefined

$ sudo virsh list --all
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 2     livevm-wheezy                  idle
 -     vmvm0                          shut off

$ sudo virsh undefine vmvm0
Domain vmvm0 has been undefined

$ sudo virsh list --all
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 2     livevm-wheezy                  idle

■ディスクの空き容量を確認
 全体の何%かだけで十分であれば以下のように。

$ df -h /media/nfs/ | awk '{print $5}'
使用%
37%

■「livevm-wheezy」はライブマイグレーションしたので
 xen-toolsで作成された元のファイルが無い。
 作成したシステムから持ってくる。

$ sudo scp root@xen-debian2:/etc/xen/livevm-wheezy.cfg /etc/xen/

■対象を確認してvirt-cloneを実行
 仮想マシンを停止せずに行うと下記のエラーになるので注意。

ERROR    Domain with devices to clone must be paused or shutoff.

$ grep ^name /etc/xen/livevm-wheezy.cfg 
name        = 'livevm-wheezy'

$ ls /media/nfs/domains/livevm-wheezy/
disk.img  swap.img

$ sudo virsh shutdown livevm-wheezy
Domain livevm-wheezy is being shutdown

$ sudo virsh list --inactive
 Id    Name                           State
----------------------------------------------------
 -     livevm-wheezy                  shut off

$ test -d /media/nfs/domains/vmw2 || sudo mkdir /media/nfs/domains/vmw2
$ sudo virt-clone \
    --original=livevm-wheezy \
    --name=vmw2 \
    --file=/media/nfs/domains/vmw2/disk.img \
    --file=/media/nfs/domains/vmw2/swap.img

■今回はオフラインマイグレーション「-l」オプションなしでxen-debian2に移行

$ sudo virsh list --all
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 -     livevm-wheezy                  shut off
 -     vmw2                           shut off

$ sudo virsh start vmw2
Domain vmw2 started

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 6     vmw2                           idle

$ sudo xm migrate 6 xen-debian2
$ sudo virsh list --all
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 -     livevm-wheezy                  shut off
 -     vmw2                           shut off

$ sudo virsh dominfo vmw2
Id:             -
Name:           vmw2
UUID:           b12f16df-5812-a651-ec33-913ba3e6bd77
OS Type:        linux
State:          shut off
CPU(s):         1
CPU time:       5.6s
Max memory:     131072 KiB
Used memory:    131072 KiB
Persistent:     yes
Autostart:      disable
Managed save:   unknown

■xen-debian2での確認

$ sudo virsh list --all
 Id    Name                           State
----------------------------------------------------
 0     Domain-0                       running
 1     vmw2                           idle

$ sudo virsh dominfo vmw2
Id:             1
Name:           vmw2
UUID:           b12f16df-5812-a651-ec33-913ba3e6bd77
OS Type:        linux
State:          idle
CPU(s):         1
CPU time:       0.9s
Max memory:     131072 KiB
Used memory:    131072 KiB
Persistent:     no
Autostart:      disable
Managed save:   unknown

■後はコンソールなりsshなりでログイン
 (※xen-debian1/xen-debian2のゲストOSのネットワークが隔離されていること)して、
 ホスト名、IPを変更して終了。

 MACアドレスやUUIDは自動で変更されている。