Posted on October 12, 2017 · Posted in Hyper-V, Windows Server 2016

VHD Set: Shared Virtual Disks on Hyper-V 2016

The next useful innovation that appeared in Windows Server 2016 is the new format of virtual disks — VHD Set (VHDS) enabling the simultaneous use of one virtual disk by multiple virtual machines. This feature is used in guest cluster scenarios (file cluster, SQL Server AlwaysOn FCI, etc.), when shared disks have to be available for all virtual machines cluster nodes. VHD Set technology is designed to replace Shared VHDX feature and also doesn’t not require the configuration of virtual HBA and SAN for the presentation of one LUN to several VMs.

In Windows Server 2012 R2 to provide guest clustering features the format of shared virtual disks, Shared VHDX, was used. However, Shared VHDX has some drawbacks:

  • no opportunity to change the size or migrate Shared VHDX
  • VHDX doesn’t support backup, checkpoints or replication

VHDS doesn’t have these restrictions, but it is available only in the VM running the guest Windows Server 2016. VHDS supports the following new features:

    1. host-level support of backup and replication
    2. VHD Set size change on-the-fly (without stopping the VM)
    3. support of hot disk migration
    4. creating checkpoints for .vhds files

To create a new VHD Set, select New -> Virtual Disk in the graphical menu of Hyper-V Manager. Specify VHD Set as disk format, then select the type of the disk (fixed or dynamic), file name, location and size.

hyper v 2016 - vhd set - new virtual disk typeYou can create the disk using PowerShell too:

New-VHD –Path c:\clusterstorage\vmstorage01\DynamicDisk.vhds -SizeBytes 40Gb -Dynamic

New-VHD create vhds disk

When creating a disk, it is enough to specify vhds file extension, and PowerShell will automatically create the VHD Set. When creating a disk of VHD Set format, two files appear:

  • .avhdx – a disk file containing data (it can be both fixed and dynamic)
  • .vhds – a small (260 KB) metadata file to coordinate the interaction between guest cluster nodes

avhdx and vhds  files

Here is an example how to create a wo-node guest cluster using VHDS.

Let’s create two new VHD Sets. The first one will be a Witness disk in the cluster quorum, and the second will be the disk for data. For example, our cluster is represented by two VMs. Connect both VHD Sets on each virtual machine. You can do it either in the Hyper-V graphical interface or in PowerShell:

Add-VMHardDiskDrive -VMName VMCL01 -Path "c:\ClusterStorage\SharedDisk\VM_Quorum.vhds" -SupportPersistentReservations
Add-VMHardDiskDrive -VMName VMCL01 -Path "c:\ClusterStorage\SharedDisk\VM_Shared.vhds" -SupportPersistentReservations
Add-VMHardDiskDrive -VMName VMCL02 -Path "c:\ClusterStorage\SharedDisk\VM_Quorum.vhds" -SupportPersistentReservations
Add-VMHardDiskDrive -VMName VMCL02 -Path "c:\ClusterStorage\SharedDisk\VM_Shared.vhds" -SupportPersistentReservations

Install Failover Clustering feature on each virtual server:

Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools -ComputerName VMCL01
Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools -ComputerName VMCL02

Initialize the disks:

get-disk |? OperationalStatus -Like "Offline" | Initialize-Disk

Create NTFS partitions:

New-Volume -DiskNumber 1 -FileSystem NTFS -FriendlyName Quorum
New-Volume -DiskNumber 2 -FileSystem NTFS -FriendlyName Data

Now you have to create a cluster:

# Compatibility check
Test-Cluster VMCL01,VMCL02

# Creating cluster
New-Cluster -Name FSCluster01 -Node VMCL01,VMCL02 -StaticAddress
(Get-ClusterResource |? Name -like "Cluster Disk 1").Name="Quorum"
(Get-ClusterResource |? Name -like "Cluster Disk 2").Name="Data"

# Specify the Witness disk
Set-ClusterQuorum -DiskWitness Quorum

# Add Cluster Shared Volume
Get-ClusterResource -Name Data | Add-ClusterSharedVolume

If you have done it right, a two-node guest cluster will appear.

two-node hyperv guest cluster with shared vhd disk

You can convert Shared VHDX to VHD Set. The conversion is performed offline (the disk must not be used and must be disconnected from all VMs) using Convert-VHD cmdlet:
Convert-VHD "С:\ClusterStorage\SharedDisk\old.vhdx" "С:\ClusterStorage\SharedDisk\new.vhds"

So, VHD Set in Windows Server 2016 allows to create a MSFT guest cluster without using complex technologies, like NPIV, virtual HBA and virtual SAN network. Virtual VHDS originally supports changing size, snapshots and migration.

Related Articles