VMware WS: Wechsel zw. Multi/Single-CPU WIN XP Guest

Installiert man als Linuxer ein Windows-System in einer virtuellen VMware Workstation, so wählt man beim ersten Anlauf i.d.R. eine virtuelle Maschine mit einem Prozessor. Leute, die die VMware Workstation auf einem Linux Host mit Quadcore Prozessor einsetzen, werden aber früher oder später mal ausprobieren, wie sich ein Win XP Pro Gastsystem verhält, wenn man in der virtuellen Maschine 2 Prozessoren  aktiviert.

Stellt man dann fest, dass die Performance nicht so berauschend ist, möchte man ggf. wieder zu einem virtuellen Gast mit nur einem Prozessor zurückkehren. Leider ist es dabei nicht mit einer entsprechenden Einstellung der Prozessoranzahl unter VMware getan. Win XP Pro zeigt dann im Gerätemanager zwar brav an, dass nur ein Prozessor läuft.  Aktiv ist aber immer noch der Mehrprozessor HAL. Woran erkennt man das ?

 
Einstellungen unter "Computer" im Win XP Gerätemanager

Welcher HAL (+ Windows Kernel) läuft und welche Alternativen man grundsätzlich hat, erkennt man, indem man sich im Gerätemanager die Einstellungen unter "Computer" ansieht.

Hat man Win XP in der virtuellen Maschine zunächst normal für einen Prozessor installiert, so findet man dort zumeist einen Eintrag

"ACPI -PC" vor.

Geht man nun per rechtem Mausklick auf "Treiber aktualisieren" und läßt sich dort alle Möglichkeiten anzeigen, so bekommt man eine Auswahl von vier Varianten:

HAL32-Auswahl

WIN XP Pro schaltet nach einem Wechsel der virtuellen Maschine vom Single- zum Mehrprozessor-System automatisch zum "ACPI-Multiprocessor - HAL" um. Wechselt man also  in einen Zustand mit 2 Prozessoren, so ändert sich der Eintrag unter "Computer" auf "ACPI-Multiprocessor-PC"; die Auswahl unter "Treiber aktualisieren" bleibt aber (meist ?) erhalten.

Das eigentliche Problem kann nun entstehen, wenn man die virtuelle Maschine wieder auf einen Prozessor reduziert. Danach ist der HAL nicht korrekt eingestellt; die Auswahlmöglichkeiten bei "Treiber aktualisieren" sind aber leider auch verschwunden! Und dies ändert sich auch nicht mehr, wenn man die virtuelle Maschine wieder auf 2 Prozessoren umstellt.

Das war zumindest bei mir der Fall. (Im Internet liest man, dass zumindest der Win 2003 Server ein anderes Verhalten zeigt und die Auswahlmöglichkeiten in jedem Zustand anbietet - beschwören möchte ich daher das bei mir festgestellte Verhalten nicht.)

Mein virtuelles Windows-System jedenfalls lief nach dem Downgrade auf 1 Prozessor weiter mit dem Multiprozessor HAL und ließ sich nicht mehr umstellen. Beim Forschen im Internet kam ich bei MS zu der Information, dass ein solcher Downgrade-Vorgang nicht unterstützt würde und eine Neuinstallation von Windows notwendig sei. Auch über ältere (aber nicht zu alte) Wiederherstellungspunkte des Systems kam ich nicht zum Ziel. Im Gegenteil: Weil da ja noch 2 Prozessoren vorausgesetzt waren, die Maschine laut VMWare-Einstellung aber nur noch 1 Prozessor hat, streikt die Wiederherstellung.

Wie kann man dieser Situation durch kluges und vorausschauendes Management entkommen ?

 
Varianten für eine Rückkehr zum Single-Prozessor-Zustand  und deren Vorbereitung

1) Variante 1:

Eine Variante ist die, die gesamte virtuelle Maschine schon vor dem ersten Wechsel auf mehrere Prozessoren zu klonen. Hat man genügend Platz, so ist dies mit Sicherheit der beste Weg. Man probiert die Mehrprozessor-Variante aus, fährt in der Zeit keine Updates, speichert neue Files auf einem Netzlaufwerk und kann ggf. wieder zurück zur älteren Version. Nicht brauchbar ist diese Methode ggf., wenn man während der Experimentierzeit ernsthafte Veränderungen am System vorgenommen hat, die man später nicht verlieren will.

