Reconstructing a missing or corrupted virtual disk descriptor for large shared volumes in a Windows WSFC environment
search cancel

Reconstructing a missing or corrupted virtual disk descriptor for large shared volumes in a Windows WSFC environment

book

Article ID: 437476

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

Virtual machines in a Windows WSFC cluster fail to start or report with shared disk error,

Unable to create virtual SCSI device for scsi1:0, '/vmfs/voluems/<datastore_name>/<directory>/########.vmdk" Failed to start the virtual machine. Module DevicePowerOn power on failed.

The underlying data (-flat.vmdk) is present, but the VM cannot initialize the disk device.

Validation of the vmdk does not report error,

1. "vmkfstools -qv 10 #######.vmdk" reports "open successful"

2. "vmfsfilelockinfo -p ########.vmdk" and "vmfsfilelockinfo -p ########-flat.vmdk" confirm that the vmdks are not locked by any host and free.

Environment

  • VMware vSphere 8.x / 9.x
  • Windows Server Failover Clustering (WSFC).

Cause

The .vmdk descriptor file is corrupted, missing, or points to an incorrect disk geometry, preventing the SCSI controller from mounting the volume.

Resolution

Follow the steps below to restore access to the affected shared VMDK:

  1. Identify the size of the original disk

    Determine the exact size of the original -flat.vmdk file.
  2. Create a temporary (dummy) VMDK

    Use vmkfstools or the vSphere Client to create a new VMDK with the same size and in eagerzeroedthick format (required for WSFC shared disks):

     
    vmkfstools -c <size> -d eagerzeroedthick <temporary>.vmdk

    Replace <size> with the actual disk size (for example, 100G).
  3. Modify the VMDK descriptor file

    Edit the descriptor file of the newly created <temporary>.vmdk and update the extent line to point to the original -flat.vmdk file.

    For example, change:

    RW ########## VMFS "<temporary>-flat.vmdk"

    to:

    RW ########## VMFS "<original>-flat.vmdk"
     
  4. Remove the original disk from the virtual machine

    Note the SCSI ID (for example, scsi1:0, scsi1:1, etc.) of the original VMDK.
    Remove the disk from the virtual machine by selecting "Remove device" (do not select "Remove device and data").

  5. Reattach the disk using the modified descriptor

    Add the disk back as an Existing Hard Disk, selecting the modified <temporary>.vmdk descriptor file.
    Ensure the disk is attached to all cluster nodes using the same SCSI ID as before.