Eine Fehlermeldung die jedem Admin das Herz kurz in die Hose rutschen lässt. Ihr wollt eine Virtuelle Maschine Starten und bekommt den Fehler „Virtual machine config file is invalid“ – Keine Panik! Das Problem ist meist nicht so schlimm wie es sich anhört. Die .vmx File kann anhand der Logs ganz einfach restored werden, egal ob Windows oder Linux. Hier eine Anleitung dazu.
1. Logfiles finden, die wir für den Restore verwenden können
Wechselt einfach im Explorer oder in der Commandline in das Verzeichnis, in dem eure Virtuelle Maschine abgelegt ist. Hier solltet ihr in folgender Struktur auch die Logfiles dazu sehen. Achtet hierbei auf das Datum der Files. Wenn ihr an der Konfiguration der VM nie etwas geändert habt, dann könnt ihr natürlich die älteste Datei verwenden. Wenn ihr euch aber nicht sicher seid, oder in letzter Zeit irgenwelche Änderungen an der Konfiguration durchgeführt habt, dann verwendet lieber die jüngste Logfile. Im Idealfall vom gestrigen Tag.
27.03.2009 00:32 19.811 vmware-0.log
26.03.2009 23:24 271.401 vmware-1.log
10.03.2009 21:42 216.698 vmware-2.log
01.04.2009 11:42 35.386 vmware.log
01.03.2007 23:55 0 Windows Server 2003 Standard Edition.vmsd
01.04.2009 11:42 976 Windows Server 2003 Standard Edition.vmx
Anmerkung:
Sichert euch auf jeden Fall vor jeglichen Änderungen die vmx File, oder benennt diese am Besten einfach um.
2. Logfile kopieren und anpassen
Wir kopieren nun die Logfile, aus der wir die vmx File restoren wollen. Ihr könnt die Datei gleich so benennen wie die .vmx Datei vorher hieß. In meinem Fall: Windows Server 2003 Standard Edition.vmx.
Öffnet diese Datei nun mit eurem Lieblingseditor. (Win: notepad, wordpad,…) ( Linux: vi, piko, …)
Die Datei sollte dann ähnlich aussehen, wie diese hier:
Jan 27 18:22:03: vmx| PowerOn
Jan 27 18:22:03: vmx| Host: WIN32 highest NUMA node 0
Jan 27 18:22:03: vmx| Host: WIN32 NUMA node 0, CPU mask 0x000000000000000f
Jan 27 18:22:03: vmx| HOST Windows version 5.2, build 3790, platform 2, "Service Pack 2", SMP
Jan 27 18:22:03: vmx| DICT --- USER PREFERENCES
Jan 27 18:22:03: vmx| DICT --- USER DEFAULTS
Jan 27 18:22:03: vmx| DICT --- HOST DEFAULTS
Jan 27 18:22:03: vmx| DICT datastore.name = local
Jan 27 18:22:03: vmx| DICT datastore.localpath = C:\Virtual Machines\
Jan 27 18:22:03: vmx| DICT prefvmx.useRecommendedLockedMemSize = TRUE
Jan 27 18:22:03: vmx| DICT defaultVMPath = D:\vm
Jan 27 18:22:03: vmx| DICT priority.grabbed = normal
Jan 27 18:22:03: vmx| DICT priority.ungrabbed = normal
Jan 27 18:22:03: vmx| DICT --- SITE DEFAULTS
Jan 27 18:22:03: vmx| DICT datastore.name = local
Jan 27 18:22:03: vmx| DICT datastore.localpath = C:\Virtual Machines\
Jan 27 18:22:03: vmx| DICT prefvmx.useRecommendedLockedMemSize = TRUE
Jan 27 18:22:03: vmx| DICT defaultVMPath = D:\vm
Jan 27 18:22:03: vmx| DICT priority.grabbed = normal
Jan 27 18:22:03: vmx| DICT priority.ungrabbed = normal
Jan 27 18:22:03: vmx| DICT --- COMMAND LINE
Jan 27 18:22:03: vmx| DICT --- CONFIGURATION
Jan 27 18:22:03: vmx| DICT config.version = 8
Jan 27 18:22:03: vmx| DICT virtualHW.version = 4
Jan 27 18:22:03: vmx| DICT scsi0.present = TRUE
Jan 27 18:22:03: vmx| DICT scsi0.virtualDev = lsilogic
Jan 27 18:22:03: vmx| DICT memsize = 384
Jan 27 18:22:03: vmx| DICT scsi0:0.present = TRUE
Jan 27 18:22:03: vmx| DICT scsi0:0.fileName = hdd\hdd0.vmdk
Jan 27 18:22:03: vmx| DICT ide1:0.present = TRUE
Jan 27 18:22:03: vmx| DICT ide1:0.fileName = auto detect
Jan 27 18:22:03: vmx| DICT ide1:0.deviceType = cdrom-raw
Jan 27 18:22:03: vmx| DICT floppy0.present = FALSE
Jan 27 18:22:03: vmx| DICT Ethernet0.present = TRUE
Jan 27 18:22:03: vmx| DICT displayName = Windows Server 2003 Standard Edition
Jan 27 18:22:03: vmx| DICT guestOS = winnetstandard
Jan 27 18:22:03: vmx| DICT priority.grabbed = normal
Jan 27 18:22:03: vmx| DICT priority.ungrabbed = normal
Jan 27 18:22:03: vmx| DICT scsi0:1.present = TRUE
Jan 27 18:22:03: vmx| DICT scsi0:1.fileName = hdd\hdd1.vmdk
Jan 27 18:22:03: vmx| DICT ide1:0.autodetect = TRUE
Jan 27 18:22:03: vmx| DICT scsi0:0.redo =
Jan 27 18:22:03: vmx| DICT scsi0:1.redo =
Jan 27 18:22:03: vmx| DICT ethernet0.addressType = generated
Jan 27 18:22:03: vmx| DICT uuid.location = 56 4d f6 69 77 41 cf ed-fb c0 5a dd 0f 50 a1 ec
Jan 27 18:22:03: vmx| DICT uuid.bios = 56 4d f6 69 77 41 cf ed-fb c0 5a dd 0f 50 a1 ec
Jan 27 18:22:03: vmx| DICT ethernet0.generatedAddress = 00:0c:29:50:a1:ec
Jan 27 18:22:03: vmx| DICT ethernet0.generatedAddressOffset = 0
Jan 27 18:22:03: vmx| DICT tools.syncTime = FALSE
Jan 27 18:22:03: vmx| DICT Ethernet0.connectionType = bridged
Jan 27 18:22:03: vmx| DICT Ethernet0.vnet = VMnet2
Jan 27 18:22:03: vmx| DICT workingDir = .
Jan 27 18:22:03: vmx| DICT autostart = poweron
Jan 27 18:22:03: vmx| DICT --- USER DEFAULTS
Jan 27 18:22:03: vmx| DICT --- HOST DEFAULTS
Jan 27 18:22:03: vmx| DICT datastore.name = local
Jan 27 18:22:03: vmx| DICT datastore.localpath = C:\Virtual Machines\
Jan 27 18:22:03: vmx| DICT prefvmx.useRecommendedLockedMemSize = TRUE
Jan 27 18:22:03: vmx| DICT defaultVMPath = D:\vm
Jan 27 18:22:03: vmx| DICT priority.grabbed = normal
Jan 27 18:22:03: vmx| DICT priority.ungrabbed = normal
Jan 27 18:22:03: vmx| DICT --- SITE DEFAULTS
Jan 27 18:22:03: vmx| DICT datastore.name = local
Jan 27 18:22:03: vmx| DICT datastore.localpath = C:\Virtual Machines\
Jan 27 18:22:03: vmx| DICT prefvmx.useRecommendedLockedMemSize = TRUE
Jan 27 18:22:03: vmx| DICT defaultVMPath = D:\vm
Jan 27 18:22:03: vmx| DICT priority.grabbed = normal
Jan 27 18:22:03: vmx| DICT priority.ungrabbed = normal
Jan 27 18:22:03: vmx| DICT --- GLOBAL SETTINGS
Jan 27 18:22:03: vmx| WSSCAN: reserved mem (in MB) min=32 max=8056 recommended=8056
Jan 27 18:22:03: vmx| hostMem=8184 maxAllowedAll=-1 maxAllowedVM=3600
Jan 27 18:22:03: vmx| totOverhead=16
Für uns ist jetzt der Teil zwischen –CONFIGURATION und — USER DEFAULTS wichtig.
In der Log farblich hervorgehoben. Die Zeilen ober- und unterhalb können somit entfernt werden. Diese werden für die vmx nicht benötigt.
Nun müssen wir einige optische Korrekturen vornehmen:
Als erstes entfernen wir den Timestamp + Bezeichnung + Leerzeichen vor jeder Zeile.
Jan 27 18:22:03: vmx| DICT config.version = 8
Die erste Zeile in meinem Bespiel nach der Bearbeitung:
config.version = 8
Im zweiten Schritt müssen die Werte unter “ (Anführungszeichen) gestellt werden:
(Das Ergebnis sollte wie folgt aussehen)
config.version = "8"
Diese Schritte müssen nun auch auf die restlichen Zeilen angewendet werden.
Eure Konfiguration sollte dann in etwa so aussehen:
config.version = "8"
virtualHW.version = "4"
scsi0.present = "TRUE"
scsi0.virtualDev = "lsilogic"
memsize = "384"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "hdd\hdd0.vmdk"
ide1:0.present = "TRUE"
ide1:0.fileName = "auto detect"
ide1:0.deviceType = "cdrom-raw"
floppy0.present = "FALSE"
Ethernet0.present = "TRUE"
displayName = "Windows Server 2003 Standard Edition"
guestOS = "winnetstandard"
priority.grabbed = "normal"
priority.ungrabbed = "normal"
scsi0:1.present = "TRUE"
scsi0:1.fileName = "hdd\hdd1.vmdk"
ide1:0.autodetect = "TRUE"
scsi0:0.redo = ""
scsi0:1.redo = ""
ethernet0.addressType = "generated"
uuid.location = "56 4d f6 69 77 41 cf ed-fb c0 5a dd 0f 50 a1 ec"
uuid.bios = "56 4d f6 69 77 41 cf ed-fb c0 5a dd 0f 50 a1 ec"
ethernet0.generatedAddress = "00:0c:29:50:a1:ec"
ethernet0.generatedAddressOffset = "0"
tools.syncTime = "FALSE"
Ethernet0.connectionType = "bridged"
Ethernet0.vnet = "VMnet2"
workingDir = "."
autostart = "poweron"
Zum Abschluss müsst ihr lediglich eure Datei als *.vmx speichern und wie die alte Datei benennen, falls ihr diese nicht kopiert habt. (wie bei mir Windows Server 2003 Standard Edition.vmx). Nun könnt ihr eure Virtuelle Maschine wieder wie gewohnt starten.
Fantastisch!!! This is a life-saver. Making an backup of all my vmx-files immediately!
you made my Day !!
Nie wieder StorageVmotion. Da fasst man einmal alle 10 Jahre eine Prod Maschine an und dann gehts schief!
Dank Deines Tipps hat sich meine Fa. 13k Euro Pönale gespart!
Vielen Dank
Hi DaKine69,
Ja wie gesagt, diese Fehlermeldung ist auf den ersten Blick die Hölle für jeden Admin 😉
Freut mich dass dich die Anleitung weitergebracht hat, und 13k ist ja eine beachtliche Summe *g*
Gruss
Patrick
Auch von hier vielen Dank! Nach dem Problem „config file invalid“ gegoogelt. Artikel gefunden und gleich eine Lösung. Super! 🙂