kvmclone.plで楽々仮想マシン作成

KVMにおけるクローン作成 (virt-clone)

KVMでは,virt-cloneコマンドでクローンを作成することができます.
例えばこんなふうに.

virt-clone --prompt --original OriginalVM --name CloneVM --file path/to/clone.img --nonsparse

しかし,このコマンドは仮想マシンの作成は行ってくれても,イメージファイル中に設定されている値までは変えてくれません.


Redhat系ディストリの場合,以下の3カ所を自分で編集する必要があります.

# MACアドレス
/etc/sysconfig/hwconf

# ホスト名,ゲートウェイ
/etc/sysconfig/network

# MACアドレス,IPアドレス,ネットマスク,ゲートウェイ
/etc/sysconfig/network-scripts/ifcfg-eth0

最初はガマンできても,3回くらい繰り返すと,段々アホらしくなってきました.

KVMにおけるクローン作成 (kvmclone.pl)

あれこれ調べてみたところ,同じことを思った人がいたのかIBMのページにイメージファイルの中まで書き換えてくれるスクリプトがありました.ありがたく使わせていただきましょう.


virt-cloneでクローンを作成してから,イメージファイルをループバックでマウントして,上記の3箇所を書き換えてくれます.
使い方はこんな感じです.

usage: kvmclone.pl [-aontsimg]
   -a: Activate vm after cloning
   -o: Original domain name
   -n: New domain name
   -t: Target disk image file
   -s: Server hostname
   -i: IP Address
   -m: Net mask
   -g: Default gateway

さっきの例と同じことをする場合は,このように記述します.

kvmclone.pl -o OriginalVM -n CloneVM -t path/to/clone.img -s clone -i 192.168.x.x -m 255.255.255.0 -g 192.168.x.y

注意事項

実際に使ってみたところ,以下のような制約(というか仕様?)がありました.気をつけて.

  • /etc以下がRedhat系のファイル配置となっている前提なので,Debianとかには使えない.
  • hostsの編集まではしてくれないので,localhostの行にホスト名が入っている場合には,編集が必要です.
  • イメージファイルの中で使うファイルシステムはLVMにしないこと./etc配下の書き換え時にマウントで失敗します.


ちなみに,ちゃんとnonsparseで作成してくれます.これはうれしい.
Hadoopのdatanodeとして複製したものを使うには,storageIDの編集が必要です.(これは別エントリで)