Possiedo ed utilizzo un Mac da molti anni (dal 2009 esattamente) ma per lavoro ho bisogno assolutamente anche di utilizzare Windows.
Come molti che si trovano nella mia stessa situazione, penso per esempio a chi deve gestire un’attività con i software che spesso “girano” solo con Windows o per chi lavora nel campo dell’IT dove gestire PC e server Windows è vitale, spesso ci si trova spaesati.
Ho usato per molti anni bootcamp (il dual boot di casa Apple) ma alla fine mi sono reso conto che era molto scomodo da usare (continui riavvii del sistema).
Alla fine mi sono deciso, visto che sul lavoro ormai erano anni che virtualizzavo tutto e gestivo server e client virtualizzati, ho deciso di virtualizzare il sistema made in Redmond in una bellissima VM con Virtualbox (gratuita opensource).
Tutto ok, il VDI è comodissimo pure da trasportare e backuppare (altrimenti mi ci vuole una giornata a reinstallare tutti i tools di sviluppo in Windows…).
Il problema è che nonostante gli Snapshot (istantanee del sistema) giorno per giorno aumentano le dimensioni dell’immagine VDI
Dopo poco ci si trova da 10GB circa “reali” dell’installazione iniziale ad oltre 40GB.
VMWare è dotata già di un tool molto efficace per la compattazione del “pacchetto” virtuale VMDK, Virtualbox per contro deve essere un poco aiutato.
Il problema
Quando liberiamo spazio sul disco rigido virtuale, il corrispondente file vdi che lo contiene sull’host non si ridimensiona di conseguenza: occorre forzarne il ridimensionamento con un apposito comando, modifyvdi, disponibile solamente dalla console a linea di comando dell’host attraverso il gestore di comandi di VirtualBox, VboxManage.
Purtroppo però ciò non è sufficiente, occorre che sia soddisfatto un pre-requisito: lo spazio libero sul guest deve essere marcato a zero (il valore, non la cifra) prima che il comando possa agire su di esso compattandolo. Questo perché quando cancellate un file, questi non viene realmente cancellato: semplicemente lo spazio che occupa viene dichiarato libero in una apposita tabella, in questo modo lo si può riutilizzare per scriverci nuovi file.
I settori del disco rigido quindi, contengono ancora i dati, ed è per questo che il comando modifyvdi non riesce a fare il suo lavoro: può infatti agire solo su spazio realmente vuoto e non su quello dichiarato semplicemente come tale. Occorre un programma che svuoti per davvero lo spazio dichiarato libero. Innotek a dire il vero qui è stata un po’ latitante, tant’è che VirtualBox a differenza di prodotti analoghi, non ha uno strumento per marcare a zero i settori liberi del disco rigido virtuale.
Per ora vediamo la soluzione a questo problema e la successiva compattazione del file vdi per guest Windows. La soluzione sotto indicata è stata analizzata e provata direttamente da me ed anche consigliata da molti siti che hanno illustrato la stessa identica procedura.
Compattare il disco : defrag
Come prima operazione bisogna eseguire un bel defrag sul disco del guest: in questo modo i dati saranno “compattati” e lo spazio libero reso contiguo. Non servono utility speciali, quella predefinita di Windows può bastare.
Pulire lo spazio vuoto : sdelete
Risolviamo il problema zero: in aiuto ci viene , un programma di Mark Russinovich di . La sua funzione (tra le altre) è proprio quella di scrivere a zero i settori non utilizzati di un qualunque disco, compresi quelli virtuali di VirtualBox. Scaricate lo zip dall’indirizzo linkato direttamente dal guest, oppure dall’host in una cartella condivisa, così da renderla immediatamente disponibile anche al guest.
Scompattate il file nel guest, è lì che lo dovremo usare: quello che ci interessa è l’eseguibile sdelete.exe, utilizzabile solo da linea di comando in quanto privo di front-end grafico.
Io ho scompattato il file in c:\windows così è eseguibile direttamente da linea di comando senza specificare il path. Aprite la finestra del DOS con: pulsante start –> Esegui –> scrivete cmd e date invio. Nella finestra DOS che si apre, date questo comando:
sdelete.exe -c C:
Vediamo la sintassi :
- -c è un flag che dice a SDelete di mettere tutti zero nei settori liberi del disco rigido virtuale;
- C: è il disco su cui agire.
Quando SDelete termina il suo lavoro, all’interno della finestra DOS sarà comparso un messaggio del tipo: Free space cleaned on C: .
Ora spegnete la macchina guest.
Compattare il file VDI : VBoxManage
E’ arrivato finalmente il momento di compattare il file vdi sull’host: ora è possibile perché la precondizione che lo spazio libero sul disco rigido virtuale fosse marcata a zero è soddisfatta. Seguendo gli stessi passi fatti nella macchina guest, aprite una finestra DOS anche sull’host. Al suo interno date questo comando, doppi apici compresi:
“C:\Programmi\innotek VirtualBox\VBoxManage” modifyvdi “nomefile”.vdi compact
oppure se l’host è Linux aprite una shell e digitate :
/usr/bin/VBoxManage modifyvdi “nomefile”.vdi compact
Mentre il comando fa il suo lavoro vi spiego anche qui la sintassi:
- intanto i doppi apici anche qui servono ove ci siano spazi vuoti. Normalmente la linea di comando interpreta gli spazi vuoti come la fine di qualcosa; se non mettiamo i doppi apici, C:\Programmi\innotek VirtualBox\VBoxManage non viene interpretata come una cosa unica ma viene presa solo la prima parte, cioè C:\Programmi\innotek e li si ferma dando errore.
- stessa cosa con il nome del file vdi (e mi raccomando, solo il nome, l’estensione .vdi NON deve essere compresa nei doppi apici). I doppi apici vanno messi solo se il nome del file vdi presenta spazi al suo interno;
- VBoxManage è il comando che lancia il manager a linea di comando di VirtualBox, serve a dare da linea di comando tutti i comandi che normalmente date dall’interfaccia grafica, e altri che l’interfaccia grafica non implementa ancora ma sono comunque disponibili da linea di comando;
- modifyvdi è il comando impartito a VBoxManage, gli dice che volete modificare il file nomefile.vdi;
- compact dice che la modifica che volete effettuare sul file vdi è la sua compattazione.
Terminata questa fase dovreste trovare il vostro VDI diminuito notevolmente di dimensione, in linea con la quantità di spazio occupato che vedete dall’interno del guest Windows.