Hyper-V on Windows 11 includes advanced virtual machine management capabilities that allow system administrators and developers to migrate virtual machine storage—including configuration files, virtual hard disks (VHD/VHDX), snapshots, and paging files—between physical storage locations without taking the guest operating system offline. Known as Live Storage Migration, this operation operates on a live, running virtual machine by synchronising disk sectors in real time to the destination target before cutting over the I/O path. Using Windows PowerShell and the Move-VMStorage cmdlet, administrators can automate and execute live storage migrations with surgical precision, whether rebalancing storage pools, migrating to high-speed NVMe drives, or preparing physical volumes for maintenance.
Understanding Hyper-V Live Storage Migration Architecture
Unlike shared-nothing Live Migration, which moves active virtual machine execution states between cluster nodes, Storage Migration specifically moves the underlying storage assets of a virtual machine whilst compute and memory remain resident on the host. During a live migration, Hyper-V performs the following underlying sequence:
- Shadow Copy / Target Disk Provisioning: Hyper-V creates the target virtual hard disk files at the designated destination path.
- Mirror Write Phase: The Hyper-V storage stack establishes a single-pass mirror write. All incoming writes from the guest operating system are simultaneously committed to both the source and destination disks.
- Background Block Copy: Unmodified blocks from the source virtual disk are transferred sequentially to the destination virtual disk in the background.
- I/O Path Switchover: Once background block copying is complete and the destination disk mirror is fully synchronised, Hyper-V redirects guest disk I/O exclusively to the target disk and releases file handles on the source storage.
- Source Cleanup: Hyper-V safely purges the original files from the source storage volume once integrity is confirmed.
Auditing Existing VM Storage Paths via PowerShell
Before initiating a storage migration, inspect the current storage layout, virtual hard disk attachments, and snapshot configurations for the target virtual machine.
Open Windows PowerShell as an Administrator and query the storage topology:
# Retrieve current VHD/VHDX file paths
Get-VM -Name "DevVM-Ubuntu" | Select-Object -ExpandProperty HardDrives | Select-Object VMName, Path
# Inspect full storage paths including configuration and snapshots
(Get-VM -Name "DevVM-Ubuntu").ConfigurationLocation
(Get-VM -Name "DevVM-Ubuntu").SnapshotFileLocation
(Get-VM -Name "DevVM-Ubuntu").SmartPagingFilePath
Verify that the destination storage volume has sufficient unallocated space to accommodate the maximum provisioned or dynamic expansion capacity of all associated virtual hard disks.
Performing Complete Storage Migration to a New Directory
To move all files associated with a virtual machine—including virtual hard disks, configuration XML/VMCX files, runtime checkpoints, and smart paging data—to a new storage location in a single operation, use the -DestinationStoragePath parameter.
Move-VMStorage -VMName "DevVM-Ubuntu" -DestinationStoragePath "D:\Hyper-V\Virtual Machines\DevVM-Ubuntu"
Because the virtual machine remains fully operational, guest networking, file shares, and running services continue without interruption. The PowerShell console holds execution until the cutover and cleanup complete.
Migrating Virtual Hard Disks Individually
In enterprise configurations, system administrators often separate virtual hard disks across different physical arrays—for example, keeping system OS disks on high-speed NVMe drives whilst storing secondary data disks on higher-capacity SSD arrays. PowerShell allows granular mapping of individual disks using the -Vhds parameter with hashtables.
To migrate a specific virtual hard disk while leaving other configuration files and secondary disks intact:
Move-VMStorage -VMName "DevVM-Ubuntu" -Vhds @(
@{
"SourceFilePath" = "C:\Hyper-V\Disks\DevVM_OS.vhdx";
"DestinationFilePath" = "D:\FastStorage\Disks\DevVM_OS.vhdx"
}
)
To move multiple virtual hard disks to separate destination locations in one structured command:
Move-VMStorage -VMName "DevVM-Ubuntu" -Vhds @(
@{
"SourceFilePath" = "C:\Hyper-V\Disks\DevVM_OS.vhdx";
"DestinationFilePath" = "E:\NVMe\DevVM_OS.vhdx"
},
@{
"SourceFilePath" = "C:\Hyper-V\Disks\DevVM_Data.vhdx";
"DestinationFilePath" = "F:\StoragePool\DevVM_Data.vhdx"
}
)
Migrating Configuration Files and Checkpoints Separately
Hyper-V allows independent migration of virtual machine configuration metadata and snapshot tree files without touching the primary virtual disk storage.
To move only the configuration, checkpoint, and smart paging directories:
Move-VMStorage -VMName "DevVM-Ubuntu" `
-VirtualMachinePath "D:\Hyper-V\Config\DevVM-Ubuntu" `
-SnapshotFilePath "D:\Hyper-V\Snapshots\DevVM-Ubuntu" `
-SmartPagingFilePath "D:\Hyper-V\Paging\DevVM-Ubuntu"
Monitoring Migration Progress and Handling Asynchronous Execution
For large multi-terabyte virtual disks, waiting synchronously in a PowerShell console can be impractical. To run the migration asynchronously in the background, append the -AsJob switch:
# Start storage migration as a background job
$Job = Move-VMStorage -VMName "DevVM-Ubuntu" -DestinationStoragePath "D:\Hyper-V\DevVM" -AsJob
# Check ongoing migration job status
Get-Job -Id $Job.Id
# Monitor progress percentage and transfer state
Receive-Job -Job $Job -Keep
To observe disk activity and I/O synchronisation in real time, launch Windows Resource Monitor (resmon.exe) or inspect the Hyper-V Event Log:
Get-WinEvent -LogName "Microsoft-Windows-Hyper-V-VMMS-Admin" -MaxEvents 10 | Where-Object { $_.Message -match "storage" }
Verifying Migration Integrity and Post-Migration Cleanliness
Once the migration finishes, confirm that all file pointers have transitioned cleanly to the destination path:
# Verify active disk path
(Get-VM -Name "DevVM-Ubuntu").HardDrives.Path
# Verify configuration path
(Get-VM -Name "DevVM-Ubuntu").ConfigurationLocation
Hyper-V automatically purges source files upon successful completion. Check the source directory to ensure no orphaned locks or residual temporary delta files remain.
Leveraging Move-VMStorage in Windows 11 enables seamless workload mobility and zero-downtime storage optimisation across workstation and lab environments.