In diesem HowTo geht es um die Konvertierung (convert) einer Hyper-V Virtual Machine Generation 1 (Gen1-VM) zu einer Generation 2 Virtual Machine (Gen2-VM). Als Host-Betriebssystem verwende ich für dieses HowTo Windows 8.1 und als Gast-Betriebssystem Windows Server 2012 R2.
Mehr zur empfohlenen Konfigurationen für UEFI-basierte Datenträgerpartitionen findet man im TechNet Artikel von Microsoft.
Zuerst sollte die Netzwerkkonfiguration der virtuellen Maschine dokumentiert, die virtuelle Maschine heruntergefahren und eine Sicherung der virtuellen Festplatte erstellt werden.
Ist die virtuelle Festplatte noch im .vhd Format, so muss diese zuerst in das .vhdx Format konvertiert werden.
Dies kann man sehr einfach in einer administrativen PowerShell Konsole bewerkstelligen:
Convert-VHD -Path "D:\Hyper-V\WS01.vhd" -DestinationPath "D:\Hyper-V\WS01.vhdx"
Nun muss die virtuelle Festplatte im .vhdx Format im Host-Betriebssystem angefügt (mount) werden:
Mount-VHD -Path "D:\Hyper-V\WS01.vhdx"
Bei den nächsten Schritten wird die Datenträgernummer der virtuellen Festplatte benötigt. Diese kann wie folgt angezeigt werden:
Get-Disk
Danach muss die Datenträgerpartitionskonfiguration von MBR nach GPT mit dem freien Tool Gptgen konvertiert werden:
Dabei entspricht # der Datenträgernummer.
gptgen.exe -w \\.\physicaldrive#
Jetzt muss die virtuelle Festplatte getrennt (dismount) und anschließend wieder angefügt (mount) werden:
Dismount-VHD -Path "D:\Hyper-V\WS01.vhdx"
Mount-VHD -Path "D:\Hyper-V\WS01.vhdx"
Wie alle Befehle, muss nun diskpart in einer administrativen PowerShell Konsole geöffnet werden:
diskpart
Anschließend muss die Liste aller Festplatten abgefragt und die gemountete virtuelle Festplatte ausgewählt werden. Dabei entspricht # der Datenträgernummer:
list disk
select disk #
Anschließend muss die Liste aller Partitionen abgefragt und die „System-Reserviert“ (System Reserved) Partition ausgewählt werden. Dabei entspricht # die der Partitionsnummer:
list partition
select partition #
Nun muss die ausgewählte Partition gelöscht werden:
delete partition
Jetzt muss eine EFI-Partition erstellt, formatiert und einem Laufwerksbuchstaben zugewiesen werden:
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="S"
Im nächsten Schritt muss eine MSR-Partition erstellt werden:
Dabei kann man auch auf den Parameter der Größe der Partition verzichtet werden, diese füllt dann die restlichen 200 MB aus. Mit exit wird danach das Tool diskpart beendet:
create partition msr size=128
exit
Anschließend wird mit dem Tool bcdboot die wichtigen UEFI Startdateien auf die Systempartition kopiert. Dabei entspricht h: dem Laufwerksbuchstaben der virtuellen Windows-Partition und s: dem Laufwerksbuchstaben der virtuellen EFI-Partition:
bcdboot h:\windows /s s: /f UEFI
Nun muss die virtuelle Festplatte wieder getrennt (dismount) werden:
Dismount-VHD -Path "D:\Hyper-V\WS01.vhdx"
Abschließend kann nun eine neue Generation 2 Virtual Machine (Gen2-VM) mit der dokumentierten Netzwerkkonfiguration erstellt und die bearbeitete virtuelle Festplatte im SCSI-Controller hinzugefügt werden.
Beim ersten Start der Generation 2 Virtual Machine (Gen2-VM) werden vom Gast-Betriebssystem die Geräte betriebsbereit gemacht.
Das HowTo baut auf den Artikel von Martin Poisel auf.
Photo by Pankaj Patel on Unsplash, Icon by icons8
Guter Artikel. Die Walktrough funktioniert mit „Hirn an“.
Getestet mit Umbau eines Server 2012 R2 von V1 in V2.
Anmerkung: (Hier ist eine kleine Unschärfe)
„Anschließend wird mit dem Tool bcdboot die wichtigen UEFI Startdateien auf die Systempartition kopiert. Dabei entspricht h: dem Laufwerksbuchstaben der virtuellen Windows-Partition und s: dem Laufwerksbuchstaben der virtuellen EFI-Partition:“
Würde ich ändern in
Anschließend wird mit dem Tool bcdboot die wichtigen UEFI Startdateien auf die Systempartition kopiertDabei entspricht xyz: dem Laufwerksbuchstaben der virtuellen Windows-Partition. Diesen sieht man am einfachsten im Diskmanager nachdem die virtuelle Disk das zweite mal mit Mount-VHD -Path „D:\Hyper-V\WS01.vhdx“ gemountet wurde.
S:\ ist der dem Laufwerksbuchstaben der virtuellen EFI-Partition und wurde vorher durch „assign letter=“S“ “ festgelegt.
Trotzdem Danke für den Bericht. Hat mir auf jeden Fall Sucherei abgenommen.
mfg
Christian Schröder
There is a typo (or escaping problem) above. This line:
gptgen.exe -w \.physicaldrive#
should be
gptgen.exe -w \\.\physicaldrive#
Otherwise, this was a fantastic article. Thank you!
Hi Ben. Thank you for your comment and your note. Unfortunately, this error was caused by the translation of the article in English. In the original post, the parameters are correct.
https://www.dertechblog.de/2014/01/HOWTO-hyper-v-Gen1-VM-convert-Gen2-VM.
I’ll try to fix the problem with the translation.