Since a recent Windows 10 Insider update (build 20H2 or later), Microsoft changed the default checkpoint behavior for new Hyper-V virtual machines. Unlike Windows Server where this remains disabled, Windows 10 now enables "Use automatic checkpoints"
by default under VM Settings > Checkpoints.
Automatic checkpoints can:
- Create performance overhead during VM operations
- Generate unnecessary disk I/O during development
- Occupy storage space with unwanted restore points
- Interfere with clean state testing scenarios
To disable this globally before VM creation:
# Set default checkpoint type to None for new VMs
Set-VMHost -VirtualMachinePath "C:\Hyper-V" -VirtualMachineMigrationAuthenticationType Kerberos -CheckpointType None
For existing VMs:
Get-VM | Where-Object {$_.CheckpointType -eq "Production"} | Set-VM -CheckpointType None
Create/modify this DWORD value:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization]
"DefaultCheckpointType"=dword:00000000
Valid values:
- 0 = None (disabled)
- 1 = Production
- 2 = Standard
After applying changes:
# Check host default setting
Get-VMHost | Select-Object CheckpointType
# Verify VM configuration
Get-VM | Select-Object Name, CheckpointType
Create a template VM with disabled checkpoints, then clone:
# Export template VM
Export-VM -Name "TemplateVM" -Path "C:\VM_Templates"
# Import with new name
Import-VM -Path "C:\VM_Templates\TemplateVM\Virtual Machines\GUID" -Copy -GenerateNewId
Disabling this setting:
- Does not affect manually created checkpoints
- Won't remove existing automatic checkpoints (use
Remove-VMSnapshot
) - May improve VM performance during intensive I/O operations
Since Windows 10 build 1809, Microsoft enabled automatic checkpoints by default for new Hyper-V VMs - a behavior that differs from Windows Server. This can be problematic for developers who:
- Prefer manual checkpoint control
- Want to conserve disk space
- Need consistent behavior across environments
You can modify the default behavior through the registry before creating new VMs:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\VirtualMachine]
"DefaultAutoCheckpointsEnabled"=dword:00000000
To apply this via PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\VirtualMachine"
-Name "DefaultAutoCheckpointsEnabled" -Value 0 -PropertyType DWORD -Force
When creating VMs programmatically, specify the checkpoint behavior:
New-VM -Name "DevVM" -MemoryStartupBytes 4GB -NewVHDPath "C:\VMs\DevVM.vhdx" -NewVHDSizeBytes 40GB
-SwitchName "External Switch" -AutomaticCheckpointsEnabled $false
For VMs already created, disable automatic checkpoints with:
Get-VM | Set-VM -AutomaticCheckpointsEnabled $false
Or for specific VMs:
Set-VM -Name "TestVM" -AutomaticCheckpointsEnabled $false
For enterprise environments, consider Group Policy:
Computer Configuration -> Administrative Templates -> Windows Components -> Hyper-V -> VM Settings
Set "Turn off automatic checkpoints" to Enabled
Confirm the setting took effect with:
Get-VM | Select Name, AutomaticCheckpointsEnabled
Or check a specific VM:
(Get-VM -Name "DevVM").AutomaticCheckpointsEnabled