I was faced with an interesting challenge recently. a Client was running two standalone Hyper-V hosts with about 4 VMs each running on a Storage Area Network(SAN). I installed the SAN previously to provide increased IO performance for their SCADA (Citect, for those taking notes) system.
This was essentially a very effective proof of concept as far as the client was concerned and they wished to take advantage of the more advanced features offered by Clustered Hyper-V (stuff like live migration etc.).
This posed a challenge, because we needed to convert the LUNs occupied by the VM’s to highly available Cluster Shared Volumes (CSV’s). In Hyper-V, a VM needs to be hosted on a CSV in order to be made highly-available. So off I went trying to figure out a non disruptive way to convert all my LUNs to CSV, without losing any data. This is what I came up with.
- Shut down your VM(s)
- Open Disk Management on your Hyper-V host and remove drive letter from LUN hosting the VM
- Open Failover Cluster Manager (FCM) –> Storage –> Add Disk –> Select Disk from Step 2 –> Click OK
- Still in FCM - Go to Cluster Shared Volume - Add Storage – select the disk you added in Step 3
- Open up Hyper-V Manager on the same host (notice the VM status is critical because you removed the drive letter). Remove the VM
- Create a new VM, opt to store it under the %systemdrive%\ClusterStorage folder which was created automatically when you performed Step 4. VERY IMPORTANT – Do not add any disks to the VM!
- Right click the VM you created in Step 6 and choose Edit Settings. Add the original VM’s disks (boot drive to be added to IDE controller 0). The existing VHD’s will be found in %systemdrive%\ClusterStorage
- Open FCM – Go to Services and Applications – in the Action pane select Configure a Service or Application –> select Virtual Machine –> Check the VM created in Step 6 –> Complete Wizard
- Ensure that the VM is connected to the correct network in Hyper-V Manager
- Because we are connecting a new NIC to the VM you will have to re-specify the IP address inside the VM once the VM has started up
Rinse and repeat for all existing VMs you want to make highly available. The Microsoft way would be to export the VM’s and import it again. Nothing wrong with that, apart from the fact that it takes a lot of time and storage to do, depending on the size of the VM. My way is quick and easy and it works!