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

To rebuild the virtual machine’s .vmx file by using the shell script which parses the information from the vmware.logfile:
Note: 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 may not be accurate.
  1. Create a new file using a text editor. Name it, for example, 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:

    VMXFILENAME=$(sed -n ‘s/^.*Config file: .*\/\(.\+\)$/\1/p’ vmware.log)
    echo -e “#41/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. Run this command to give execute privileges to the file:

    chmod +x <filename>

    Where <filename> is the name of the saved shell script file

  5. If uuid.location has changed due to operations such as cloning or Storage vMotion, run this command to get the new UUID:
    NEWUUID=$(sed -n “s/^.*UUID: Writing uuid.location value: ‘\(.\+\)’.*$/\1/p” vmware.log)

    Note: Whenever possible, use the latest vmware.log file.

  6. Run this command to replace the old UUID in the .vmx file with the new one:

    if [ “${NEWUUID}” ] then sed -i “s/uuid.location = .*$/uuid.location = \”${NEWUUID}\”/” ${VMXFILENAME} fi

  7. To run the script:

    ./<filename>.sh

Source: VMware KB

Advertisements