以連接克隆方式建立vSphere虛擬機

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)
相關文章
相關標籤/搜索