Se você estivesse usando o vSphere 6, poderia ter feito clones inter-vCenter e acabar com isso.
Em qualquer evento, esta tarefa não é super-difícil com o 5.5, se você usar o PowerCLI.
Os passos são assim:
- Tire um instantâneo da VM (não use o PowerCLI ou qualquer uma das GUIs)
-
Clone o snapshot em uma nova VM usando este pequeno e prático PowerCLI:
New-VM -Name $CloneName -VM $SourceVM -Location $CloneFolder -Datastore $Datastore -ResourcePool $ResourcePool -VMHost $VMHost -LinkedClone -ReferenceSnapshot $Snapshot
Você pode procurar aqui para o que todas as opções significam e como preenchê-las.
A chave é a opção '-ReferenceSnapshot'. -
Exporte sua nova VM shinny para OVF / OVA ou copie a pasta do DS para algum lugar na rede
- Importa para o outro vCenter
Solicitei à equipe de segurança de TI que solicite uma cópia "forense" de uma VM em execução, incluindo instantâneos de memória, para que eles possam fazer algumas investigações nos casos em que houve um vírus ou algum tipo de violação. Para facilitar a minha vida, escrevi uma função PS que faz todo o trabalho pesado. Só precisa de uma VM de origem (por nome ou objeto) e uma pasta no disco. Faz o resto.
Function ExportVM {
Param(
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[PSObject]$SourceVM,
[parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[String]$DestinationPath
)
#Check if the destination path exists, bail out if it doesn't
if ( -not (Test-path $DestinationPath -IsValid) ) {
Write-Warning "Please provide a valid path for the exported VM"
return
}
#Get the SourceVM, bail out if it fails
if ($SourceVM.GetType().Name -eq "string"){
try {
$SourceVM = Get-VM $SourceVM -ErrorAction Stop
}
catch [Exception]{
Write-Warning "VM $SourceVM does not exist"
return
}
}
elseif ($SourceVM -isnot [VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl]){
Write-Warning "You did not pass a string or a VM object for 'SourceVM'"
Return
}
try {
$DestinationPath = $DestinationPath + "\" + $SourceVM.Name
#Setup the required compoments to compute an MD5 hash
$algo = [System.Security.Cryptography.HashAlgorithm]::Create("MD5")
$md5StringBuilder = New-Object System.Text.StringBuilder 50
$ue = New-Object System.Text.UTF8Encoding
#Define the snapshot name
$SnapshotName = "IT-Security Export - " + (Get-Date -UFormat "%b-%d-%Y, %R")
#Create the snapshot
$Snapshot = New-Snapshot -VM $SourceVM -Name $SnapshotName -Description "Snapshot for IT-Security Forensic export" -Memory -Quiesce -Confirm:$false
$Snapshot
#Define variables needed to create the clone
$CloneFolder = $SourceVM.Folder
$Datastore = Get-Datastore -RelatedObject $SourceVM
$ResourcePool = Get-ResourcePool -VM $SourceVM
$VMHost = Get-VMHost -VM $SourceVM
#Build a unique name for the cloned machine based on the snapshot name
$algo.ComputeHash($ue.GetBytes($SnapshotName)) | % { [void] $md5StringBuilder.Append($_.ToString("x2")) }
$CloneName = $SourceVM.Name +"_ITSecExport_" + $md5StringBuilder.ToString().SubString(0,15)
#Clone the VM
$CloneVM = New-VM -Name $CloneName -VM $SourceVM -Location $CloneFolder -Datastore $Datastore -ResourcePool $ResourcePool -VMHost $VMHost -LinkedClone -ReferenceSnapshot $Snapshot
#Define the name of the PSDrive, based on the Datastore name
$DSName = "ITSecExport_" + ($Datastore.name -replace "[^a-zA-Z0-9]","")
#Check to see if it already exists, remove if it does
if (Get-PSDrive | Where {$_.Name -like $DSName}) {
Remove-PSDrive $DSName
}
#Add the new drive
$PSDrive = New-PSDrive -Location $Datastore -Name $DSName -Scope Script -PSProvider VimDatastore -Root "\"
#Define variables needed to copy the SourceVM's VMX and the snapshot's VMSN
$SnapshotID = (Get-VM $SourceVM |Get-Snapshot | where {$_.Name -like $SnapshotName}).ExtensionData.ID
$SourceVM_VMXPath = (Get-View $SourceVM).Config.Files.VmPathName.Split(" ")[1].replace("/","\")
$SourceVM_VMSNPath = $SourceVM_VMXPath.Replace(".vmx", "-Snapshot" + $SnapshotID + ".vmsn")
#$CloneVM_VMPath = (Get-View $CloneVM).Config.Files.VmPathName.Split(" ")[1].Split("/")[0]
#Copy the VMSN and VMX
Copy-DatastoreItem -Item ${DSName}:\$SourceVM_VMXPath -Destination $DestinationPath -Force
Copy-DatastoreItem -Item ${DSName}:\$SourceVM_VMSNPath -Destination $DestinationPath -Force
#Copy-DatastoreItem -Item ${DSName}:\$CloneVM_Path\* $DestinationPath"$CloneName" -Force -Recurse
#Export the VM
$CloneVM | Export-VApp -Destination $DestinationPath -Force
#Clean up
Remove-VM -DeletePermanently $CloneVM -Confirm:$false
Remove-Snapshot -Snapshot $Snapshot -Confirm:$false
Remove-PSDrive -Name $DSName
}
catch [Exception]{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
Write-Warning "Looks like we ran in to an error"
Write-Warning " $ErrorMessage"
return
}
}