Upgrade Hyper-V 2012 (R2)

Nachdem nun Windows Server 2012 R2 eine zeit lang auf dem Markt ist und gegenüber der 2012 Version einige interessante Verbesserungen (Export von laufenden VMs) mit sich bringt, stand ich vor der Frage – Upgrade oder Neuinstallation. Da ich auf meinen Server so gut wie keine 3rd-Party Tools installiert habe (außer dem Management der RAID-Controller und ein paar kleineren Utilities). Habe ich mich entschlossen mal einen Upgrade zu probieren und damit es nicht zu einfach wird, gleich mit der GUI-losen Version dem Microsoft Hyper-V Server 2012.

Das Ziel ist es also einen Microsoft Hyper-V Server 2012 auf das aktuelle Release Hyper-V 2012 R2 zu aktualisieren. Ich kann hier gleich vorweg nehmen, es geht – allerdings mit ein paar Dingen auf die man achten sollte.

Hier nochmals die Ausgangslage:

  1. Installierter Microsoft Hyper-V Server 2012 mit laufenden VMs
  2. Netzwerk-Adapter Team
  3. Upgrade erfolgt über eine RDP Session Winking smile
  4. Der Server besitzt eine eingebaute Remote-Management Karte (IPMI) welche über eine extra IP-Adresse erreichbar ist

Als erstes habe ich das ISO Image bei Microsoft herunter geladen (nach c:\temp) und mit PowerShell gemounted:

Mount-DiskImage -ImagePath "C:\Temp\en_microsoft_hyper-v_server_2012_r2_x64_dvd_2708236.iso"

Danach auf das neue Laufwerk gewechselt und den Update-Vorgang gestartet (über eine RDP Session, wohl gemerkt). Das Upgrade verlief ohne Probleme und der Server startete neu, allerdings war er auch nach einigem warten über seine alte IP-Adresse nicht erreichbar.

Ein Blick in den DHCP zeigte, dass beide Interfaces des Servers jeweils eine Adresse vom DHCP-Server bezogen hatten. In Folge des Upgrades war das Team gelöst worden, oder verloren gegangen – und damit auch die Verbindung zum virtuellen Switch.

Eine RDP Sitzung auf eine der im DHCP sichtbaren Adressen funktionierte auf Anhieb und nach Einrichtung des Teams und der Konfiguration des Hyper-V Switches konnte der Upgrade erfolgreich abgeschlossen werden.

Damit solch ein Upgrade problemlos funktioniert ist es notwendig, dass sich der DHCP Server außerhalb des Hyper-V Hosts befindet welcher aktualisiert werden soll. Alternativ ist eine IPMI Netzwerkkarte hilfreich welche einen Konsolenzugang ermöglicht ohne irgendwelche Adressen aus dem DHCP zu fischen.

Abschließend noch zwei Tips:

  • Für die PowerShell Anhänger unter uns: Ich kopiere immer die für die Konfiguration des Servers notwendigen Befehle in Form einer Text-Datei nach c:\temp, da die Zwischenablage über IPMI Boards nicht funktioniert.
  • Ein lokaler Admin ist ebenfalls hilfreich, wenn der Domain Controller nicht erreicht werden kann (das passiert schnell, wenn ein einziger SBS Server auf einem Host das Kundenszenario darstellt).

Update 2014-04-17:
Ein Kollege hat mich darauf aufmerksam gemacht, dass der \windows.old Ordner nach dem Update noch vorhanden ist und gelöscht werden muss! Dieser verhält sich aber ein wenig zickig, kann aber dennoch wie folgt gelöscht werden:

takeown /F \Windows.old /R /A /D Y
icacls \Windows.old /grant Administrators:(F) /T
rd \Windows.old /s /q

Enjoy it, b!

Windows Server 2012 R2 April-Update

