lunedì 1 ottobre 2007

VirtualBox: compattare dischi virtuali ad espansione dinamica - prologo


Quando create il disco rigido della vostra macchina virtuale, VirtualBox crea un file sull'host con un nome del tipo C:\Documents and Settings\VostroNomeUtente\.VirtualBox\Machines\NomeMacchinaVirtuale.vdi
Su di esso viene salvato tutto il contenuto del disco rigido della macchina virtuale; una cosa del genere l'abbiamo già vista nei post relativi all'installazione di Linux direttamente da Windows.

Oltre a supportare con alcune restrizioni il formato aperto VMDK, VirtualBox utilizza soprattutto il formato proprietario VDI, tramite cui può creare 2 tipi di dischi rigidi virtuali:

- a dimensione fissa;
- ad espansione dinamica.

Rivediamo rapidamente cosa sono: supponendo di aver creato un disco rigido virtuale di 10 GB, nel primo caso sul vostro host viene creato subito un file della stessa dimensione, 10 GB. Non è la cosa migliore quando abbiamo poco spazio perché non abbiamo ancora installato nulla e già abbiamo tanto spazio occupato; in compenso le prestazioni sono migliori perché non si perde tempo ad allocare ed eventualmente modificare le dimensioni del file vdi, lo si fa una volte per tutte all'inizio.

Nel secondo caso invece, nel sistema host viene creato un file che inizialmente è di piccole dimensioni, pochi KB, e che cresce man mano serve ulteriore spazio durante l'installazione del sistema operativo, degli applicativi, o comunque durante il normale uso del sistema virtualizzato.

Lo spazio disco sull'host in questo modo non viene sprecato, ne viene sempre allocato esattamente quanto ne serve in quel momento al disco rigido guest, ma le prestazioni sono, sia pur di poco, inferiori rispetto ai dischi rigidi virtuali a dimensione fissa proprio per via di questa ulteriore attività di allocazione al volo ogni volta che serve più spazio al sistema guest.

Questa soluzione però non è tanto dinamica quanto si potrebbe pensare:
quando cancelliamo dati dal disco rigido virtuale, il corrisponte file vdi sulla macchina host non si restringe, ma rimane della dimensione massima sino a quel momento raggiunta.

Facciamo un esempio per capirci: dopo avere installato un guest Windows (ma la cosa è analoga con guest Linux) con un Office e gli altri programmi che ci possono servire, dalle proprietà del disco rigido nel sistema guest ci accorgiamo che l'occupazione di spazio è 3 GB: il file vdi sull'host sarà all'incirca della stessa grandezza. Se scaricate 4 GB di file da Internet, o li copiate dall'host tramite la condivisione (un file ad esempio di 4 GB potrebbe essere la iso di una distribuzione Linux), nel disco rigido virtuale vedrete salire l'occupazione dello spazio a 7 GB, e così il file vdi.

Ora viene il bello (meglio dire, il brutto): se cancellate questo file e vuotate il cestino nel guest, l’occupazione di spazio nel guest torna a 3 GB, ma il file vdi sull'host rimane di 7 GB!

Per risolvere questo problema è necessario “compattare” il file vdi tramite il comando modifyvdi, disponibile solamente dalla console a linea di comando attraverso il gestore di comandi VboxManage di VirtualBox stesso.

Con il contributo di Michele Benvegnu, che già qui aveva raccolto un po' di idee e soluzioni, nel prossimo post sull'argomento vedremo concretamente come fare nel caso di guest Windows, nei successivi il caso di guest Linux.

@:\>

________________________________________________________________________

Aggiornamento: attualmente sia su Windows che Linux per la compattazione di file VDI è più semplice e ricco di opzioni l'uso di CloneVDI.