Roberto Brunetti

Developing in the cloud

.NET Programming

Archives

Convertire una macchina virtuale VMWare a Virtual PC/Virtual Server

Oggi, da un cliente, ho dovuto convertire un paio di macchine virtuali VMWare a Virtual Server: i server di sviluppo sono stati convertiti a Virtual Server.

Non esistendo un tool nativo di importazione della macchina virtuale abbiamo deciso di usare l'utility VMDK to VHD Converter disponibile nella sezione Download di http://vmtoolkit.com/files/default.aspx.

Lo strumento converte semplicemente il disco VMDK in VHD consentendo poi la creazione della macchina Virtual PC o Virtual Server agganciando un disco esistente.

La conversione dell'hard disk deve però essere effettuata dopo qualche modifica manuale.

Riporto tutti i passi seguiti oggi evitando di linkare post esterni visto che negli ultimi tempi sembra che la moda porti i webmaster a spostare le cose senza mettere redirezioni :-)

0) Copiare la Virtual Machine o eseguire un Clone per lasciare intatta la macchina originale 

1) Disinstallare i VMWare Tools. Al termine Reboot

2) Se durante il reboot viene fuori il wizard di Add/Remove Hardware annullare l'operazione

3) Verificare la versione del Service Pack. Se non ci sono SP installati prendere il CD originale o tenere a portata di mano la directory i386. Se ci sono SP installati occorrono i file di setup del Service Pack accessibil: se avete il SP installato con i file copiati in x:\windows\servicepackfiles è sufficiente copiare i file indicati senza bisogno del CD originale

4) Aprire il Command Prompt

5) Se avete il SP nella directory servicepackfiles copiare hal.dll sotto x:\windows\system32\

6) Se non avete il SP nella directory servicepack file occorre la directory i386 a portata di mano e lanciare expand d:\\i386\\hal.dl_ %windir%\\system32\\hal.dll

7) Eseguire la stessa operazione (5 o 6) per ntoskrnl.exe (copia del file oppure expand d:\\i386\\ntoskrnl.ex_ %windir%\\system32\\ntoskrnl.exe)

In ultimo, prima di lanciare l'utility di esportazione del VMDK copiare nella macchina virtuale il seguente script e lanciarlo. Al termine dello script la macchina esegue uno shut down ed è pronta per l'esportazione dal tool citato all'inizio del post. 

Create un file .vbs (per Windows Scripting Host) e lanciarlo. Se al termine dello script (dopo la MessageBox) il sistema non si riavvia, riavviarlo a mano: probabilmente l'impersonation non riesce e quindi non ci sono i diritti per fare shutdown.

 'prepvm.vbs
'Removes VMware-specific drivers from a system
On Error Resume Next

' Instantiate Shell Object
Set objShell = CreateObject("WScript.Shell")

' Disable VMware Tools Service
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\VMTools\\Start", _
                 4, "REG_DWORD"

' Disable VMware vmx_svga video driver
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\vmx_svga\\Start", _
                 4, "REG_DWORD"

' Disable VMware vmmouse driver
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\vmmouse\\Start", _
                 4, "REG_DWORD"

' Disable VMware vmscsi driver
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\vmscsi\\Start", _
                 4, "REG_DWORD"
             
' Disable VMware PCnet driver
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\PCnet\\Start", _
                 4, "REG_DWORD"

' Disable VMware Buslogic driver
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\buslogic\\Start", _
                 4, "REG_DWORD"

' Disable SCSI Miniport drivers
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\symc810\\Start", _
                 4, "REG_DWORD"
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\symc8xx\\Start", _
                 4, "REG_DWORD"
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\cpqarray\\Start", _
                 4, "REG_DWORD"
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\pcntn4m\\Start", _
                 4, "REG_DWORD"
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\cpqnf3\\Start", _
                 4, "REG_DWORD"
objShell.RegWrite "HKLM\\SYSTEM\\CurrentControlSet\\Services\\MRaidNT\\Start", _
                 4, "REG_DWORD"

' Restart Computer
strComputer = "."

'Prompt user of impending reboot
WScript.Echo("The system is prepared for imaging and will now shutdown.")
WScript.Sleep(3)
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate,(Shutdown)}!\\\\" & _
        strComputer & "\\root\\cimv2")

Set colOperatingSystems = objWMIService.ExecQuery _
    ("Select * from Win32_OperatingSystem")

For Each objOperatingSystem in colOperatingSystems
    objOperatingSystem.Shutdown()
Next