Error: "An error occurred while taking a snapshot: A digest operation has failed" when taking snapshot of VM
search cancel

Error: "An error occurred while taking a snapshot: A digest operation has failed" when taking snapshot of VM

book

Article ID: 373339

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction

  • Attempts to create a snapshot on a virtual machine fail repeatedly with error "A digest operation has failed. An error occurred while taking a snapshot" in the vSphere client.
  • This issue is primarily observed in Horizon VDI due to a disk digest error.
  • vmware.log located in "/vmfs/volumes/<datastoreUUID>/<VM_folder>" shows digest operation failed error messages:

vmx| DIGESTLIB-FILE: DigestLib_FlushMetaDataToDisk: digest header of parent digest has CID 0x3f45376c new CID of child digest is 0x529596f4, parent digest may be corrupt, failing meta-data update on child.
vmx| DISKLIB-VMFS : "/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-digest-flat.vmdk" : closed.
vmx| DISKLIB-LIB_CREATE   : DiskLibPostCreateChild: could not init child digest disk: Invalid parameter (8).
vmx| DISKLIB-VMFS : "/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-digest-sesparse.vmdk" : closed.
vmx| DISKLIB-VMFS : "/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-000001-sesparse.vmdk" : closed.
vmx| DISKLIB-LIB_CREATE : Encountered error in DiskLibPostCreateChild: A digest operation has failed.
..
vmx| DISKLIB-LIB_CREATE : Failed to create link: A digest operation has failed (66)
vmx| Er(02) vcpu-X - DISKLIB-LIB_CREATE   : DiskLib_CreateChild: failed to create child disk: A digest operation has failed (66).
..
vmx| DISKLIB-LIB : DiskLibUnlinkInt: Disk delete successfully completed { result:0, Msg: 'The operation completed successfully', fileName:'/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-000001-digest.vmdk'}
vmx| SNAPSHOT: SnapshotBranchDisk: Failed to branch disk: '/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>.vmdk' -> '/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>.vmdk' : A digest operation has failed (66)
vmx| DISKLIB-VMFS : "/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-digest-flat.vmdk" : closed.
vmx| DISKLIB-VMFS : "/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-flat.vmdk" : closed.
vmx| SNAPSHOT: SnapshotBranch failed: A digest operation has failed (5).

  • vpxa.log located in "/var/run/log" has entries similar to:

YYYY-MM-DDTHH:MM:SS info vpxa[5899216] [Originator@6876 sub=Default opID=<OP-ID>] [VpxLRO] -- ERROR task-#### -- vpxa -- vpxapi.VpxaService.createSnapshot: vim.fault.GenericVmConfigFault:
--> Result:
--> (vim.fault.GenericVmConfigFault) {
-->    faultCause = (vmodl.MethodFault) null,
-->    faultMessage = (vmodl.LocalizableMessage) [
-->       (vmodl.LocalizableMessage) {
-->          key = "msg.checkpoint.save.fail2.std3",
-->          arg = (vmodl.KeyAnyValue) [
-->             (vmodl.KeyAnyValue) {
-->                key = "1",
-->                value = "msg.disklib.DIGEST"
-->             }
-->          ],
-->          message = "An error occurred while saving the snapshot: A digest operation has failed."
-->       },
-->       (vmodl.LocalizableMessage) {
-->          key = "msg.checkpoint.save.fail2.std",
-->          arg = (vmodl.KeyAnyValue) [
-->             (vmodl.KeyAnyValue) {
-->                key = "1",
-->                value = "/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-Snapshot.vmsn"
-->             }
-->          ],
-->          message = "An error occurred while saving snapshot file "/vmfs/volumes/<datastoreUUID>/<folder>/<VMname>-Snapshot.vmsn"."
-->       }

Environment

  • ESXi 7.x
  • ESXi 8.x

Cause

Corruption or metadata inconsistency in the virtual machine's digest files (-digest.vmdk) prevents the ESXi host from successfully branching the disk during a snapshot. This often happens when scsi#:#.digest is enabled but the underlying metadata is invalid.

Resolution

As a preliminary step, restart the virtual machine. If the issue persists, follow these steps:

  1. Power-off the virtual machine

  2. Navigate to the VM's folder on the datastore:

    cd /vmfs/volumes/<datastore_name>/<VM_folder>/

  3. Create backup copies of critical files:

    cp <VM_name>.vmdk <VM_name>.vmdk.backup
    cp <VM_name>.vmx <VM_name>.vmx.backup

  4. Create a temporary folder within the VM directory:

    mkdir digest_temp

  5. Edit the VMDK descriptor file to remove digest references:

    1. Use vi editor to edit .vmdk descriptor file:
      vi <VM_name>.vmdk
    2. Press i to enter insert mode
    3. Remove the following lines:
      ddb.digestFilename = "<VM_name>-digest.vmdk"
      ddb.digestType = "file"
    4. Press Esc to exit insert mode
    5. Type :wq! to save and exit
  6. Edit the virtual machine (.vmx) configuration file to remove digest setting:

    1. Use vi editor to edit .vmx file:
      vi <VM_name>.vmx
    2. Press i to enter insert mode
    3. Remove the following line:
      scsi0:0.digest = "TRUE"
    4. Press Esc to exit insert mode
    5. Type :wq! to save and exit
  7. Move digest files to the temporary folder:

    mv <VM_name>-digest.vmdk digest_temp/
    mv <VM_name>-digest-flat.vmdk digest_temp/

  8. Power-on the virtual machine.

  9. Attempt to create a new snapshot to verify the issue is resolved.