Shared VHDX, a new feature in Windows Server 2012 R2, is a boon for administrators wanting to create a Failover Cluster running in Hyper-V virtual machines. Create a VHDX, attach it to the SCSI Controller of a virtual machine, tick "Enable virtual hard disk sharing" under Advanced Features of the Hard Drive (Click the little '+' to access Advanced Features). Repeat for as many virtual machines you want, power them up and you're good to go!
Now you've set up your Failover Cluster and everything's just jolly. Then you get a request to add more storage capacity to the Failover Cluster. At this point, you're thinking - No Sweat! You fire up Hyper-V Manager, create a new VHDX, then go to Failover Cluster Manager to attach it to the first virtual machine as shared, go to the second virtual machine, do the same thing.
Error applying Hard Drive changes
'VM2' failed to add device 'Virtual hard Disk'. (Virtual machine ID XYZ)
Failed to open attachment 'C:\ClusterStorage\Volume1\SharedDisk.vhdx'. Error: 'The requested operation cannot be performed on the virtual disk as it is currently used in shared mode.'.
Wow - so much for 'No Sweat'! What's going on here?!?
Turns out you can't use the GUI to hot-add a Shared VHDX. What then? Well... what else but PowerShell!
For every virtual machine that you want to add the Shared VHDX to, run this command (Import the Hyper-V module if you haven't already done so - 'Import-Module Hyper-V'):
Add-VMHardDiskDrive -VMName VM2 -Path C:\ClusterStorage\Volume1\SharedDisk.vhdx -ShareVirtualDisk
If you have Clustered Hyper-V, remember to run the command on the node where the virtual machine is hosted.
That's all, Folks!
Thanks to my colleague and buddy Surinder Singh for pointing this out to me. You really do learn something new everyday.
Thanks Richard, this is a good feature. I wanted to test this for my laptop's guest cluster setup, but ran into a problem when I tried to add the shared VHDX itself (forget the hot-add scenario.) It gave me an error 'The storage where the virtual hard disk is located does not support virtual hard disk sharing' which I later found to be due to a requirement that the VHDX be on a shared CSV or on Scale-Out File Server. In your demo, you have shown this working on C:\ (local storage), is there something I am missing?
Arvind, the hosts need to be clustered to get a special filter driver (svhdxflt.sys) and the VHDX must be on shared storage, either CSV or SMB 3.0.
C:\ClusterStorage is a special directory under which Cluster Shared Volumes (CSVs) are mounted. C:\ClusterStorage\Volume1 is a shared disk - not local storage.