ESXi でのVMのクローンについて(vCenterがない場合)

ESXi でのVMのクローンについて(vCenterがない場合)

ESXi上のVMをクローニング(複製)したいケースが多いと思いますが、
vCenterがないと、単純に「右クリックで[クローン作成]」といったことができません。

vCenterなし環境でVMを複製する場合、
だいたい、下記のどれかの方法となるのではないかと思います。

A. VMをOVF(OVA)形式でエクスポート→別のVMとしてインポート。
B. ESXiに直接ログイン(SSH等)して、VMの構成ファイルをコピー。
C. VMware vCenter Converter を使用する。


「A」の方法では、VMのイメージや構成ファイル(VMDKファイルやVMXファイルなど)を
一度、ESXiのデータストアの以外の場所に保存する必要があり、
そこには数GB(VMの使用している容量分)の空き容量が必要になります。

「C」の方法は、Converterをどこか(ESXiにアクセスすることができるPCなど)に
インストールしておく必要があります。

そのため、
コマンドライン操作が苦手でないのであれば、
慣れれば「B」の方法が、簡潔&便利ではないかと思っています。


そこで、「うちではこうしてます」的なやりかたを紹介してみます。

vCenterなし環境でのVM複製例。


1. SSHでESXiにログインして、データストアに移動(cd)します。

~ # cd /vmfs/volumes/ds_local_01
/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # pwd
/vmfs/volumes/ds_local_01

2. スクリプトを配置

ここにVM構成ファイルをまとめてコピーするコマンドを記載したスクリプトファイルを置いておきます。

ESXiでは、Linux風にシェルスクリプトを作成して実行することができます。

※例では、スクリプトファイル名を「cpvm.sh」にしています。
※あまり作りこんでいないので、一例としてご覧ください。このままではイレギュラーケースには全く対応できないので...

スクリプト例: cpvm.sh

SRC_VM=$1
DST_VM=$2

[ -d $SRC_VM ] || { echo "src_vm not exists."    ; exit 1; }
[ -d $DST_VM ] && { echo "dst_vm already exists."; exit 1; }

mkdir $DST_VM

ls $SRC_VM/*vmdk | grep -v -e "-flat" -e "delta" | while read L
do
        L2=`echo $L | sed -e s/${SRC_VM}/${DST_VM}/g`
        vmkfstools --diskformat thin --clonevirtualdisk $L $L2
done

ls $SRC_VM/* | grep -v -e "vmdk" -e ".log" | while read L
do
        L2=`echo $L | sed -e s/${SRC_VM}/${DST_VM}/g`
        cp -p $L $L2
done

sed -i s/$SRC_VM/$DST_VM/g $DST_VM/${DST_VM}.vmx

3. 複製スクリプト実行。


それでは、既に作成してある 「vm01」というVMを複製してみます。

コピー元のvm01

/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # ls vm01
vm01-flat.vmdk  vm01.vmdk       vm01.vmx        vmware.log
vm01.nvram      vm01.vmsd       vm01.vmxf


スクリプトを実行して、複製します。

実行方法は、
sh cpvm.sh <複製元VM名> <新規VM名>

です。

/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # sh cpvm.sh vm01 vm02
Destination disk format: VMFS thin-provisioned
Cloning disk 'vm01/vm01.vmdk'...
Clone: 100% done.
/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # ls vm02
vm02-flat.vmdk  vm02.nvram      vm02.vmdk       vm02.vmsd       vm02.vmx        vm02.vmxf


※上記のスクリプトでは、実際は下記のようなコマンドを実行しています。


mkdir vm02
vmkfstools --diskformat thin --clonevirtualdisk vm01/vm01.vmdk vm02/vm02.vmdk
cp -p vm01/vm01.nvram vm02/vm02.nvram
cp -p vm01/vm01.vmsd vm02/vm02.vmsd
cp -p vm01/vm01.vmx vm02/vm02.vmx
cp -p vm01/vm01.vmxf vm02/vm02.vmxf
sed -i s/vm01/vm02/g vm02/vm02.vmx


ちなみに、新規VM名が既にVMが存在する場合は、
「dst_vm already exists.」
存在しないVMを複製元として指定した場合は
「src_vm not exists.」
と表示して止まるようにしてみました。

4. インベントリにVMを登録


このあと、データストアブラウザやvim-cmd コマンドなどでインベントリにVMを登録します。

たとえば、vim-cmdコマンドなら下記のように登録します。

/vmfs/volumes/4e1d568f-c2bf5a1e-8739-d48564c9f062 # vim-cmd solo/registervm /vmfs/volumes/ds_local_01/vm02/vm02.vmx
74

5. VMの起動


vSphere ClientなどからVMを起動します。

VMを起動したときに下記のような質問がある場合は、「I copied it」 を選択します。

vm_clone_msg.png


以上、VMのクローンの話でした。

Version history
Revision #:
1 of 1
Last update:
‎05-18-2013 07:59 AM
Updated by: