How to recover missed VMDK descriptor file
Contents
Structure of VMDK files
There are two formats of VMDK files used by VMWare: an ESX type and a local type. The latter is used by VMWare Player, Fusion, and Workstation. These types are distinguished mostly by small text description that is either included into a binary file or is inside a separate text file at the same folder. VMWare uses these text settings to describe the parameters of the physical drive. Basically, they correspond to parameters that are used on HDDs and determine cylinders, heads sector size, and their count. There are also links to snapshots, software ESX\ESXi RAID linkage, and other stuff.
The difference between these two: an ESX type VMDK file always has another VMDK file with the same name but without “-flat” or “-delta” endings. It contains text data in INI-like format that describes disk parameters.
Please see a sample below:
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=fffffffe
parentCID=ffffffff
isNativeSnapshot="no"
createType="vmfs"
# Extent description
RW 83886080 VMFS "VM-flat.vmdk"
# The Disk Data Base
#DDB
ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "5221"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "7ed9bde6bd0e9d3c78369865fffffffe"
ddb.thinProvisioned = "1"
ddb.uuid = "60 00 C2 99 d3 f5 dc ad-9e 25 3e 89 48 2c 3f de"
ddb.virtualHWVersion = "11"
VMDK that is used on a local machine has this information included in its header.
Sample:
Re-creating a VMDK descriptor file
If VMDK descriptor is missed, there is a simple way to recreate it:
1. You need to create a virtual disk of the same size as the one with a missing descriptor. It’s required to obtain the correct values for disk cylinders, sectors, and heads. Use standard Vsphere features and make sure you have set it as thick provisioned.
2. Open descriptor VMDK in a text editor and edit string with a path to -flat.vmdk. In the sample above it is called
# Extent description
RW 83886080 VMFS "VM-flat.vmdk"3. Copy new vmdk descriptor file to the -flat.VMDK and rename it to match -flat.VMDK. Do not forget to remove “-flat” or “-delta” from the name of the descriptor.
Type a name of VMDK with a lost descriptor here(value marked red). You need both files in the same directory. It is possible to enter a full path into this value to separate -FLAT.VMDK and its descriptor. However, I doubt it may have any sense, as descriptor occupies only a couple of kilobytes of disk space.
PS
Do not forget to use a 3-rd party SSH client as a file browser. Remember that vSphere doesn’t display vmdk with descriptors.