# Hyper-V Checkpoint Merge Failed: Fix Stuck AVHDX Chains Safely

Source: https://srvscripts.com/guides/hyper-v-checkpoint-merge-failed/
Updated: 2026-10-06
Publisher: srvScripts (https://srvscripts.com/)

**Short answer:** A Hyper-V checkpoint is an AVHDX differencing disk; deleting it makes Hyper-V merge that file back into its parent. When the merge fails or never starts, first free disk space and stop whatever holds the files (backup job, antivirus), then delete the checkpoint with `Get-VMSnapshot -VMName <vm> | Remove-VMSnapshot` (include backup-created `Recovery` checkpoints) and, if possible, shut the VM down so the merge can finish. Only if that fails, back up the whole VM folder, map the chain with `Get-VHD` and merge offline with `Merge-VHD`.

Commands checked against the official documentation (linked below) on 6 October 2026; not yet run on our lab servers.

## How checkpoints and AVHDX chains work

When you take a checkpoint, Hyper-V freezes the current VHDX and starts writing all new blocks to a new `.avhdx` file whose parent is the frozen disk. Take another checkpoint and a second AVHDX is chained on top of the first. The VM always runs on the newest file in the chain.

Deleting a checkpoint does not throw data away: Hyper-V merges the differencing disk into its parent and then removes the AVHDX. Microsoft is explicit that you should never delete `.avhdx` files by hand; doing so breaks the chain and usually the VM.

Backup products (Veeam, DPM, Altaro, Veritas and others) use the same mechanism. They create a recovery checkpoint, copy the frozen disk, then ask Hyper-V to merge. If the job crashes or loses contact with the host, that checkpoint can be left behind. Some of them do not even show in Hyper-V Manager, which is why you can find a folder full of AVHDX files with an empty checkpoint list.

Typical symptoms people search for:

- A checkpoint that sits in a merging state for hours, or a merge percentage that never moves.

- Backup error `Failed to create VM recovery checkpoint … error code: 32768` or `Could not create backup checkpoint for virtual machine - Error -0x800423F2`.

- `The process cannot access the file because it is being used by another process. (0x80070020)` when deleting or importing.

- The volume holding the VM fills up and the VM is paused because AVHDX files keep growing.

- “Delete Checkpoint” is missing from the right-click menu.

## Diagnose: list checkpoints and map the disk chain

Run these on the Hyper-V host as Administrator. Replace `APP01` with your VM name.

```
# All checkpoints, including those created by backup software
Get-VMSnapshot -VMName APP01 |
    Format-Table Name, SnapshotType, CreationTime, ParentSnapshotName -AutoSize

# What file each virtual disk is actually running on, and its parent
Get-VMHardDiskDrive -VMName APP01 | ForEach-Object {
    Get-VHD -Path $_.Path | Select-Object Path, VhdType, ParentPath, FileSize, Size
}
```

`SnapshotType` tells you who made it: `Recovery` checkpoints were created by a backup application, while checkpoints an admin takes normally show as `Standard`. A type of `Missing` points at a checkpoint whose files are gone. If `Get-VMHardDiskDrive` shows a path ending in `.avhdx` but `Get-VMSnapshot` returns nothing, you have an orphaned (hidden) checkpoint.

Walk the full chain from the running disk down to the base VHDX. This short loop follows `ParentPath` until it reaches a disk with no parent, and stops with a warning if a parent file is missing:

```
$disk = (Get-VMHardDiskDrive -VMName APP01 | Select-Object -First 1).Path
$level = 0
while ($disk) {
    if (-not (Test-Path -LiteralPath $disk)) { Write-Warning "Missing file in chain: $disk"; break }
    $v = Get-VHD -Path $disk
    [pscustomobject]@{ Level = $level; Type = $v.VhdType; Path = $v.Path; SizeGB = [math]::Round($v.FileSize / 1GB, 1) }
    $disk = $v.ParentPath
    $level++
}
```

Then check the three things that cause most failed merges:

```
# 1. Free space on the volume that holds the VM (a merge can need roughly the size of the data being merged)
Get-Volume -DriveLetter D | Select-Object DriveLetter, SizeRemaining, Size

# 2. Recent Hyper-V management errors and warnings
Get-WinEvent -LogName 'Microsoft-Windows-Hyper-V-VMMS-Admin' -MaxEvents 50 |
    Where-Object Level -le 3 | Format-Table TimeCreated, Id, Message -Wrap

# 3. VSS writers in a failed state (backup-related merges)
vssadmin list writers
```

## Fix 1: delete the checkpoints the supported way

Start here even if Hyper-V Manager has failed before. If a backup job is running against this VM, stop it first, and confirm the backup application is not about to retry.

Delete a specific checkpoint, or all of them:

```
# One checkpoint by name
Remove-VMSnapshot -VMName APP01 -Name 'Before update'

# Every checkpoint of the VM (merges each one into its parent)
Get-VMSnapshot -VMName APP01 | Remove-VMSnapshot

# Only checkpoints left behind by backup software
Get-VMSnapshot -VMName APP01 -SnapshotType Recovery | Remove-VMSnapshot
```

Add `-WhatIf` first if you want to see what would be removed. When **Delete Checkpoint** is missing from the context menu (common with backup-created checkpoints), select the checkpoint in Hyper-V Manager and press the **Del** key; Microsoft documents this as a working alternative.

The merge runs in the background. On a running VM it can take a long time for large AVHDX files. Watch the VM status column in Hyper-V Manager, and keep re-running the chain map: the number of levels should fall to zero AVHDX files.

**If it does not move:** shut the VM down cleanly. Microsoft notes that shutting down triggers the pending merge, and offline merges are both faster and more reliable than live ones.

```
Stop-VM -Name APP01   # graceful guest shutdown; wait for the merge, then Start-VM
```

## Fix 2: clear what blocks the merge

If the merge errors out or hangs again, fix the cause before retrying:

| Cause | What to do |
| --- | --- |
| Volume full or nearly full | Free space or temporarily move other VMs off the volume (Storage Migration). Do not delete AVHDX files to make room. |
| File lock, error 0x80070020 | Find the process with Resource Monitor (CPU tab, Associated Handles, search “.avhdx”) or Process Monitor. Usually a backup agent or antivirus. Stop it, add the Microsoft-recommended Hyper-V antivirus exclusions, retry. |
| Failed VSS writers | Restart the VSS services (net stop vss / net start vss), check vssadmin list writers again; reboot the host if writers stay failed. Stagger backup jobs so they do not overlap. |
| Backup vendor still “owns” the checkpoint | Use the vendor’s cleanup tool or support procedure. Microsoft gives Veritas nbhypervtool.exe as an example. |
| Permissions after a restore or file copy | The VM’s own account (NT VIRTUAL MACHINE\) needs full control on its folder; Microsoft’s example is icacls  /grant "NT VIRTUAL MACHINE\:F" /T. |
| Pass-through, shared VHDX or virtual Fibre Channel disks | Checkpoints are not supported on these by design. Use your backup vendor’s method for these VMs. |

## Fix 3: manual offline merge (last resort)

This changes disk files directly. Before you start: shut the VM down, then copy the entire VM folder (configuration, every VHDX and AVHDX) to another volume or a NAS and confirm the copy completed. If anything goes wrong you return to this copy. Merge-VHD is an offline operation: the chain must not be attached to a running VM.

Use this when checkpoints are invisible, Remove-VMSnapshot fails, and a clean shutdown does not merge. Work from the newest file towards the base disk.

- Shut down the VM and confirm it is `Off`: `Get-VM APP01 | Select-Object Name, State`.

- Copy the VM folder to a safe location (see the warning above).

- Map the chain with the loop in the diagnose section and write down every path, newest first.

- Merge the newest AVHDX into the base disk. `Merge-VHD` can merge through intermediate files in one step when the destination is an ancestor further down the chain.

- Point the VM’s disk at the merged base VHDX.

- Start the VM and check the guest file system and applications.

```
# Example chain: APP01_A2.avhdx -> APP01_A1.avhdx -> APP01.vhdx
$base   = 'D:\Hyper-V\Virtual Hard Disks\APP01.vhdx'
$newest = 'D:\Hyper-V\Virtual Hard Disks\APP01_A2.avhdx'

Merge-VHD -Path $newest -DestinationPath $base

# Repoint the VM's first disk at the merged base disk
$drive = Get-VMHardDiskDrive -VMName APP01 | Select-Object -First 1
Set-VMHardDiskDrive -VMHardDiskDrive $drive -Path $base

Get-VHD -Path $base | Select-Object Path, VhdType, ParentPath
Start-VM -Name APP01
```

After a successful merge the intermediate AVHDX files are no longer valid disks (Microsoft’s documentation says they are not deleted but can no longer be used). Keep them, and your backup copy, until the VM has run correctly for a while and a fresh backup has completed; then remove them.

In Hyper-V Manager the same merge is **Edit Disk** > select the AVHDX > **Merge** > **To the parent virtual hard disk**, repeated for each level.

If the VM configuration is too damaged to start even with a clean, merged VHDX, the supported fallback is simple: create a new VM of the same generation and attach the merged disk.

## Check that it worked

```
Get-VMSnapshot -VMName APP01                      # should return nothing (or only checkpoints you want)
Get-VMHardDiskDrive -VMName APP01 | ForEach-Object { Get-VHD -Path $_.Path } |
    Select-Object Path, VhdType, ParentPath             # Path should be .vhdx, ParentPath empty
Get-ChildItem 'D:\Hyper-V\Virtual Hard Disks' -Filter 'APP01*.avhdx'
```

Finish by running a backup job and confirming that its recovery checkpoint is created and removed cleanly. If the backup leaves a new AVHDX every night, the root cause is still there (usually the backup product version, VSS or antivirus).

## Prevent it next time

- Treat checkpoints as short-term: take one before a change, delete it once the change is confirmed. Microsoft’s guidance flags chains of more than 50 checkpoints as a problem that needs scheduled downtime to merge.

- Use production checkpoints (`Set-VM -Name APP01 -CheckpointType Production`) for anything with application data, and never revert a domain controller with a standard checkpoint.

- Alert on free space on VM volumes and on AVHDX files older than a day. Our [disk alert script](/scripts/disk-inode-alert/) covers Linux hosts; on Windows a scheduled `Get-ChildItem -Recurse -Filter *.avhdx` with an age filter does the job.

- Keep backup software and Hyper-V integration services up to date, and do not let two backup products protect the same VM.

**Official documentation:** [Hyper-V snapshots, checkpoints and differencing disks troubleshooting](https://learn.microsoft.com/en-us/troubleshoot/windows-server/virtualization/hyper-v-snapshots-checkpoints-differencing-disks) · [Merge checkpoints with many differencing disks](https://learn.microsoft.com/en-us/troubleshoot/windows-server/virtualization/merge-checkpoints-with-many-differencing-disks) · [Remove-VMSnapshot](https://learn.microsoft.com/en-us/powershell/module/hyper-v/remove-vmsnapshot) · [Merge-VHD](https://learn.microsoft.com/en-us/powershell/module/hyper-v/merge-vhd)

**Related:** [Disks Consolidation Needed on ESXi: Safe VM Snapshot Fix](/guides/vm-disks-consolidation-needed-esxi/) · [Redo Log of VMDK Is Corrupt on ESXi: Recovery](/guides/redo-log-of-vmdk-is-corrupt/) · [Backup Verify Script](/scripts/backup-verify/) · [Restore Domain Controller Backups: System State and DSRM Steps](/guides/backup-restore-domain-controller/)

**See also:** [Install Hyper-V on Windows Server 2025: Switches and First VM](/guides/install-hyper-v-windows-server-2025/) · [Hyper-V Export and Import VM: Move VMs with PowerShell](/guides/hyper-v-export-import-vm/)

## Frequently asked questions

### Can I just delete the AVHDX files?

No. Each AVHDX holds every change written since its checkpoint. Deleting one loses that data and breaks the chain so the VM will not start. Merge it instead.

### How long does a checkpoint merge take?

It depends on how much data the AVHDX holds and on storage speed. A few GB merges in minutes; a checkpoint left for months can take hours. Offline merges after a shutdown are usually faster.

### Why are there AVHDX files but no checkpoints in Hyper-V Manager?

A backup job most likely created a recovery checkpoint and failed before cleanup. Check Get-VMSnapshot with -SnapshotType Recovery, then shut the VM down to let the merge run.

### What does error 32768 mean in my backup log?

It is a generic Hyper-V failure code returned when the backup could not create the recovery checkpoint. Look at the Hyper-V-VMMS Admin log and vssadmin list writers on the host for the real cause.

### Is it safe to merge while the VM is running?

Deleting a checkpoint with Remove-VMSnapshot merges live and is supported. Manual Merge-VHD is offline only and needs the VM shut down.
