いまさらですが、PowerCLI で VM をクローンしてみようと思います。
今回は PowerCLI 5.5 R2 を使用しています。
PowerCLI> Get-PowerCLIVersion | select UserFriendlyVersion
UserFriendlyVersion
-------------------
VMware vSphere PowerCLI 5.5 Release 2 build 1671586
まず、PowerCLI で vCenter に接続します。
※vCenter のアドレスは「vc55u1-1.vmad.local」にしています。
PowerCLI> Connect-VIServer vc55u1-1.vmad.local
Name Port User
---- ---- ----
vc55u1-1.vmad.local 443 VMAD\Administrator
それでは、この VM 「vm001」をクローンしてみます。
PowerCLI> Get-VM vm001
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vm001 PoweredOff 1 0.250
VM のクローンは、New-VM コマンドレットでできます。
「-VM」でクローン元、「-Name」でクローン先の VM を指定します。
ちなみに、VM のテンプレートからクローンするときは、
「-VM」の代わりに「-Template」に指定します。
今回は、ほかにもいくつかオプションを指定しています。
- 「-VMHost」→ VM を作成する ESXiを指定。
- 「-Datastore」→ VM を作成するデータストアを指定。
- 「-DiskStorageFormat」→ 仮想ディスク(VMDK ファイル)のフォーマットを指定。
PowerCLI> New-VM -VM vm001 -Name vm002 -VMHost hv55n1.vmad.local -Datastore ds_hv55n1_01 -DiskStorageFormat EagerZeroedThick
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vm002 PoweredOff 1 0.250
New-VM には、下記のようにパイプ「|」で VM を指定することもできます。
今回は、別のデータストアにクローンしてみました。
NFS データストアなので Thin 形式にしています。
PowerCLI> Get-VM vm001 | New-VM -Name vm003 -VMHost hv55n1.vmad.local -Datastore ds_nfs_181 -DiskStorageFormat Thin
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vm003 PoweredOff 1 0.250
指定した ESXi / データストア に VM が作成されました。
PowerCLI> Get-VM vm00? | select Name,VMHost,{$_|Get-Datastore} | sort Name | ft -AutoSize
Name VMHost $_|Get-Datastore
---- ------ ----------------
vm001 hv55n1.vmad.local ds_hv55n1_01
vm002 hv55n1.vmad.local ds_hv55n1_01
vm003 hv55n1.vmad.local ds_nfs_181
VMDK ファイルも、指定したディスク形式になっています。
PowerCLI> Get-VM vm00? | Get-HardDisk | select Parent,Name,StorageFormat,@{N="GB";E={[int]$_.CapacityGB}},Filename | ft -AutoSize
Parent Name StorageFormat GB Filename
------ ---- ------------- -- --------
vm001 Hard disk 1 Thick 10 [ds_hv55n1_01] vm001/vm001.vmdk
vm002 Hard disk 1 EagerZeroedThick 10 [ds_hv55n1_01] vm002/vm002.vmdk
vm003 Hard disk 1 Thin 10 [ds_nfs_181] vm003/vm003.vmdk
vNIC の種類(VMXNET3など)やポートグループは、クローン元の設定を引き継ぎます。
しかし、MAC アドレスは、ちゃんと再生成されます。
PowerCLI> Get-VM vm00? | Get-NetworkAdapter | select Parent,Name,Type,NetworkName,MacAddress | sort Parent | ft -AutoSize
Parent Name Type NetworkName MacAddress
------ ---- ---- ----------- ----------
vm001 Network adapter 1 Vmxnet3 pg-vlan-0005 00:50:56:90:30:b0
vm002 Network adapter 1 Vmxnet3 pg-vlan-0005 00:50:56:90:38:59
vm003 Network adapter 1 Vmxnet3 pg-vlan-0005 00:50:56:90:00:e6
大量のVM を作成したい場合は、
下記のようにまとめて作成したりもできます。
※この例だとクローン元 VM や ESXi などが決め打ちですが・・・
※赤字がコマンド入力している部分です。
PowerCLI> 4..10 | foreach {
>> $vm_name = "vm" + $_.ToString("000")
>> New-VM -VM vm001 -Name $vm_name -VMHost hv55n1.vmad.local -Datastore ds_nfs_181
>> }
>>
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vm004 PoweredOff 1 0.250
vm005 PoweredOff 1 0.250
vm006 PoweredOff 1 0.250
vm007 PoweredOff 1 0.250
vm008 PoweredOff 1 0.250
vm009 PoweredOff 1 0.250
vm010 PoweredOff 1 0.250
あらかじめ CSV ファイルを用意して、
それを読み込んで New-VM を実行したりすることもできます。
このようなファイルを作成しておき・・・
PowerCLI> cat C:\work\vm_list.txt
SrcVM, NewVM, ESXi, Datastore
vm001, vm011, hv55n1.vmad.local, ds_nfs_181
vm001, vm012, hv55n1.vmad.local, ds_nfs_181
vm001, vm013, hv55n2.vmad.local, ds_nfs_181
vm001, vm014, hv55n2.vmad.local, ds_nfs_181
CSV として読み込んで、New-VM を実行します。
読み込んだファイルに記載してあるように VM がクローンされます・・・
PowerCLI> $vm_list = Import-Csv C:\work\vm_list.txt
PowerCLI> $vm_list | foreach {
>> New-VM -VM $_.SrcVM -Name $_.NewVM -VMHost $_.ESXi -Datastore $_.Datastore
>> }
>>
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vm011 PoweredOff 1 0.250
vm012 PoweredOff 1 0.250
vm013 PoweredOff 1 0.250
vm014 PoweredOff 1 0.250
最後に、
VM の削除は、Remove-VM コマンドレットでできます。
デフォルトだと vCenter のインベントリから VM を登録削除するだけですが、
「-DeletePermanently」を指定すると、VMDK ファイル自体も削除できます。
まちがって必要な VM を削除をしないように、
Get-VM で実行対象を絞ってから Remove-VM することをお勧めします。
まず、対象の VM を確認。
PowerCLI C:\> Get-VM vm00[2-9], vm01?
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vm002 PoweredOff 1 0.250
vm003 PoweredOff 1 0.250
vm004 PoweredOff 1 0.250
vm005 PoweredOff 1 0.250
vm006 PoweredOff 1 0.250
vm007 PoweredOff 1 0.250
vm008 PoweredOff 1 0.250
vm009 PoweredOff 1 0.250
vm010 PoweredOff 1 0.250
vm011 PoweredOff 1 0.250
vm012 PoweredOff 1 0.250
vm013 PoweredOff 1 0.250
vm014 PoweredOff 1 0.250
確認した Get-VM を、そのまま Remove-VM にパイプで渡します。
vm001 だけは、削除せずに残してみました。
PowerCLI C:\> Get-VM vm00[2-9],vm01? | Remove-VM -DeletePermanently -Confirm:$false
PowerCLI C:\> Get-VM vm0??
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
vm001 PoweredOff 1 0.250
以上、PowerCLI での VM のクローンについてでした。