Search This Blog

Friday, May 27, 2011

Recreating a missing virtual machine disk (VMDK) descriptor file

Recreating a missing virtual machine disk (VMDK) descriptor file


Each disk drive for a virtual machine consists of a pair of .vmdk files. One is a text file containing descriptive data about the virtual hard disk and the second is the actual content of that disk. For example, a virtual machine named examplevm has one disk attached to it. This disk comprises of a examplevm.vmdkexamplevm-flat.vmdk flat file which contains virtual machine content.

This article helps you to recreate a lost virtual disk descriptor file. You may need to recreate missing header/descriptor files if:
descriptor file of under 1KB, and a 10GB
  • The virtual machine disk file listed in the Datastore Browser is your virtual machine's flat file, and is icon-less.
  • When powering on a virtual machine, you see a File not found error.
  • The flat file exists when viewing the virtual machine's directory via the terminal, VMware vSphere Management Assistant (vMA), or VMware Command-Line Interface (vCLI).
  • The disk descriptor file for the virtual machine's disk does not exist or is corrupted.
  • In the virtual machine's vmware.log file, you see:

    Jul 22 09:22:32.141: vmx| DISKLIB-LINK : "myvm.vmdk" : failed to open (The system cannot find the file specified).
    Jul 22 09:22:32.141: vmx| DISKLIB-CHAIN : "myvm.vmdk" : failed to open (The system cannot find the file specified).
    Jul 22 09:22:32.141: vmx| DISKLIB-LIB : Failed to open 'myvm.vmdk' with flags 0xa (The system cannot find the file specified).
    Jul 22 09:22:32.142: vmx| Msg_Post: Error
    Jul 22 09:22:32.142: vmx| [msg.disk.fileNotFound] VMware ESX Server cannot find the virtual disk "myvm.vmdk". Please verify the path is valid and try again.
    Jul 22 09:22:32.142: vmx| [msg.disk.noBackEnd] Cannot open the disk 'myvm.vmdk' or one of the snapshot disks it depends on.
    Jul 22 09:22:32.142: vmx| [msg.disk.configureDiskError] Reason: The system cannot find the file specified.


Note: Command-line methods, such as the one covered in the following video, are available for VMware ESX 4.1 and earlier. For additional information and steps for reviewing or modifying files on VMware ESX, see: Editing configuration files in VMware ESX (1017022).

Overview Steps

To create a virtual machine disk descriptor file:
  1. Identify the size of the flat file in bytes.
  2. Create a new blank virtual disk that is the same size as the original. This serves as a baseline example that is modified in later steps.

    Note: This step is critical to assure proper disk geometry.
  3. Rename the descriptor file (also referred to as a header file) of the newly-created disk to match the name of the original virtual disk.
  4. Modify the contents of the renamed descriptor file to reference the flat file.
  5. Remove the leftover temporary flat file of the newly-created disk, as it is not required.

Detailed Steps

To create a virtual machine disk:

  1. Log in to the terminal of the VMware ESX host.
  2. Navigate to the directory that contains the virtual machine disk with the missing descriptor file using the command:
    cd /vmfs/volumes/myvmfsvolume/mydir

    • If you are using a version of VMware ESXi, you can access and modify files and directories using the VMware vSphere client Datastore Browser or the vifs utility included with the vSphere CLI. For more information, see the section Performing File System Operations in vSphere CLI documentation.
    • If you are using VMware Fusion, the default location for the virtual machine files is <home>/Documents/Virtual Machines.localized/<virtual machine>/ folder where <home> is your home folder, and <virtual machine> is the name of the virtual machine.

  3. Identify the type of SCSI controller the virtual disk is using. You can do this by examining the virtual machine configuration file (.vmx). The controller is identified by the line scsi#.virtualDev, where # is the controller number; there may be more than one controller and controller type attached to the virtual machine. This example uses lsilogic:
    scsi0.present = "true"
    scsi0.sharedBus = "none"
    scsi1.present = "true"
    scsi1.sharedBus = "virtual"
    scsi1.virtualDev = "lsilogic"

  4. Identify and record the exact size of the -flat file using a command similar to:
    # ls -l vmdisk0-flat.vmdk
    -rw------- 1 root root 4294967296 Oct 11 12:30 vmdisk0-flat.vmdk

  5. Use the vmkfstools command to create a new virtual disk:
    # vmkfstools -c 4294967296 -a lsilogic -d thin temp.vmdk

    This command uses these flags:
    -c <size>  (This is the size of the virtual disk).
    -a <virtual controller> (Whether the virtual disk was configured to work with BusLogic or LSILogic).
    -d thin  (This creates the disk in a thin-provisioned format).

    Note: To save disk space, we create the disk in a thin-provisioned format using the type thin. The resulting flat file then consumes minimal amounts of space (1MB) instead of immediately assuming the capacity specified with the -c switch. The only consequence, however, is the descriptor file contains an extra line that must be removed manually in a later step.

    The files temp.vmdk and temp-flat.vmdk are created as a result.

  6. Delete temp-flat.vmdk, as it is not needed. Run the command:
    # rm temp-flat.vmdk
  7. Rename temp.vmdk to the name that is required to match the orphaned .flat file (or vmdisk0.vmdk, in this example):
    # mv temp.vmdk vmdisk0.vmdk
  8. Edit the descriptor file with a text editor:
    1. Under the Extent Description section, change the name of the .flat file to match the orphaned .flat file you have.
    2. Find and remove the line ddb.thinProvisioned = "1" if the original .vmdk was not a thin disk. If it was, retain this line.
      # Disk DescriptorFile

      # Extent description
      RW 8388608 VMFS "vmdisk0-flat.vmdk"

      # The Disk Data Base

      ddb.virtualHWVersion = "4"
      ddb.geometry.cylinders = "522"
      ddb.geometry.heads = "255"
      ddb.geometry.sectors = "63"
      ddb.adapterType = "lsilogic"
      ddb.thinProvisioned = "1"

      The virtual machine is now ready for power on. Verify your changes before starting the virtual machine.
  • Although these steps are specific to the VMware ESX host's Service Console (otherwise regarded as the Console OS), they may also be applied to platforms using VMware desktop products such as VMware Server or VMware Workstation. Instead of using the vmkfstools command, use the vmware-vdiskmanager utility. For more information on the Virtual Disk Manager, see the Virtual Disk Manager User's Guide.
  • When performing these operations on a different platform, you must use the equivalent commands for your platform. For example, move, copy, and del for Microsoft Windows platforms and mv, cp, and rm for Unix, Linux, and Mac OS X platforms.
  • For more information about platform-specific commands, see: DOS versus Linux Commands from the Linux Documentation Project.
To recreate other types of virtual machine disk descriptor files, see:

1 comment:

  1. This was a huge help to me. Thank you so much for the write up!!