2) Variante 2

Eine zweite Variante besteht aus meiner Sicht darin, mit VMware Snapshots zu arbeiten. Allerdings habe ich eine Rückkehr zu Snapshots vor und nach einem Wechsel der Prozessoranzahl bislang nie ausprobiert. Sollte aber funktionieren. Wichtig ist es, den ersten Snapshot vor dem Wechsel zum Multiprozessor-Zustand anzulegen - und zur Sicherheit auch noch einen weiteren danach.

3) Variante 3

Variante 3 ist laut einer Diskussion im VMware-Forum unsicher und möglicherweise mit Nebenwirkungen versehen. Bei mir hat sie aber funktioniert. Dennoch - keine Garantie von mir, dass das immer gut geht.

Die Methode besteht darin, noch vor dem ersten Wechsel von einer Single-Prozessor-Installation auf ein Multiprozessor-System (!) das "system32"-Verzeichnis zu sichern. Darin befinden sich mindestens 3 Dateien, die man später benötigt, um zum alten Zustand mit einem Single-Prozessor HAL zurückzukommen :

hal.dll, ntkmlpa.exe, ntoskml.exe

Diese Dateien haben im Multiprozessor und im Single-Prozessor-Zustand übrigens unterschiedliche Größe, was für sich spricht. (Ggf. findet man im system32-Verzeichnis auch die Dateien halacpi.dll und halmacpi.dll vor, wie manche Zeitgenossen behaupten - dann mitsichern.)   

Genau das Gleiche - also die Sicherung des system32-Verzeichnisses - macht man dann nach der Aufrüstung der virtuellen Maschine - also im Multiprozessor-Zustand. Man hat dann also die oben genannten Dateien in den unterschiedlichen Zuständen (für eine 1 Prozessor-Umgebung und für eine Mehrprozessor-Umgebung) zur Verfügung. (Das Backup des gesamten Verzeichnisses führe ich nur zur Sicherheit durch.)

Will man dann in den Single-Prozessor-Zustand zurück, so stellt man zunächst VMware auf 1 Prozessor um. Danach bootet man den Win XP Gast (ggf. im abgesicherten Modus mit Netzwerk) und kopiert dann von einer externen Quelle die oben genannten 3 gesicherten Dateien für den Single Prozessor Zustand ins "system32"-Verzeichnis. Nach einem Reboot findet man dann Win XP hoffentlich im ordnungsgemäßen Zustand - in meinem Fall mit einem ausgewählten "ACPI PC"-HAL vor. Auch die vier Wahlmöglichkeiten sollten dann wieder angezeigt werden.

Übrigens: Auch ein anschließender erneutet Wechsel zurück in den Multiprozessor-Zustand funktionierte problemfrei.

4) Variante 4

Die letzte Variante entspricht im wesentlichen der dritten. Allerdings wird hier eine andere Quelle für die drei fraglichen D ateien verwendet. In Frage kommt z.B. die Win XP Pro Installations CD.

Dort muss man das I386 Verzeichnis öffnen. Im SP2.Cab muss man halacpi.dll, ntkrnlpa.exe und ntoskrnl.exe extrahieren und in einem Verzeichnis abspeichern. Danach halacpi.dll in hal.dll umbenennen und alle drei Files in den system32-Ordner kopieren.

Ggf. kann man aber auch die Dateien von einem laufenden anderen Windows System mit 1 Prozessor holen. Vorher aber prüfen, dass dort tatsächlich der ACPI-Hal läuft, wenn das Ziel - nämlich die virtuelle Maschine - selbst den ACPI HAL verwendet.

Variante 4 ist dann von Interesse, wenn man die Sicherungen/Snapshots etc. für den ursprünglichen Einprozessor-Zustand nicht oder nicht mehr hat.

In meinem Fall habe ich die 3 Dateien für den Single-Prozessor-Zustand übrigens von einer anderen Windows-Installation auf einem  Einzelprozessor-System geholt.

Ich hoffe, dass hilft den experimentierfreudigen Lesern und VMware-Enthusiasten weiter.

In jedem Fall gilt:  Trotz aller Features von VMware wie Klonen und Snapshots lohnt sich ein Backup der virtuellen Windows-Systeme, wenn man trotz Linux ernsthaft damit arbeiten muss.