Hot migration (vMotion) of virtual machines may fail with a “Virtual TPM initialization failed” error reported in vCenter events.
/vmfs/volumes/Datastore/VMname/vmware.log
xxxx-xx-xxTxx:xx:xx.xxxZ In(05) vcpu-4 - OBJLIB-FILEBE : FileBEQueue: could not queue the operation on 'nvram' : Bad file descriptor (589826)
xxxx-xx-xxTxx:xx:xx.xxxZ In(05) vcpu-4 - OBJLIB-encObjBE :EncObjBEQueue: Failed to write object : Bad file descriptor (589828)
xxxx-xx-xxTxx:xx:xx.xxxZ In(05)+ vcpu-4 - .
xxxx-xx-xxTxx:xx:xx.xxxZ In(05) vcpu-4 - NVRAMMGR: Could not write to nvram file nvram: Bad file descriptor
xxxx-xx-xxTxx:xx:xx.xxxZ In(05) vcpu-4 - Msg_Post: Error
xxxx-xx-xxTxx:xx:xx.xxxZ In(05) vcpu-4 - [msg.literal] Bad file descriptor
xxxx-xx-xxTxx:xx:xx.xxxZ In(05) vcpu-4 - [msg.nvram.write] NVRAM: write failed.
The issue occurs due to a non-standard NVRAM filename configured in the virtual machine’s .vmx file, which causes vMotion to fail safely while the VM continues running on the source host.
VMware vSphere 8.x
The failure is caused by a non-standard NVRAM filename configured in the VM’s .vmx file.
Affected VMs have the following entry:
nvram = "nvram"
Expected standard format:
nvram = "<vmname>.nvram"
Workaround (Manual Fix)
To resolve the issue on affected VMs:
Take a snapshot of the VM
Power off the VM
Edit the VM’s .vmx file
Update the NVRAM entry: nvram = "<vmname>.nvram"
Power on the VM
Confirm the NVRAM entry is updated
Retry hot migration (vMotion)
Note: This workaround can be applied with VM powered on by making changes in VM Options
Long-Term Fix (Engineering Enhancement)
Broadcom Engineering is implementing an enhancement targeted for future release.
Enhancement behavior:
Automatically realigns the NVRAM filename during hot vMotion
Ensures correct NVRAM file mapping on the destination datastore
Occurs inline during migration
No manual intervention required
Fully transparent to the user
Cold migration does not modify VM configuration files and therefore does not introduce this issue.
There is no automated pre-check or API to validate NVRAM filename correctness.
If a VM is running, its NVRAM is already considered valid.
The “Virtual TPM initialization failed” event in this scenario is misleading and does not indicate an actual vTPM failure.