Black_Codec

Sistemista Senior in ambito windows e linux.
Security expert specializzato nelle soluzioni Oracle Identity and Access Manager.
Sviluppatore a tempo perso ...
Espandere un file vhd
Come espandere un hard disk virtuale di Hyper-V.

Da Hyper-V Manager selezioniamo Edit Disk dal menù Actions.

Partirà il wizard e per prima cosa dovremo dire quale HD vogliamo editare. Andiamo quindi a scegliere il file .vhd, ora possiamo decidere se convertirlo a disco ad "espansione dinamica" oppure se espandere la capacità del disco, selezioniamo la seconda.

Ci viene quindi chiesto qual è la nuova capacità dell’HD, impostiamo il numero di giga che ci interessa e terminiamo il wizard.

Notate bene che il numero di giga sarà il totale dello spazio disponibile sul disco, ad esempio poniamo che abbiamo un hard disk virtuale da 10 giga e vogliamo portarlo a 40 dovremo digitare 40 non 30!

Al termine dell’espansione possiamo riavviare la nostra VM, noteremo una cosa però lo spazio a disposizione nell'unità C: non è cambiato, questo perchè in realtà è stata aumentata la capacità del disco e non la dimensione della partizione.

Per aumentare la partizione avremo bisogno di un sistema operativo che supporti tale opzione, sempre attenti al discorso di contiguità, o di un programma di terze parti come per vmware.

Piccola nota: non dimentichiamoci che in caso di contiguità delle partizioni noi stiamo usando Hyper-V e quindi abbiamo un server 2008 almeno, nel caso la partizione da espandere sia contigua allo spazio non partizionato possiamo espanderla mediante il server di host, vediamo come fare.

Per prima cosa dobbiamo avviare Powershell come amministratore (Esegui come amministratore) altrimenti tutti i comandi non verranno interpretati in maniera corretta.

Dopo dobbiamo richiamare il servizio, per farlo scriviamo in powershell:

    $VHDService = get-wmiobject -class Msvm_ImageManagementService -namespace root\virtualization -computername .

Non dobbiamo modificare nulla in questo comando in quanto invocherà il servizio di gestione delle immagini (le immagini dei dischi sono appunto in formato vhd) sul computer locale (ecco perché dovrete indicare il computer .).

Ora dobbiamo dirgli al servizio che abbiamo invocato prima di montare il disco che ci interessa, utilizziamo questo comando sempre da powershell:

    $Result = $VHDService.Mount()

In questo comando invece dovrete inserire il percorso al vostro file vhd ad esempio C:\Macchine Virtuali\Macchina 1\Virtual HD\OsMacchina1.vhd ricordandoci di usare le virgolette nel caso nel nome ci siano degli spazi, quindi per esempio dovremo scrivere:

    $Result = $VHDService.Mount("C:\Macchine Virtuali\Macchina 1\Virtual HD\OsMacchina1.vhd")

e premere invio.

Ora come per magia il disco apparirà nella console di gestione dischi come se fosse un hard disk fisico, dobbiamo però portarlo online infatti verrà montato nello stato offline. Infine possiamo fare click destro sulla partizione attiva e selezionare Espandi e impostare le dimensioni desiderate tramite l'interfaccia grafica che apparirà.

Finito il processo potremo smontare il file vhd semplicemente digitando ancora da powershell:

    $Result = $VHDService.UnMount()

Come prima dovremo sostituire nel comando il percorso al file vhd, quindi riferendoci all’esempio di prima dovremo digitare:

    $Result = $VHDService.UnMount("C:\Macchine Virtuali\Macchina 1\Virtual HD\OsMacchina1.vhd")

In alternativa possiamo anche impostare la variabile $VHDName da powershell nel caso dobbiamo espandere più vhd:

    $VHDName = "percorso al file vhd"

Sempre nel nostro esempio:

    $VHDName = "C:\Macchine Virtuali\Macchina 1\Virtual HD\OsMacchina1.vhd"

e quindi sostituire nei comandi precedenti di montaggio e smontaggio il percorso al nostro file vhd con $VHDName.

Ad esempio per montare un file vhd dovremo scrivere:

    $Result = $VHDService.Mount($VHDName)

In questo modo se avremo bisogno di eseguire l'espansione su un altro disco ci basterà ridigitare in powershell il comando:

    $VHDName = "percorso all’altro file vhd"

e rieseguire il mount con $VHDName come parametro.