Rebuilding the virtual machine's .vmx file from vmware.log (1023880)

Purpose

You may want to rebuild the .vmx file of a virtual machine and recover its contents if the .vmx is missing or has lost its configuration.

This article provides a shell script that rebuilds the .vmx file from the vmware.log file.



Resolution

To rebuild the virtual machine's .vmx file using a shell script which parses the information from the vmware.log file:

Notes:

  • VMware does not guarantee that this script will recover every .vmx file. This is only an option to try if the operation becomes necessary. For example, if the virtual machine configuration is changed after the last power on, then that information is not logged in the vmware.log and the .vmx file may not be accurate.
  • Ensure to take a backup of the .vmx file before proceeding.
  • Ensure that you run the commands or the script from the virtual machine working directory. To determine the working directory, right-click the virtual machine and click Edit Settings, then click Options > Virtual Machine Working Location.


  1. Run this command to create a new file using a text editor and give it execute permissions:
    Code:
    touch vmxrebuild.sh && chmod +x vmxrebuild.sh
    Note: For information on using a text editor, see Editing files on an ESX host using vi or nano (1020302).
  2. Copy and paste this script to the file:

    Code:
    VMXFILENAME=$(sed -n 's/^.*Config file: .*\/\(.\+\)$/\1/p' vmware.log)
    echo -e "#\041/usr/bin/vmware" > ${VMXFILENAME}
    echo '.encoding = "UTF-8"' >> ${VMXFILENAME}
    sed -n '/DICT --- CONFIGURATION/,/DICT ---/ s/^.*DICT \+\(.\+\) = \(.\+\)$/\1 = "\2"/p' vmware.log >> ${VMXFILENAME}
    
  3. Save the file, ensuring that it has an .sh extension.
  4. If the uuid.location has changed due to operations such as cloning or Storage vMotion, run this command to get the new UUID:

    Code:
    NEWUUID=$(sed -n "s/^.*UUID: Writing uuid.location value: '\(.\+\)'.*$/\1/p" vmware.log)

    Note: Whenever possible, use the latest vmware.log file.
  5. Run this command to replace the old UUID in the .vmx file with the new one:

    Code:
    if [ "${NEWUUID}" ] then sed -i "s/uuid.location = .*$/uuid.location = \"${NEWUUID}\"/" ${VMXFILENAME} fi
    
    
  6. Run the script using this command:

    Code:
    ./vmxrebuild.sh

For more information, see Recovery of a lost or deleted virtual machine configuration file .vmx on an ESXi/ESX host (1002294).