Ab heute liefert Microsoft das sogenannte April-Update für Windows Server 2012 R2 und Windows 8.1 aus. Abonnenten des MSDN konnten das Update (welches aus insgesamt 6 Paketen besteht) schon seit letzter Woche herunter laden, der Rest wird das Paket über Windows Update oder einen WSUS angeboten bekommen.

Die Installation des Downloadpakets aus dem MSDN kann besonders einfach über folgendes Script erfolgen:

@echo off

set log=%windir%\Temp\update-windows-server-2012r2.log

echo.
echo Windows Server 2012 R2 Update Pack (April 2014) starts to install
echo Windows Server 2012 R2 Update Pack (April 2014) starts to install >%log%
echo.
echo  1. Package KB2919442
start /wait Windows8.1-KB2919442-x64.msu /quiet /norestart >>%log%
echo RC=[%ERRORLEVEL%], start /wait Windows8.1-KB2919442-x64.msu /quiet /norestart >>%log%
echo.
echo  2. Package KB2919355
start /wait Windows8.1-KB2919355-x64.msu /quiet /norestart >>%log%
echo RC=[%ERRORLEVEL%], start /wait Windows8.1-KB2919355-x64.msu /quiet /norestart >>%log%
echo.
echo  3. Package KB2932046
start /wait Windows8.1-KB2932046-x64.msu /quiet /norestart >>%log%
echo RC=[%ERRORLEVEL%], start /wait Windows8.1-KB2932046-x64.msu /quiet /norestart >>%log%
echo.
echo  4. Package KB2937592
start /wait Windows8.1-KB2937592-x64.msu /quiet /norestart >>%log%
echo RC=[%ERRORLEVEL%], start /wait Windows8.1-KB2937592-x64.msu /quiet /norestart >>%log%
echo.
echo  5. Package KB2938439
start /wait Windows8.1-KB2938439-x64.msu /quiet /norestart >>%log%
echo RC=[%ERRORLEVEL%], start /wait Windows8.1-KB2938439-x64.msu /quiet /norestart >>%log%
echo.
echo  6. Package KB2949621
start /wait Windows8.1-KB2949621-v2-x64.msu /quiet /norestart >>%log%
echo RC=[%ERRORLEVEL%], start /wait Windows8.1-KB2949621-v2-x64.msu /quiet /norestart >>%log%
echo.
echo Windows Server 2012 R2 Update Pack (April 2014) installation finished!
echo Windows Server 2012 R2 Update Pack (April 2014) installation finished! >>%log%
echo Press any key to reboot
pause >NUL
shutdown -r -t 0

Das Script erzeugt ein Log-File unter c:\windows\temp\update-windows-server-2012r2.log welches die Rückgabewerte der Installer enthält:

Windows Server 2012 R2 Update Pack (April 2014) starts to install 
RC=[2359302], start /wait Windows8.1-KB2919442-x64.msu /quiet /norestart 
RC=[3010], start /wait Windows8.1-KB2919355-x64.msu /quiet /norestart 
RC=[3010], start /wait Windows8.1-KB2932046-x64.msu /quiet /norestart 
RC=[3010], start /wait Windows8.1-KB2937592-x64.msu /quiet /norestart 
RC=[3010], start /wait Windows8.1-KB2938439-x64.msu /quiet /norestart 
RC=[-2145124329], start /wait Windows8.1-KB2949621-v2-x64.msu /quiet /norestart Windows Server 2012 R2 Update Pack (April 2014) installation finished!

Eine List mit Rückgabecodes des Installers ist hier vorhanden: http://support.microsoft.com/kb/304888/de

Sowohl der erste als auch der letzte Patch in der Liste waren auf dem System schon vorhanden – daher der vom Installer abweichende Rückgabe-Code.

[Update 1]
Wenn das Paket herunter geladen wurde, muss kontrolliert werden ob es als kritische Datei identifiziert wird. Das erfolgt über die Eigenschaften explizit für jedes der 6 Pakete:

image

Enjoy, it!