Hallo,
da ich etwas Langeweile hatte, habe ich mal wieder mit LMN7 herumprobiert. Dabei ist mir folgendes aufgefallen.
Immer wenn ein UEFI-Image mit Windows in eine neue Gruppe eingefügt und diese auf einen Client ausgerollt wird, gibt es einen BSOD mit 0xc000000e als Fehlermeldung. Das betrifft nur UEFI und kein BIOS/Legacy, da hier der Bootprozess anders abläuft.
Da 0xc000000e als Fehlermeldung eigentlich nur zwei Ursachen haben kann, bin ich diesen nachgegangen. Linbo kopiert die nötigen Dateien auf die EFI-Partition. Das funktioniert. Wenn die Dateien des Windows Bootloaders da und am richtigen Ort sind, dann bleibt nur noch, dass die uuid-Einträge in der BCD-Datei nicht stimmen und der Bootloader die falsche Festplatte/Partition sucht.
Wenn man ein UEFI-Image auf einen Client erstellt und in der gleichen Gruppe verteilt, dann erhalten die Festplatte /dev/sda und die Partitionen EFI (/dev/sda1) sowie Windows (/dev/sda3) von Linbo die gleiche uuid. Damit stimmen die uuid-Daten mit den in der BCD-Datei gespeicherten Werten überein und Windows startet normal.
Anders ist es, wenn Linbo das gleiche UEFI-Image in einer anderen Gruppe verteilt. Dann erhalten nur die EFI (/dev/sda1) sowie Windows (/dev/sda3) Partitionen die ursprüngliche uuid. Die Festplatte (dev/sda) erhält eine neue uuid. Wenn nun der Windows Bootloader vom UEFI des Rechners gestartet wird, dann sucht der Bootloader seine Dateien auf einer nicht im System vorhandenen Festplatte. Das führt zwangsläufig zu einem BSOD mit 0xc000000e. Wenn man nun auf dem defekten Client manuell z.B. mit gdisk am Linbo-Terminal der Festplatte die uuid aus der ursprünglichen Gruppe gibt, dann startet Windows wieder normal.
Linbo bindet scheinbar die uuid der Festplatte an die Gruppe, nicht an das Image. Somit ist es nicht möglich, ein UEFI-Image von Windows für verschiedene Gruppen zu nutzen.
Als Lösung bieten sich folgende Möglichkeiten an:
- Linbo bindet in Zukunft die uuid der Festplatte genauso an das Image, wie es für die EFI- und Windows-Partition gemacht wird.
- Für jede Gruppe wird das UEFI-Image repariert und eigenständig gepflegt. Das scheint hier im Forum der übliche Rat zu sein. Macht aber am meinsten Arbeit.
- Per Postsync der Festplatte die uuid aus der ursprünglichen Gruppe verpassen. (Keine Ahnung, wie das geht. Ich nutze LMN nicht an der Schule und Linux auch nur in meiner Spielwiese für Experimente.)
- Man erstellt einen universellen UEFI-Bootloader für Windows.
Hier eine Variante mit einem universellen UEFI-Bootloader für Windows:
Universeller UEFI-Bootloader für Windows
Das entsprechende UEFI-Windows starten und eine Eingabeaufforderung mit administrativen Rechten starten. Da folgende Befehle eingeben:
Zuerst:
echo %firmware_type%
Da sollte als Antwort UEFI kommen. Ansonsten wurde Windows im BIOS/Legacy Modus installiert.
Dann:
bcdedit /delete {bootmgr} /F
bcdedit /create {bootmgr}
bcdedit /set {bootmgr} device Boot
bcdedit /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
bcdedit /set {bootmgr} description "Windows Boot Manager"
bcdedit /set {bootmgr} locale de-DE
bcdedit /set {bootmgr} inherit {globalsettings}
bcdedit /set {bootmgr} default {current}
bcdedit /set {bootmgr} displayorder {current}
bcdedit /set {bootmgr} toolsdisplayorder {memdiag}
bcdedit /set {bootmgr} timeout 30
bcdedit /set {current} device locate=custom:12000002
bcdedit /set {current} osdevice locate=custom:22000002
sc config stornvme start=boot
Die Befehle löschen den bisherigen Windows Boot Manager und erstellen einen neuen mit Standartwerten. Die Option Boot weist Windows an, dass seine Startdateien auf der Festplatte/Partition liegen, von wo die Datei bootmgfw.efi gestartet wurde. Die Option locate lässt Windows nach einem Ordner Windows suchen. Der Bootloader entspricht dann weitgehend dem eines mit Sysprep generalisierten Images. Normale Updates funktionieren, jedoch ein Upgrade (Windows 1511 è 1809) wahrscheinlich nicht, da das Setup Programm bei dieser BCD-Datei eben von einer Sysprep-Image ausgeht, das erst installiert werden soll.
Das Verhalten des Windows Boot Manager entspricht dann ziemlich genau der Lösung von Linux/Grub mit den Labels.
Der Befehl sc config stornvme start=boot
aktiviert den Treiber für NVME beim Bootvorgang. Dann ist es möglich, ein Image von einem Rechner mit SATA auf einen mit NVME zu übertragen. Normalerweise erledigt das Windows Setup solche Sachen, aber Linbo nutzt eine Methode, die von Microsoft nie unterstützt wurde. Daher muss man das manuell erledigen.
In einer ESXI-Umgebung hat das mit virtuellen Clients funktioniert.
Viel Spaß
Christian