martedì 30 ottobre 2007

VirtualBox: compattare dischi virtuali ad espansione dinamica - guest Linux (3a parte)

Aggiornamento: attualmente per compattare file VDI è più semplice e ricco di opzioni l'uso di CloneVDI. ____________________________________________________________________

Ok, ripreso fiato? Bene, ora fate un altro bel respiro profondo. Se la 2a parte del post era faticosina, questa che è interamente da linea di comando lo è ancora di più. Ma siamo finalmente in dirittura d'arrivo, non vorrete fermarvi proprio adesso che siete ad un passo dal compattare i dischi rigidi ad espansione dinamica anche su guest Linux, vero? Su, forza, iniziamo. ;-)

Avete ancora la shell aperta? No? Riapritela, e preparatevi: porteremo Linux in modalità monoutente. Quasi che fosse un vecchio DOS, in modalità monoutente Linux non accetta più di un utente, è scollegato dalla rete, non ha interfaccia grafica, insomma, l'ideale per non avere rotture di scatole quando dobbiamo fare lavori di amministrazione molto profondi all'interno della macchina. Da shell date il comando

sudo telinit 1

che porterà la vostra macchina al runlevel 1. I runlevel in Linux specificano cosa deve essere in funzione e cosa no per ognuno di essi; portarsi a runlevel 1 permette appunto di rendere la macchina monoutente, tirar via tutto ciò che non serve per la sua amministrazione (interfaccia grafica, rete...) e lavorarci in tranquillità. Se tutto è andato bene, vi ritroverete in una schermata simile a quella di fig. 7. Date il comando

clear

per dare una bella ripulita allo schermo, e cominciate a guardarvi intorno: noterete, se guardate l'ultima lettera del prompt (#), che in questo momento siete amministratore della macchina.

Fig. 7 - Compattazione disco virtuale con zerofree - comandi per azzerare spazio libero
fig. 7

Ora date il comando:

df

Df permette di visualizzare dimensioni, spazio libero ed utilizzato di una data partizione, dato senza nessun argomento come sopra, ci mostra i dati di tutte le partizioni. In fig. 7 potete vedere il tipico risultato di un'installazione standard di Ubuntu.

La riga che ci interessa è la prima (la terza nello screenshot): nella prima colonna dice che esiste un dispositivo (/dev = device) che corrisponde al vostro disco rigido (/hda1), dopo un po' di dati sullo spazio occupato o meno, ci dice che è montato all'inizio del filesystem (estrema destra, la colonna “Montato su” e sotto “/”).

Non entro in ulteriori dettagli, vado al sodo: i dati che ci interessano sono la prima e l'ultima colonna, “/dev/hda1” e “/”. Quello che ora faremo è rimontare il vostro disco rigido in sola lettura, indispensabile per fare le operazioni che ci occorrono senza far danni. Date il comando:

mount -n -o remount,ro -t ext2 /dev/hda1 /

che tradotto significa: fai il mount, senza aggiornare il file mstab (-n), facendo il remount in sola lettura (remount,ro) come se fosse un filesystem di tipo EXT2 (-t ext2), del dispositivo /dev/hda1, rimontandolo in /, dove cioè si trovava all'inizio (l'ultima colonna del comando df, ricordate?). Per migliorare la leggibilità, in fig. 8 ho aggiunto io un riga vuota fra un comando e l'altro, se tutto va bene il comando in realtà non restituisce nulla. Ora date il comando:

fsck -f /dev/hda1

farete così un bel FileSystemChecK, un controllo approfondito del vostro disco, per assicurarvi che tutto è a posto. Se riscontrasse dei problemi e vi propone dei rimedi, accettateli, a meno di essere dei “filesystem guru” non riusciremmo a fare meglio di quanto propone. Quando ha terminato ed è tutto ok, date un bel

cd /root

per portarvi nella home dell'amministratore. Ricordate? E' lì che abbiamo messo zerofree: è arrivato il momento di usarlo. Prima però verifichiamo se tutto è posto sui permessi di esecuzione del file. Date il comando

ls -l

Se il risultato è qualcosa del tipo

-rw-r--r-- 1 root root

le cose NON sono a posto. Le lettere vanno lette a gruppi di tre a partire dal secondo carattere e significano che il file:

- ha attivi i permessi di lettura/scrittura (rw, read write) per l'utente root;
- ha attivo il permesso di lettura (r) per il gruppo root;
- ha attivo il permesso di lettura (r) per tutti gli altri.

