Australian cloud for business software — built and run in Sydney since 2003

NetLeverage
NetLeverage

Leaving VMware for Hyper-V: failover clustering, CSV and live migration in depth

Technical article
Cloud

About this article: AI-assisted writing, reviewed against the cited sources. This is source research, not a lab validation of the procedures. Check the stated versions and your own recovery requirements before making changes.

Moving from vSphere to Hyper-V is a redesign of three things: who holds quorum, which node owns each volume, and how running VMs are allowed to move. Copying the disks is the easy part. A cluster built as a like-for-like vSphere copy can pass a quick test and still go down when one node and a witness fail together, send a whole volume's I/O over a network, or migrate one VM at a time without anyone having chosen that.

Names and addresses are examples.

Interpretations are editorial; no lab testing was performed.

Why it matters

Microsoft's support position depends on validation. It only supports cluster solutions where the complete configuration passes all validation tests and uses hardware certified for that Windows Server version. A design carried over from vSphere has to meet that test on its own terms.

How it works

Nearest equivalents

This table is our own mapping. These are nearest equivalents, and none behaves identically.

vSphere Hyper-V Difference to plan for
vSphere HA cluster Failover cluster with VM roles Survival is decided by votes, with a witness
VMFS datastore Cluster Shared Volume (CSV) Each volume has one coordinator node
vMotion Live migration The parallel limit and network are set separately
DRS VM load balancing Default unclear in Microsoft's page; read the live value
EVC Processor compatibility Set per VM, with the VM shut down
VMDK VHDX Conversion may leave disks dynamically expanding

Quorum: which nodes keep running

A failover cluster stays up only while a majority of votes is present. When a partition loses quorum, the cluster service stops in the minority, and those nodes rejoin automatically later.

Microsoft publishes this survival table. W means a witness is configured.

Nodes Survives one failure Survives one failure, then another Survives two at once
2 50/50 No No
2 + W Yes No No
3 Yes 50/50 No
3 + W Yes Yes No
4 Yes Yes 50/50
4 + W Yes Yes Yes
5 or more Yes Yes Yes

The 50/50 entries come from dynamic quorum, which removes one node's vote when the count is even. With two nodes and no witness, the cluster survives if the node without the vote fails. It goes down if the node holding the vote dies unexpectedly. A graceful shutdown hands the vote over first, so a planned reboot test will not reveal this.

That table page is written for Storage Spaces Direct and says a witness isn't needed at five or more nodes. The general witness guidance is to always configure one on Windows Server 2012 R2 and later. Dynamic witness means it only votes when the node votes are even.

Witness Key requirements Holds cluster database?
Cloud Azure Standard general-purpose v2 storage, port 443 outbound from every node No
File share SMB 2 or later, at least 5 MB free, dedicated to one cluster, physically separate No
Disk Over 512 MB, basic, NTFS or ReFS, no drive letter Yes

Do not put a file share witness on DFS or other replicated storage. Microsoft says this is unsupported because it can cause partition-in-time and data loss. A CSV cannot be the witness disk.

Set-ClusterQuorum -CloudWitness -AccountName <storageaccount> -AccessKey <key>
Set-ClusterQuorum -FileShareWitness \\witness01\cluster1
Get-ClusterQuorum

The second form is composed from Microsoft's documented parameter, which is shown with -Cluster and -Credential for a non-domain device. Run the Validate Quorum Configuration test afterwards.

Cluster Shared Volumes: one owner per volume

CSV gives every node read and write access to the same LUN, but each volume has a coordinator node that owns the physical disk. Metadata changes are synchronised through it over SMB 3.0.

A node doing disk I/O normally communicates directly with the storage, which Microsoft calls Direct I/O. Two kinds of redirection replace it:

  • File system redirection works per volume. Causes include a CSV snapshot taken by a backup and manually set redirected mode.
  • Block redirection works at file-block level, for example after a node loses its storage connection. It is the faster of the two.

Both send I/O across a cluster network to the coordinator. If the coordinator itself fails, I/O is queued briefly while ownership moves.

The state is visible per node:

Get-ClusterSharedVolumeState
Get-ClusterSharedVolume

