Error: "A specified parameter was not correct: spec.deviceChange.device" due to stale entry in ddb.objectParentUri
search cancel

Error: "A specified parameter was not correct: spec.deviceChange.device" due to stale entry in ddb.objectParentUri

book

Article ID: 402544

calendar_today

Updated On:

Products

VMware vSAN VMware vSphere ESXi

Issue/Introduction

This articles provides the steps to identify the cause for a generic error message encountered during snapshot creation of a virtual machine. Issue occurs when the virtual machine is resident on vSAN or VVOL based storage and is not running on a snapshot. 

  • Identifying the issue:
    • Stale entry in base disk
      •  The below stale entry is seen in the base descriptor disk located at home directory of the virtual machine.
        ddb.objectParentUri = vsan://<vsanDatastore>/<vmdk_uuid>
        or
        ddb.objectParentUri = vvol://############-##############/#######.#########-####-####-####-##########'.
    • Error as seen in vSphere GUI:
       A specified parameter was not correct: spec.deviceChange.device An error occurred while taking a snapshot: One of the parameters supplied is invalid. An error occurred while saving snapshot file "/vmfs/volumes/vsan://################-###############/###############-############/<VM_Name>-Snapshot1.vmsn". An error occurred while saving the snapshot: One of the parameters supplied is invalid.
  • Log Validation:

    • On the /var/run/log/hostd.log on the ESXi host where the virtual machine is registered, we see entries similar to below:

      YYYY-MM-DDTHH:MM:SS In(166) Hostd[2102036]: [Originator@6876 sub=Vmsvc.vm:/vmfs/volumes/vsan:################-###############/###############-############/<VM_Name>.vmx opID=########## sid=####### user=vpxuser:VSPHERE.LOCAL\<BackupUser>] State Transition (VM_STATE_ON -> VM_STATE_CREATE_SNAPSHOT)
      YYYY-MM-DDTHH:MM:SS Db(167) Hostd[2102043]: [Originator@6876 sub=Vigor.Vmsvc.vm:/vmfs/volumes/vsan:################-###############/###############-############/<VM_Name>.vmx] Create Snapshot translated error to vmodl.fault.InvalidArgument
      YYYY-MM-DDTHH:MM:SS Db(167) Hostd[2102043]: [Originator@6876 sub=Vigor.Vmsvc.vm:/vmfs/volumes/vsan:################-###############/###############-############/<VM_Name>.vmx] Create Snapshot message: An error occurred while saving the snapshot: One of the parameters supplied is invalid.
      YYYY-MM-DDTHH:MM:SS Db(167) Hostd[2102005]: --> An error occurred while taking a snapshot: One of the parameters supplied is invalid.
      

    • On reviewing the vmware log for the vm, (here /vmfs/volumes/vsan:################-###############/###############-############/vmware.log) , we see entries similar to below

      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - DISKLIB-LINK  : DiskLinkNativeSnap: Attempting to take a snapshot of 'vsan:################-###############/###############-############/' which is already a snapshot of 'vsan:################-###############/###############-############/'.
      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - DISKLIB-LIB_CREATE   :DiskLibPrepareOrCreateChildNativeSnap: Failed to do native snapshot: One of the parameters supplied is invalid
      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - DISKLIB-LIB_CREATE   : DiskLib_CreateChild: Failed to create child disk: One of the parameters supplied is invalid
      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - SNAPSHOT: SnapshotBranchDisk: Failed to branch disk natively: '/vmfs/volumes/vsan:################-###############/###############-############/<VM_name>.vmdk' -> '/vmfs/volumes/vsan:################-###############/###############-############/<VM_Name>-000001.vmdk' : One of the parameters supplied is invalid (1)
      YYYY-MM-DDTHH:MM:SS In(05) vcpu-0 - DISKLIB-VMFS  : "vsan:################-###############/###############-############/" : closed.
      YYYY-MM-DDTHH:MM:SS In(05) vcpu-0 - SNAPSHOT: SnapshotBranch failed: One of the parameters supplied is invalid (5).
      YYYY-MM-DDTHH:MM:SS In(05) vcpu-0 - OBJDESC-LIB :  Failed to unlink 'vsan:################-###############/###############-############/<VM_Name>.vmem': No such file or directory (20004)
    • If the VM is on a VVOL datastore and uses VVOL, vmware.log will list the below errors.

      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - DISKLIB-LINK  : DiskLinkNativeSnap: Attempting to take a snapshot of 'vvol://############-##############/#######.#########-####-####-####-##########' which is already a snapshot of 'vvol://############-##############/#######.#########-####-####-####-##########'.
      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - DISKLIB-LIB_CREATE   :DiskLibPrepareOrCreateChildNativeSnap: Failed to do native snapshot: One of the parameters supplied is invalid
      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - DISKLIB-LIB_CREATE   : DiskLib_CreateChild: Failed to create child disk: One of the parameters supplied is invalid
      YYYY-MM-DDTHH:MM:SS Er(02) vcpu-0 - SNAPSHOT: SnapshotBranchDisk: Failed to branch disk natively: '/vmfs/volumes/vvol:############-##############/#######.#########-####-####-####-##########/VM.vmdk' -> '/vmfs/volumes/vvol:############-##############/#######.#########-####-####-####-##########/VM-000001.vmdk' : One of the parameters supplied is invalid (1)
      YYYY-MM-DDTHH:MM:SS In(05) vcpu-0 - SNAPSHOT: SnapshotBranch failed: One of the parameters supplied is invalid (5).
      YYYY-MM-DDTHH:MM:SS In(05) vcpu-0 - SnapshotVMXTakeSnapshotWork: Transition to mode 1.
      YYYY-MM-DDTHH:MM:SS In(05) vcpu-0 - SnapshotVMXTakeSnapshotComplete: Done with snapshot 'VM Snapshot': 0
      YYYY-MM-DDTHH:MM:SS In(05) vcpu-0 - SnapshotVMXTakeSnapshotComplete: Snapshot 0 failed: One of the parameters supplied is invalid (5).
  • Further validation can be performed looking at
    • listing snapshot files in the home directory

      ls -alhtr *.vmdk
      -rw-------    1 root     root        6.3M Oct 15 00:37 VM_Name-ctk.vmdk
      -rw-------    1 root     root         858 Oct 15 00:40 VM_Name.vmdk
      -rw-------    1 root     root         710 Oct 30 22:55 VM_Name-000002.vmdk
      -rw-------    1 root     root        7.8M Jan  9 16:28 VM_Name_1-000001-ctk.vmdk
      -rw-------    1 root     root        6.3M Jan  9 16:28 VM_Name-000001-ctk.vmdk
      -rw-------    1 root     root         867 Jan  9 16:34 VM_Name_1-000001.vmdk
      -rw-------    1 root     root         866 Jan  9 16:34 VM_Name-000001.vmdk
      -rw-------    1 root     root         819 Jan  9 16:34 VM_Name_1-000002.vmdk
      -rw-------    1 root     root         813 Jan  9 16:34 VM_Name-000003.vmdk
      -rw-------    1 root     root        7.8M Jan  9 16:35 VM_Name_1-000002-ctk.vmdk
      -rw-------    1 root     root        6.3M Jan  9 16:35 VM_Name-000003-ctk.vmdk

 

    • Example descriptor file contains the parameter 

      # Disk DescriptorFile
      version=4
      encoding="UTF-8"
      CID=a3d15d68
      parentCID=ffffffff
      createType="vmfs"
      
      # Extent description
      RW 209715200 VMFS "vsan://################-###############/###############-############"
      
      # Change Tracking File
      changeTrackPath="VM_Name-000001-ctk.vmdk"
      
      # The Disk Data Base
      #DDB
      
      ddb.adapterType = "lsilogic"
      ddb.geometry.cylinders = "13054"
      ddb.geometry.heads = "255"
      ddb.geometry.sectors = "63"
      ddb.longContentID = "##########################"
      ddb.nativeDeltaBytes = "105472447744"
      ddb.nativeDeltaBytesIsEstimate = "yes"
      ddb.objectParentUri = "vsan://################-###############/###############-############"
      ddb.thinProvisioned = "1"
      ddb.toolsInstallType = "1"
      ddb.toolsVersion = "13317"
      ddb.uuid = "## ## ## ## ## ## ## ##-## ## ## ## ## ## ## ##"
      ddb.virtualHWVersion = "13"

       

    • If this was an actual snapshot we would see the below two lines in the descriptor just above the line ddb.objectParentUri =

      ddb.nativeParentCID = "fffffffe"
      ddb.nativeParentHint = "VM_Name.vmdk"

       

    • The snapshot database file VM_Name.vmsd doesn't show any snapshots

      cat VM_Name.vmsd
      .encoding = "UTF-8"
      snapshot.lastUID = "17"
      snapshot.uncommittedUID = "17"

       

  • If a snapshot was present/active the snapshot database file would look more like so:

    cat VM_Name.vmsd
    .encoding = "UTF-8"
    snapshot.lastUID = "19"
    snapshot.current = "18"
    snapshot0.uid = "18"
    snapshot0.filename = "VM_Name-Snapshot18.vmsn"
    snapshot0.displayName = "VM Snapshot dd/mm/yyyy"
    snapshot0.createTimeHigh = "411639"
    snapshot0.createTimeLow = "38246619"
    snapshot0.numDisks = "2"
    snapshot0.disk0.fileName = "VM_Name-000001.vmdk"
    snapshot0.disk0.node = "scsi#:#"
    snapshot0.disk1.fileName = "VM_Name_1-000001.vmdk"
    snapshot0.disk1.node = "scsi#:#"
    snapshot.numSnapshots = "1"

     

This is an indicator that the base descriptor file has a delta descriptor naming convention. 

Environment

  • VMware vSAN ESA
  • VMware vVol

 

Cause

  • This occurs if a previous snapshot deletion/consolidation did not complete and the below line is left behind in the base disk descriptor file.The line should only exist in the base descriptor file only if snapshots exist for the VM and should be present for all subsequent snapshot descriptor files in the snapshot chain except for the last snapshot taken.

    ddb.objectParentUri = vsan://<vsanDatastore>/<vmdk_uuid>
    or
    ddb.objectParentUri = vvol://############-##############/#######.#########-####-####-####-##########'.

Resolution

Method A - Requires VM downtime

This process involves manually editing the vmdk descriptor files to eliminate the metadata causing the problem.

  1. Power off the affected VM
  2. Open an SSH session to one of the ESXi hosts in the cluster
  3. Navigate to the VM home folder
  4. Run grep ddb.objectParentUri *.vmdk
  5. Backup the vmdk descriptor files.
  6. For any descriptor file found with ddb.objectParentUri = vsan://<vsanDatastore>/<vmdk_uuid> edit the file and remove the line or comment the line out by placing # at the start of the line
  7. Take a snapshot of the VM to validate that the issue is resolved
  8. If dealing with a base descriptor file with a delta naming convention clone the VM to resolve the naming convention of the base descriptor file

Method B - Does not require VM downtime

Performing a cross-datastore storage migration from vVols to a traditional VMFS block datastore forces ESXi to reconstruct the virtual disk architecture. Block-based VMFS deployments utilize standard linear file chains rather than native object pointers (vvol:// descriptors). During the data copy and descriptor translation process, advanced storage keys such as ddb.objectParentUri are entirely stripped or omitted from the newly written VMFS descriptor file. This effectively cleans up the underlying metadata discrepancy and permits subsequent snapshot operations to succeed without hitting the validation error.

  1. Perform a cross-datastore storage migration from vVols to a  traditional VMFS block datastore.
  2. Create a test snapshot to check functionality after the migration is complete.

Additional Information