Per tutti manca il permesso di esecuzione del file (sarebbe una x alla terza lettera di ogni gruppo di tre, invece c'è - che significa la sua assenza), aggiungetelo per tutti con il comando:

chmod +x zerofree

poi verificate che adesso sia tutto a posto con

ls -l

e dovreste avere qualcosa del tipo

-rwxr-xr-x 1 root root ...

con le x ad ogni terza lettera del gruppetto di tre. Bene, ora potete eseguirlo con il comando:

./zerofree /dev/hda1

Il comando dice a Linux di eseguire il programma zerofree cercandolo nella directory corrente (./) e di passare al programma il disco su cui agire (/dev/hda1). Sembrerà che non accada nulla ma in realtà il programma sta lavorando intensamente; guardate l'icona di attività dei dischi rigidi virtuali, in basso a destra sulla barra di stato della finestra di VirtualBox che contiene il guest, e ve ne accorgerete.

Quando zerofree avrà terminato il suo lavoro ricomparirà semplicemente il prompt: ridate il comando fsck -f /dev/hda1 per essere sicuri dell'integrità del disco rigido, infine spegnete la macchina virtuale con il comando:

halt

Sul guest è tutto.

Ora che le zone libere del disco rigido virtuale sono state segnate con valori zero da zerofree, sull'host non vi resta che dare il solito comando

“C:\Programmi\innotek VirtualBox\VBoxManage" modifyvdi “nomefile”.vdi compact

ed avete terminato del tutto (per maggiori informazioni sul comando, leggete la fase 4 della 1a parte del post). Ricordate che i doppi apici che racchiudono nomefile servono solo se nomefile contiene degli spazi, altrimenti potete ometterli.

Anche per questa volta abbiamo finito. Per questa volta! Infatti nel prossimo post sull'argomento vedremo come fare tutto ciò per una distribuzione Mandriva e più in generale per una qualunque distribuzione Linux. Nei due post dedicati ad Ubuntu infatti, ho tirato via dritto sulle eventuali difficoltà incontrate indicandovi preventivamente cosa fare per evitarle.

Con Mandriva non faremo così: mi mostrerò quali sono i messaggi di errore che ho incontrato usando un'installazione di default della distribuzione, in fase di compilazione del programma zerofree per esempio, oppure i messaggi di fsck quando incontra un problema, e come farci guidare da questi alla ricerca della soluzione. Al prossimo post sull'argomento allora; a presto.

@:\>

4 commenti:

  1. Fatto tutto, seppur con qualche incertezza e difficoltà.

    I miei commenti:
    1) l'esecuzione di zerofree è risultata parecchio lunga (forse una decina di minuti): è normale?
    2) interessanti tutti i passaggi per compilare zerofree, ma da ignorante di linux mi viene spontaneo chiedere: non si può compilare zerofree una volta per tutte, e poi distribuirlo ad altri utenti o su altri PC? (ad esempio in rete, o come allegato di posta, o da un PC all'altro (anche virtuale) tramite memory stick?)
    3) il mio disco rigido si chiama /dev/sda1 anzichè /dev/hda1 (ci ho messo un bel po prima di accorgermi perhe il comando non andava!!!); perchè un nome diverso?

    RispondiElimina
  2. Ciao Michele! Perfetto, sono contento sia andato tutto bene. Nell'ordine:
    1) si, sono da considerarsi normali;
    2) il programma che hai ottenuto dalla compilazione è già pronto per essere usato così com'è su altri sistemi Linux, l'ho provato su Mandriva ed ha funzionato regolarmente;
    3) sarà argomento di uno dei futuri post dedicati a Linux, in due parole: la prima lettera del dispositivo indica se questo viene gestito come disco IDE (h), oppure SCSI (s).

    Buona festa di Ognissanti. :-)
    @:\>

    RispondiElimina
  3. Come fa zerofree a scrivere su un device montato in sola lettura?

    RispondiElimina
  4. Mi rispondo da solo.
    http://packages.ubuntu.com/intrepid/admin/zerofree

    Mi viene da pensare che anche il comando mkfs.ext3 quindi possa formattare una partizione montata in sola lettura.
    (Qua vado fuori tema).

    Post interessante.
    Mi chiedo se c'è un modo per ridimensionare i dischi NON dinamici...?

    RispondiElimina

L'autore del commento si assume la totale responsabilità del suo contenuto. Commenti ritenuti offensivi o non attinenti potranno essere cancellati.