_________________________________________________________________________
Nel prologo sull'argomento, abbiamo inquadrato 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.
In questo post, realizzato con il contributo di Michele Benvegnù, vediamo la soluzione a questo problema e la successiva compattazione del file vdi per guest Windows; nel prossimo post sull'argomento vedremo il tutto per guest Linux.
Si chiama SDelete ed è un programma di Mark Russinovich di Sysinternals. 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 web
http://www.microsoft.com/technet/sysinternals/FileAndDisk/SDelete.mspx
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, un programma utilizzabile solo da linea di comando in quanto privo di front-end grafico.
Vediamo gli screenshot della situazione iniziale così da poter poi apprezzare anche visivamente le differenze. In fig. 1 vedete la situazione dello spazio sul guest.
fig. 1
Con un disco rigido di capacità massima di 20 GB, vi ho copiato sopra 4 GB di file tramite condivisione cartelle: ho copiato 6 volte con 6 nomi diversi la iso d'installazione di Ubuntu:
700 MB x 6 = ~ 4 GB
che sommati ai circa 1-1,2 GB dell'installazione di Windows, fanno circa 5,2 GB occupati di spazio disco occupato. Ed infatti lo spazio libero sul disco del guest è:
20 GB - 5,2 GB = 14,8 GB
Il file vdi sull'host (fig. 2) è appunto di circa 5,8 GB, quanto serve a contenere tutto il disco rigido virtuale.
fig. 2
Ora elimino (non cestino, ma elimino definitivamente, anche dal cestino) i sei file di Ubuntu nel guest, in fig. 3 la nuova situazione dello spazio sul guest.
fig. 3
Sono stati liberati i 4 GB e passa, quindi:
14,8 GB liberi + oltre 4 GB liberati = 18,9 GB liberi
Andate a controllare la situazione sull'host: come ci aspettavamo, non è cambiato nulla, il file vdi non si è ridimensionato di conseguenza e invece di scendere a soli 1-1,2 GB e rimasto di 5 e passa giga.
Ok, è il momento di far intervenire SDelete.
Aprite la finestra del DOS con: pulsante start --> Esegui --> scrivete cmd e date invio. Nella finestra DOS che si apre, date questo comando doppi apici compresi:
“C:\Documents and Settings\utente1\Desktop\sdelete.exe” -c C:
Nel frattempo il comando porta a termine il suo compito (fig. 4), potranno servire anche una decina di minuti a seconda del sistema che avete, vi spiego la sua sintassi:
- C:\Documents and Settings\utente1\Desktop\ è il percorso dove si trova SDelete, l'avevo messo sul Desktop del guest, sostituitelo con il percorso della cartella in cui avete messo SDelete sul vostro sistema guest;
- i doppi apici servono a causa dello spazio in Documents and Settings, se nel percorso della vostra cartella non vi sono spazi, potete ometterli;
- c è un flag che dice a SDelete di mettere tutti zero nei settori liberi del disco rigido virtuale;
- C: è il disco su cui agire.
fig. 4
Se nel frattempo SDelete ha terminato, all'interno della finestra DOS sarà comparso un messaggio del tipo:
Free space cleaned on C:
. Spegnete la macchina guest.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
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.
Nel frattempo la compattazione dovrebbe essere finita anche sul vostro sistema, in fig. 5 il risultato: come potete vedere, il file vdi è tornato all'incirca alle sue dimensioni iniziali.
fig 5
E se il sistema guest è Linux? I passi da fare sono i medesimi, lì vedremo nel prossimo post sull'argomento.
@:\> ... con il contributo di Michele Benvegnù (www.benvegnu.it)
salve ho provato a compattare un file *.vdi ma quando uso il comando "C:\Programmi\innotek VirtualBox\VBoxManage" modifyvdi “nomefile”.vdi compact sul sistema host nel cmd mi dice accesso negato.
RispondiEliminaHo anche provato ad avviare cmd da admin ma dice sempre accesso negato, come faccio??
saluti e grazie e complimenti per la guida
stacca momentaneamente il disco dall' elenco dei dischi divirtualbox
RispondiElimina