Duidelijke error hé.Copy-Harddisk : 17.06.2015 08:44:44 Copy-HardDisk The VM must be in one of the following states: PoweredOff,Suspended.
Omdat dit een standalone ESX is (omwille van Oracle licensing) kan ik geen .clone() doen dus ik heb een heel script geschreven dat de facto hetzelfde doet. Voorwaarde is natuurlijk wel dat Copy-Harddisk werkt
De error lijkt er op te wijzen dat het sowieso niet mogelijk zou zijn om de .vmdk van een running VM te kopiëren. Maar: tijdens mijn eerste testen heeft dit wél gewerkt: snapshot nemen zodat er geen activiteit meer is op de .vmdk en die gelocked kan worden voor een copy en dan kopiëren. Ik snap niet goed wat er veranderd is voor de vmdk (...en bij gebrek aan version control kan ik het ook niet meer uitzoeken
Als iemand een idee heeft hoor ik het graag. Of een alternatief dat ik in PowerCli kan doen.
Volledigheidshalve, de relevante code en mijn comments:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| Param($VM = 'VMNAME', $VMHost = 'HOSTNAME', $DataStore = 'DATASTORENAME' , $User = 'USERNAME', $Password = 'MYTOTALLYNOTENCRYTPEDPASSWORD') #Add the MVware module to use the cmdlets Add-PSSnapIn VMware.VimAutomation.Core #Connect to VM Host Connect-VIServer $VMHost -User $User -Password $Password | Out-Null #Get our VM as an object (instead of string) $VM = Get-VM $VM #Take a snapshot so the VHDs are no longer in use $NewSnapShot = $("TempSnapshot-" + $VM.Name) New-Snapshot -Name $NewSnapShot -VM $VM -Quiesce | Out-Null #Create a new VM based on the properties of the old one ## I didn't just copy the .vmx as that would give UID problems $NewVMName = $($VM.Name + "_Backup_" + $(Get-Date -Format yyyyMMddHHmm)) New-VM -Name $NewVMName -VMHost $VMHost -Datastore $DataStore -DiskMB 10 -MemoryMB $VM.MemoryMB -NumCPU $VM.NumCPU -CD -Floppy -GuestId $VM.Guest.GuestID | Out-Null #Find full path (this is valid for my environment... hardcoded) If (Test-Path vmstore:\Company1\$DataStore\$NewVMName){$NewVMPath = "vmstore:\Company1\$DataStore\$NewVMName"} ElseIf (Test-Path vmstore:\Company2\$DataStore\$NewVMName){$NewVMPath = "vmstore:\Company2\$DataStore\$NewVMName"} Else {"Dafuq?"; Exit} #To do #Connect to the VMstore Push-Location $NewVMPath #Remove the VHDs from the new VM Remove-Item *.vmdk | Out-Null #Get the VHDs from the machine you want to copy and copy them to the directory of the new one $NewVM = Get-VM $NewVMName Get-HardDisk $VM | Copy-Harddisk -DestinationPath $("[" + $DataStore + "] $NewVM") -DestinationStorageFormat Thin #Adjust the SCSI-Controller so they match If (!((Get-ScsiController $VM).Type -EQ (Get-ScsiController $NewVMName).Type)){Set-ScsiController -VM $NewVM -Type $(Get-ScsiController $VM).Type -BusSharingMode $(Get-ScsiController $VM).BusSharingMode} #Some networking: we don't want the clone to cause duplicates on the network, so we turn the NIC off Get-NetworkAdapter $newVM | Set-NetworkAdapter -StartConnected $False -Confirm $False #Remove the old snapshot, because we don't need it anymore and we want to be tidy. Get-Snapshot $VM | Where-Object {$_.Name -EQ $NewSnapShot} | Remove-Snapshot -Confirm $False #Disconnect Disconnect-VIServer -Confirm:$False #Back to original run path Pop-Location #EOF |
PS. Via de console kan ik trouwens ook live kopiëren:

Edit
Ho, ik denk het gesnapt te hebben: Get-Harddisk geeft de verkeerde (althans voor mijn doeleinden) vmdk terug: de -000001-versies van het snapshot.
[ Voor 4% gewijzigd door YellowOnline op 17-06-2015 11:23 ]