vSphere Horizon View中運用了連接克隆的方法來使多個VDI使用同一基礎鏡像,而在沒有View環境的時候,vSphere的GUI中沒有連接克隆的相關使用項。這種狀況下,可使用PowerCLI來建立連接克隆的VM。api
方法一:ide
來源:http://michlstechblog.info/blog/vmware-vsphere-create-a-linked-clone-with-powercli/ui
Connect-VIServer "vCenter_FQDN" $sourceVM="source_vm_name" #指定源VM名稱 $sourceVMSnapshotName="linkedclone_snap" #定義快照名稱 $NewVMName="linked_clone_VM" #定義連接克隆方式建立的VM的名字 $cloneFolder=(Get-VM $sourceVM).Folder #獲取源VM所在文件夾 $sourceSnapShot=New-Snapshot -VM $sourceVM -Name $sourceVMSnapshotName -Description "Snapshot for linked clones" -Memory -Quiesce #爲源VM建立快照 $ESXDatastore=Get-Datastore -Name "Datastore1" #指定存儲 $LinkedCloneVM=New-VM -Name $NewVMName -VM $sourceVM -Location $cloneFolder -Datastore $ESXDatastore -ResourcePool Resources -LinkedClone -ReferenceSnapshot $sourceSnapShot #以LinkedClone方式生成VM Start-VM $LinkedCloneVM #連接克隆VM開機 Stop-VM $LinkedCloneVM -Confirm:$false #關機 Remove-VM -DeletePermanently $LinkedCloneVM -Confirm:$false #刪除連接克隆VM Remove-Snapshot -Snapshot $sourceSnapShot -Confirm:$false #移除快照
方法二:spa
來源:http://www.vmdev.info/?p=40對象
Connect-VIServer "vCenter_FQDN" #鏈接到vCenter $sourceVM = Get-VM "source_vm_name" | Get-View #獲取源VM對象的View對象 $cloneName = "linked_clone_VM" #定義克隆VM名稱 $cloneFolder = $sourceVM.parent #獲取源VM所在文件夾(羣集、資源池) $cloneSpec = new-object Vmware.Vim.VirtualMachineCloneSpec $cloneSpec.Snapshot = $sourceVM.Snapshot.CurrentSnapshot #指定克隆方式,基於源VM的當前快照 $cloneSpec.Location = new-object Vmware.Vim.VirtualMachineRelocateSpec $cloneSpec.Location.DiskMoveType = [Vmware.Vim.VirtualMachineRelocateDiskMoveOptions]::createNewChildDiskBacking #磁盤拷貝類型爲ChildDiskBacking $sourceVM.CloneVM_Task( $cloneFolder, $cloneName, $cloneSpec ) #執行連接克隆
綜上方法,寫成腳本blog
#加載PowerCLI環境 Add-PSSnapin VMware.VimAutomation.Core C:\"Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1" #根據提示輸入vCenter鏈接信息的方式,能夠根據實際環境,將部分變量寫成固定參數 $VCServer = Read-Host "Enter vCenter Server Name" $Username = Read-Host "Enter Username" $Password = Read-Host "Enter Password" $SourceVM = Read-Host "Enter Source VM Name" $CloneVM = Read-Host "Enter Clone VM Name" #鏈接vCenter Server Connect-VIServer $VCServer -User $Username -Password $Password -Port 443 #若是源VM當前快照名稱不是Linked_Clone則爲該VM建立快照 if ((Get-Snapshot -VM $sourceVM).Name -ne "Linked_Clone") { $SourceSnapshot = New-Snapshot -VM $SourceVM -Name "Linked_Clone" -Description "Snapshot for linked clones." -Memory -Quiesce } $sourceVMView = Get-VM $SourceVM | Get-View $CloneFolder = $sourceVMView.parent $CloneSpec = New-Object Vmware.Vim.VirtualMachineCloneSpec $CloneSpec.Snapshot = $sourceVMView.Snapshot.CurrentSnapshot $CloneSpec.Location = new-object Vmware.Vim.VirtualMachineRelocateSpec $CloneSpec.Location.DiskMoveType = [Vmware.Vim.VirtualMachineRelocateDiskMoveOptions]::createNewChildDiskBacking #執行VM連接克隆任務 $sourceVMView.CloneVM_Task($CloneFolder, $CloneVM, $CloneSpec)