The first command shows whether I/O is direct, redirected or unavailable on each node, and the reason when redirected. If one node reports redirection while its peers report direct, we would check that node's storage path first. If every node reports it, check the file system and any running backup.

Format choice is the trap. Microsoft's guidance is to format SAN-attached volumes with NTFS. ReFS on a SAN runs in redirected mode, with writes sent to the coordinator, and won't use Direct I/O regardless of other conditions. Reserve ReFS for Storage Spaces Direct. An engineer who picks ReFS for a SAN because it sounds newer has put every write from every non-owner node through one server's network path.

Other CSV rules to design around:

  • On Windows Server 2016 and later, a CSV disk must be basic, use a supported partition layout, and be formatted with NTFS or ReFS, and the disk resource must be Physical Disk type. Pass-through disks cannot be CSVs.
  • Paths sit under C:\ClusterStorage. Rename a mount point before VMs use it, not while handles are open.
  • All nodes need the same system drive letter.
  • Microsoft advises at least one CSV per node, so ownership can spread. It states no limit on VMs per CSV and refers you to the storage vendor.
  • Do not disable Client for Microsoft Networks or File and Printer Sharing on cluster networks. CSV traffic uses SMB.

The CSV read cache needs a check on each system. The management page says it is on with 1 GiB on Windows Server 2016 and later, while the same page's table gives BlockCacheSize a default of 0. Read the real value with Get-ClusterSharedVolume | Select Name, BlockCacheSize, and do not assume either.

Networks: isolate them, then say so

A Hyper-V cluster carries six traffic types: management, cluster, live migration, storage, replica and VM access. Microsoft recommends these settings. VM networks should not appear as cluster networks at all.

Network Cluster setting Role value QoS weight (example)
Management Cluster and client 3 10
Cluster and CSV Cluster only 1 10
Live migration Cluster only 1 40
Storage No cluster traffic 0 40
(Get-ClusterNetwork -Name "Management Network").Role = 3

Three details cause most surprises:

  • A node is recognised with only one IP address per subnet. A dedicated network needs its own subnet.
  • The virtual switch needs Switch Embedded Teaming (SET). Microsoft's feature list says it "no longer has the capability to be bound to an LBFO team", and that LBFO stays supported outside Hyper-V. Microsoft's pages differ: the network recommendations still show New-NetLbfoTeam under a virtual switch, and the hardware page still mentions LBFO. We follow the feature list. LBFO also disables RDMA.
  • Switch Embedded Teaming needs identical adapter, driver and firmware on each node.

Our example, using the documented parameter:

New-VMSwitch -Name SETswitch -NetAdapterName "NIC1","NIC2" -EnableEmbeddedTeaming $true

By default, live migration chooses from the cluster network topology. To confine it to one network, as in Microsoft's example:

Get-ClusterResourceType -Name "Virtual Machine" | Set-ClusterParameter -Name MigrationExcludeNetworks -Value ([String]::Join(";",(Get-ClusterNetwork | Where-Object {$_.Name -ne "Migration_Network"}).ID))

Heartbeat timing is shorter than many expect. A 2019 Microsoft engineering post gives Windows Server 2016 defaults of a 1-second delay with 10 missed heartbeats on the same subnet, and 20 across subnets. That is 10 and 20 seconds of tolerance. Check yours with get-cluster | fl *subnet*. The post says raising thresholds only masks a network fault, and advises generally not going above about 20 seconds.

Live migration: limits, authentication and CPU

Parallel limit. On a standalone host the default is two simultaneous migrations. In a cluster, the cluster property takes precedence. A January 2023 Microsoft post says the property defaulted to 1 when the update introduced it. So Set-VMHost -MaximumVirtualMachineMigrations 10 may change nothing that matters. Read the value that does:

(Get-Cluster).MaximumParallelMigrations

Microsoft recommends testing reliability on your own hardware before raising it. One at a time means a node drain can take far longer than a vSphere team expects.

