Virtual Hard Disk Sharing in Windows Server 2016

IIn Windows Server 2012 R2 sono stati introdotti gli Shared Disk (che avevano l’estensione .VHDX), pensati per poter condividere uno o più hard disk tra più macchine virtuali e semplificare la creazione dei Guest Cluster. In questo modo è infatti possibile proteggere i servizi e le applicazioni all’interno delle VM ed in particolar modo gli Shared Disk si prestano ad ospitare i file dei database SQL Server e i dati dei File Server creati all’interno delle VM. Gli Shared VHDX avevano però tutta una serie di limitazioni (no resize, no host level backup, no ckeckpoint, no Hyper-V Replica support, no storage live migration) che di fatto ne hanno limitato fortemente l’adozione.

In Windows Server 2016 gli Shared Disk sono stati sostituiti dai VHD Set (hanno l’estensione .VHDS), che hanno il vantaggio di poter essere ridimensionati online, di poter essere replicati utilizzando Hyper-V Replica e di poter essere salvati durante le normali procedure di backup con Backup Host based. Rimane in ogni caso ancora non disponibile la possibilità di fare Storage Live Migration e la creazione dei Checkpoint.

I VHD Set devono necessariamente essere salvati all’interno dei Cluster Shared Volumes (CSVs) o dei Clustered Storage Spaces e possono essere a dimensione fissa o ad espansione dinamica.

Figura 1: Creazione dei VHD Set utilizzando i Cluster Shared Volumes (CSVs)

In alternativa è anche possibile salvarli in cartelle di rete ospitate da Scale-Out File Server che utilizzano il protocollo SMB 3.0

Figura 2: Salvataggio dei VHD Set in uno Scale Out File Server con SMB 3.0

Creazione di un VHD Set

Per creare un nuovo Shared Drive in Windows Server 2016 è sufficiente lanciare il wizard di creazione di un nuovo disco virtuale oppure modificare le impostazioni di una VM e creare il disco collegandolo al Controller SCSI. Gli Shared Drive infatti utilizzano SCSI-persistent reservations e vengono esposti alle VM come virtual disk SAS. Le SCSI-persistent reservations permettono alle diverse VM di coordinare l’ownership dello storage e quindi è possibile trasferire lo storage da un nodo all’altro, se uno dei due smette di funzionare.

Figura 3: Aggiunta di un nuovo Shared Drive alla VM

Figura 4: Wizard per la creazione del nuovo VHD Set

Figura 5: Creazione del disco virtuale condiviso all’interno di una cartella contenuta in un Cluster Shared Volume (CSV)

Figura 6: Scelta della dimensione dello Shared Drive

Terminato il wizard di creazione, potrete notare che nella cartella che avete scelto sono presenti due file, uno con estensione .VHDS (molto piccolo) che contiene i metadati necessari a permettere a tutte le VM che lo utilizzeranno di poter accedere contemporaneamente al disco virtuale e uno con estensione .AVHDX (Automatic VHDX) che conterrà i dati che saranno memorizzati dalle VM. Il file .AVHDX associato al file .VHDS è un hard disk virtuale (fisso o dinamico) gestito automaticamente. Se provate a rinominare il file .AVHDX in .VHDX (quando non è in uso) potrete anche collegarlo alla macchina Host e verificare che al suo interno ci sono i dati che avete memorizzato. ATTENZIONE: questa procedura non va fatta in produzione, ma solo in un ambiente di test al solo scopo di verifica.

Figura 7: File creati durante la creazione dello Shared Drive

È possibile aggiungere il disco virtuale creato anche alle altre VM, collegandolo al controller SCSI ed effettuando la ricerca del file .VHDS come mostrato in figura:

Figura 8: Aggiunta di un disco condiviso esistente ad una VM

Figura 9: Il disco condiviso viene correttamente collegato alla seconda VM

Il disco condiviso viene visto, come già scritto prima, come virtual disk SAS e può essere inizializzato e formattato dal sistema operativo della VM.

È anche possibile salvare i VHD Set all’interno di Scale-Out File Server cluster. Il wizard per la creazione del disco è identico, basta solo scegliere la condivisione di rete ospitata sullo Scale-Out File Server, come mostrato in figura:

Figura 10: Creazione del VHD Set in uno Scale-Out File Server cluster

Nel caso in cui cerchiate di salvare il file in una normale Share di rete invece che in uno Scale-Out File Server oppure all’interno di una cartella che non sia in un Cluster Shared Volume riceverete un messaggio di errore come quello in figura:

Figura 11: Errore nella creazione dello Share Drive a causa della posizione di salvataggio non supportata

Una valida alternativa all’interfaccia grafica è l’utilizzo dei comandi PowerShell. Per creare un VHD Set è infatti sufficiente utilizzare il comando:

New-VHD -path C:\ClusterStorage\VMs\SharedVHDX\Shared01.vhds -Dynamic -SizeBytes 500GB

Mentre per collegarlo alle VM è sufficiente utilizzare il comando:

Add-VMHardDiskDrive -VMName VM01 -ControllerNumber -ControllerLocation -Path C:\ClusterStorage\VMs\SharedVHDX\Shared01.vhd -ShareVirtualDisk

Add-VMHardDiskDrive -VMName VM02 -ControllerNumber -ControllerLocation -Path C:\ClusterStorage\VMs\SharedVHDX\Shared01.vhd -ShareVirtualDisk

Conclusioni

I VHD Set e gli Shared Drive semplificano di molto la creazione di Guest Cluster senza l’utilizzo di storage condiviso che richiederebbe configurazioni più complesse all’interno delle VM, come ad esempio connessioni iSCSI oppure l’utilizzo di Virtual Fiber Channel. In questo modo non siete più vincolati al tipo di storage e alla sua tecnologia e potete utilizzare dischi virtuali.