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のクローンの話でした。