Bandwidth with SMB. Live migration over SMB can delay or drop storage and cluster traffic if it takes too much. Installing the SMB Bandwidth Limit feature (FS-SMBBW) applies a default limit of 25% of the node's total bandwidth, so installation alone changes behaviour. Each node needs the 2022-09 Cumulative Update or later.

Encryption. Microsoft states that live migration traffic isn't encrypted on the wire and advises isolating it on trusted private networks. VM memory crosses that network, so a shared or routed migration VLAN is a security decision.

Authentication outside a cluster. That same page covers moves between non-clustered hosts, which matters during a staged build or a move between clusters. Kerberos needs constrained delegation for the cifs and Microsoft Virtual System Migration Service services, in both directions. CredSSP, the default for Windows Server 2022 and earlier, needs you signed in to the source host. On Windows Server 2025, Credential Guard is on by default for domain-joined servers that aren't domain controllers, so CredSSP-based live migration can't be used after upgrading. The documented failure text is:

Failed to establish a connection with host computer name: No credentials are available in the security package 0x8009030E.
Set-VMHost -VirtualMachineMigrationAuthenticationType Kerberos
Set-VMHost -VirtualMachineMigrationPerformanceOption SMB

Move-ClusterVirtualMachineRole also cannot run remotely without CredSSP on the server, so we would run it on a node.

CPU differences. A migration is cancelled at the start if the target lacks the VM's processor features. Processor compatibility mode hides newer instructions, and is set per VM rather than per cluster. It is off by default. Microsoft recommends enabling it only during the migration process and then disabling it, so the VM can use the host's full capabilities.

Set-VMProcessor TestVM -CompatibilityForMigrationEnabled $true

The VM must be shut down first. Windows Server 2025 adds a dynamic mode using the common feature set across the cluster, for configuration version 10.0 or later. No mode moves a running or saved VM between Intel and AMD.

Load balancing. The cited page says three things: balancing is periodic by default, every 30 minutes; the Windows Admin Center setting defaults to Never; and AutoBalancerMode 1, balance on node join only, is the Windows Server default. Mode 2 adds the 30-minute run. Trust the live value: Get-Cluster | fl AutoBalancer*.

Getting the VMs across

Microsoft documents two routes.

System Center VMM Windows Admin Center VM Conversion extension
Status Supported product Preview, no support obligation
Downtime pattern Offline: VM powered off for the copy Sync while running, then final delta with VM off
Scale 10 parallel per ESXi and Hyper-V pair, up to 100 across pairs 10 VMs per batch
Source snapshots None allowed None allowed
vSAN Not supported Not supported
VMware Tools Must be uninstalled first See below
Source ESXi, versions per VMM system requirements vCenter 6.x to 8.x (9 not listed)
Other blocks No disks on an IDE bus, no VMware workstations, antivirus must be supported Not listed on the pages opened

An IDE-attached source disk is a screening question; BIOS firmware alone does not determine the source disk controller. The VMM column follows the VMM 2025 edition of the page. The extension requires exactly VDDK 8.0.3 in C:\Program Files\WindowsAdminCenter\Service\VDDK, a Windows Admin Center gateway at build 2.4.12.10 or later, PowerCLI, and the Visual C++ 2013 and 2015 redistributables. Its FAQ says Resync is not supported. The user must stay signed in with an active browser session, or the migration may pause. There is no cancel button. Stopping a job means stopping the service and editing status files.

If VMs live on vSAN, neither route reads them. A move to another datastore comes first, and that is a Storage vMotion, which the troubleshooting page lists as a cause of invalid Change ID errors. Do it before the first sync.

What does not carry over cleanly:

Item What happens Action
Firmware BIOS becomes generation 1, UEFI becomes generation 2; cannot change later Decide before converting
BIOS VM with over four disks VMM does not attach them all (IDE limit) Plan to add the rest with Microsoft's script
Non-OS disks Offline after VMM conversion Inside the VMware guest, run Set-StorageSetting -NewDiskPolicy OnlineAll before conversion, or bring disks online afterwards
Disk type (extension) Dynamic VHDX Convert-VHD -VHDType Fixed if wanted
Memory (extension) Static Reconfigure dynamic memory if used
BIOS GUID, serial format (extension) Different Licensing and identity tools may notice; a script updates the GUID
Static IP (extension) Not preserved without action Guest credentials or Prepare-MigratedVM.ps1 -StaticIPMigration after sync, before migrate
VMware Tools (extension) Microsoft's pages conflict Check each VM; the overview says it removes Tools on Windows, the FAQ says it doesn't
Linux guests (extension) Need Hyper-V drivers first Install before migration

