Skip to main content

Ridurre la dimensione dei dischi VHDX in modo facile e gratuito

Spesso capita di aver a che fare, in ambiente Microsoft, con grossi files VHDX che richiedono terabyte di spazio, mentre in realtà i dati occupati sono di pochi giga. Sarebbe fantastico riuscire a ridurre il peso di questi files a quello effettivamente usato, in modo da risparmiare spazio, anche solo per il backup. Questa cosa, che spesso si verifica poichè si è migrati "dal ferro al virtuale" , richiede tools di terze parti che il più delle volte sono a pagamento... oppure si può ricorrere alla linea di comando tramite PowerShell.

Questa tecnica, oltre ad essere completamente gratuita, effettua le operazioni in modo decisamente più rapido, permettendo di svolgere lo stesso lavoro in circa la metà del tempo necessario. Ci sono una serie di passaggi da effettuare, li descriveremo di seguito in modo da permettere a chi ci legge di replicarli con facilità.

A) Spegni la Virtual Machine da Hyper-V (o altro sistema) e prima di operare assicurati che l'operazione di spegnimento sia conclusa;

B) Da Poweshell, con il comando mount-vhd , usa questi parametri:

mount-vhd percorso\nomedeldrive.vhdx -passthru | get-disk | get-partition | get-volume

ovviamente dove è scritto percorso\nomedeldrive.vhdx sostituisci con i tuoi valori, ad esempio D:\cartella\driveC.vhdx La funzione di questo comando è quella di fornire le informazioni delle partizioni contenute nel file VHDX. Apparirà anche la partizione di avvio, quella va lasciata com'è, non ridimensionatela. Verranno quindi mostrate le lettere che identificano le partizioni e la quantità di spazio che può essere ridotto.

C )  La riduzione vera e propria della partizione comincia ora, con il comando resize-partition, in modo da ridurre la partizione al valore che vogliamo. Nel mio caso il disco si chiamava F e volevo ridurlo alla dimensione di 120 Giga. Ecco il comando:

resize-partition –driveletter F -size 120GB

L' opzione -driveletter si riferisce alla lettera che identifica il disco (quella che viene mostrata con il primo comando) , mentre –size è nei fatti la dimensione a cui noi vorremmo faremo arrivare la partizione. L'operazione ci metterà parecchio, dipende molto dal tipo di supporto su cui stiamo agendo (SSD o Disco standard) e dalla dimensione complessiva del file di partenza.

D ) Ad operazione conclusa va smontato il disco dal sistema operativo che regge le macchine virtuali con il comando dismount-vhd aggiungendone il percorso:

dismount-vhd percorso\nomedeldrive.vhdx

E ) Questo è l'ultimo passaggio, e serve a ridimensionare il file VHDX Eccolo con i parametri corretti: 

resize-vhd percorso\nomedeldrive.vhdx -ToMinimumSize

In alcuni casi si potrebbe aver a che fare con il vecchio formato VHD, prima di utilizzare quanto descritto prima è necessario convertirlo in VHDX m lo si può fare anche direttamente dai Tools grafici nel gestore di Hyper-V , ma visto che stiamo usando la linea di comando da PowerShell, ecco il comando da impartire:

Convert-VHD percorso\nomedeldrive.vhdx percorso\nomedeldrive.vhdx

Abbiamo eseguito questa procedura con successo su Server Fisico con Windows Server 2022 che ospita una conversione "a ferro" di se stesso quando era un Domain controller di Dominio. Certo, non è consigliabile effettuare il passaggio a virtuale di un DC, ma in questo caso avevamo a disposizione un DC morto che doveva per forza risorgere sullo stesso hardware, ma in forma virtualizzata....
Lo so, la vita è strana.... 

Alcune considerazioni.

Quando si riduce una partizione, alcuni file (ad esempio, il file di paging o l'area di archiviazione della copia shadow) non possono essere riposizionati automaticamente e non è possibile ridurre lo spazio allocato oltre il punto in cui si trovano i file non spostabili. Se l'operazione di compattazione non riesce, controllare il registro dell'applicazione per l'evento 259, che identificherà il file non spostabile. Se si conosce il cluster o i cluster associati al file che impedisce l'operazione di compattazione, è anche possibile utilizzare il comando fsutil al prompt dei comandi. Quando si fornisce il parametro querycluster, l'output del comando identificherà il file non spostabile che impedisce la riuscita dell'operazione di compattazione.

In alcuni casi, puoi riposizionare temporaneamente il file. Ad esempio, se il file non rimovibile è il file di paging, è possibile utilizzare il Pannello di controllo per spostarlo su un altro disco, ridurre il volume e quindi spostare nuovamente il file di paging sul disco.


Se il numero di cluster danneggiati rilevati dalla rimappatura dinamica dei cluster danneggiati è troppo elevato, non è possibile ridurre la partizione. In questo caso, dovresti considerare di spostare i dati e sostituire il disco.

Non utilizzare una copia a livello di blocco per trasferire i dati. Questo copierà anche la tabella dei settori danneggiati e il nuovo disco tratterà gli stessi settori come danneggiati anche se sono normali. È possibile ridurre le partizioni primarie e le unità logiche su partizioni non elaborate (quelle prive di file system) o partizioni utilizzando il file system NTFS.