Recreating a missing VMware virtual machine disk descriptor file (.vmdk)
Problem:
In the VMware vSphere Client, see the error:
Cannot open the disk '/vmfs/volumes/.../VM_NAME/VM_NAME.vmdk' or one of the snapshot disks it depends on. Reason: The file specified is not a virtual disk.
In the vmware.log file, see entries similar to:
vmx| I120: DISKLIB-LINK : "/vmfs/volumes/57159965-bab73b05-fec7-3863bb45d158/VM_NAME/VM_NAME.vmdk" : failed to open (The file specified is not a virtual disk).
vmx| I120: DISKLIB-CHAIN : "/vmfs/volumes/57159965-bab73b05-fec7-3863bb45d158/VM_NAME/VM_NAME.vmdk" : failed to open (The file specified is not a virtual disk).
vmx| I120: DISKLIB-LIB : Failed to open '/vmfs/volumes/57159965-bab73b05-fec7-3863bb45d158/VM_NAME/VM_NAME.vmdk' with flags 0xa The file specified is not a virtual disk (15).
vmx| I120: DISK: Cannot open disk "/vmfs/volumes/57159965-bab73b05-fec7-3863bb45d158/VM_NAME/VM_NAME.vmdk": The file specified is not a virtual disk (15).
Solution:
cd /vmfs/volumes/DATASTORE_NAME/VM_NAME
ls -ahl
# Identify the SCSI controller type in use by the virtual disk
less *.vmx | grep -i virtualdev
pciBridge4.virtualDev = "pcieRootPort"
pciBridge5.virtualDev = "pcieRootPort"
pciBridge6.virtualDev = "pcieRootPort"
pciBridge7.virtualDev = "pcieRootPort"
scsi0.virtualDev = "lsisas1068" <---
ethernet0.virtualDev = "e1000e"
# Identify the exact size of the flat.vmdk file
ls -l VM_NAME-flat.vmdk
-rw------- 1 root root 85899345920 <--- VM_NAME-flat.vmdk
# Use the `vmkfstools` command to create a temporary descriptor file (.vmdk)
# and an associated temporary flat file (flat.vmdk)
# vmkfstools -c <VM_NAME-flat.vmdk file_size> -a <scsi_type> -d thin <temp_filename>.vmdk
vmkfstools -c 85899345920 -a lsisas1068 -d thin temp.vmdk
ls -ahl
mv temp.vmdk VM_NAME-000001.vmdk
# Edit the descriptor (.vmdk) file to point to the correct -flat.vmdk file
vi VM_NAME-000001.vmdk
replace "temp-flat.vmdk" -> "VM_NAME-000001-flat.vmdk"
# If the original vm disk was not thin provisioned then we need to remove the following line
ddb.thinProvisioned = "1"
# Delete the temporary flat.vmdk file
rm -i temp-flat.vmdk
# Check the disk chain consistency
vmkfstools -e VM_NAME-000001.vmdk
Disk chain is consistent.
References:
Read other posts