Invalid Change ID errors: listed causes are changed block tracking off, snapshots, independent disks, physical RDMs, Storage vMotion, resize and restore. The logs are in C:\Program Files\WindowsAdminCenter\Service\VMConversion_log.txt and the WindowsAdminCenter event log, source WebREST, Event ID 422.

What to choose and why

Choose NTFS on SAN CSVs unless you are running Storage Spaces Direct. Direct I/O is the point of the design.

Choose a witness in a third failure domain. For most sites that means a cloud witness when every node has outbound 443, otherwise a file share elsewhere. A witness in the same rack as the nodes does not survive what you built it for.

Choose VMM when you already run it and can power VMs off for the copy. Choose the extension for a short cutover only with test VMs first and a fallback, since it is preview software.

A safe order:

  1. Inventory each VM's firmware, disk count, snapshots, vSAN use, independent disks, RDMs and static addressing.
  2. Install the same Windows Server version on all nodes, in the same domain, with Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools.
  3. Validate, then create without taking storage: powershell Test-Cluster –Node Server1, Server2 New-Cluster –Name MyCluster –Node Server1, Server2 –StaticAddress 192.168.1.12 -NoStorage
  4. Set the witness and confirm with Get-ClusterQuorum.
  5. Set network roles and live migration networks.
  6. Add storage formatted NTFS, then Add-ClusterSharedVolume -Name "Cluster Disk 1".
  7. Test with a throwaway VM: drain a node, fail a node, read Get-ClusterSharedVolumeState.
  8. Convert a pilot. Make the VM highly available if it isn't already, with Add-ClusterVirtualMachineRole -VirtualMachine VM1.
  9. Move the remaining VMs in batches, keeping the source powered off but intact until validated.

To drain for maintenance:

Suspend-ClusterNode -Name "node1" -Drain -WhatIf
Suspend-ClusterNode -Name "node1" -Drain
Resume-ClusterNode node1 -Failback Immediate

Pausing suits software updates. For extensive maintenance, Microsoft suggests stopping the Cluster service on that node instead. After any unexplained event, Get-ClusterLog -Destination . collects logs from each node.

Risks and limits

Do not use -ForceDrain as a routine. Any workload that can't be moved safely is stopped and moved as a failed role, and the node is paused anyway.

Warning: validating a live cluster. Test-Cluster skips storage tests on online disks in use unless the role is stopped with Stop-ClusterGroup. Stopping a role stops its VMs. A clean report on a running cluster is not a full storage test, and getting one by stopping roles is an outage.

Do not run production VMs and their source at once. Two copies of one identity on the same network cause conflicts. Keep the VMware VM isolated through acceptance. After target writes begin, return to the source requires a proven reverse path or reconciliation; retaining the old disk alone is not a current rollback. Our recommendation; the length depends on your retention needs.

Backup behaviour changes. Windows Server Backup is crash-consistent only for VMs on CSV, and a CSV snapshot can place the volume in file system redirection. Confirm how your backup product uses CSV before go-live.

Active Directory dependency. Nodes need the same domain and time zone, and a domain controller must not run on a cluster machine in the standard design. The same page documents an Active Directory-detached cluster, PowerShell only, which we do not cover. Windows Server 2025 also documents workgroup Hyper-V clusters, and live migration in them relies on identical local accounts and self-signed certificates. Read its limits separately before choosing it for a site with no domain.

What we did not confirm. The failover clustering "what's new" URL serves the Windows Server 2019 page. The extension's vCenter 9 position is unstated. The default of 1 for MaximumParallelMigrations is from a 2023 post, so read the live value. Exact field names in Get-ClusterSharedVolumeState output were not listed on the pages opened.

Sources

Opened 2026-11-10.