I moderni file system utilizzati dai sistemi GNU/Linux godono di una buona reputazione poiché gestiscono i dischi in modo ottimale minimizzando la frammentazione dei file e il rischio della loro compromissione grazie all’uso del journaling. Si dice spesso che con Linux la frammentazione sia minima anche dopo diversi anni di utilizzo del disco fisso su cui è installato il sistema operativo. Questa affermazione mi ha sempre incuriosito poiché mi chiedevo come fosse possibile che dopo qualche anno i file non si frammentassero così come avviene con Windows il cui file system predefinito, NTFS, nonostante le sue buone qualità in alcuni frangenti, è noto per le scarse performance in ambito di allocazione ottimale dei file il che costringe a frequenti deframmentazioni del disco che alleviano la pena ma non la eliminano alla radice
Così, dopo qualche ricerca su google (GIYF) ho trovato un piccolo programmino scritto in perl che è in grado di calcolare la frammentazione dei file residenti su una particolare partizione o directory.
Questo script utilizza il semplice comando shell filefrag che conta il numero di frammenti di cui è composto un particolare file, e la cui sintassi è la seguente (richiede i permessi di root):
$ sudo filefrag percorsoDelFile
Utilizzando all’interno di un ciclo questo comando, il programma in perl è quindi in grado di calcolare i frammenti per ogni file e alla fine della sua scansione genera un piccolo report sulla frammentazione media del partizione su cui è stato lanciato. I crediti del codice vanno attribuiti interamente all’utente _droop_ e ai suoi contributori del forum di Gentoo.
Potete vedere il codice o direttamente sul forum (link) o su pastebin dove l’ho copiato per una migliore visualizzazione.
Per utilizzarlo dovete seguire questa semplice procedura:
- Copia/incolla del codice su vostro editor di fiducia
- salvate il file con un nome autoesplicativo, tipo frag.pl (occhio all’estensione pl)
- cambiate i permessi al file per renderlo eseguibile
$ chmod 750 frag.pl - lanciatelo con il comando (con i permessi di root)
$ sudo ./frag.pl parametro
ove parametro può essere una partizione del disco od una qualsiasi directory
Ad esempio se volete sapere lo stato di frammentazione della vostra partizione home lanciate
$ sudo ./frag.pl /home/paso/
Sulla mia linux-box, configurata con kubuntu 7.04 (aggiornata dalla 6.10) e con età della partizione home di circa 16 mesi ottengo questi risultati:
15.0071326676177% non contiguous files, 2.08228245363766 average fragments.
Analizziamo il risultato. 15.00% indica la percentuale dei file sulla partizione che sono frammentati (ovvero che non consistono in un solo blocco continuo, da cui il termine non contiguous), mentre 2.08 indica mediamente di quanti frammenti è composto un file.
Interpretazione: sebbene ad una prima occhiata il valore 15% sembra alto dobbiamo dare maggior peso al secondo numero, infatti esso ci dice che nella media i miei file sono frammentati in soli 2 blocchi. Il che, se ci pensate, è un valore estremamente basso! e tenete conto che nella mia partizione home c’è di tutto, compresi file di grosse dimensioni scaricati via torrent e via p2p! si vede proprio che ext3 spacca alla grande!
se lo eseguo sulla partizione di root i risultati sono ancora più sorprendenti (attenzione: l’operazione può richiedere qualche minuto, nel mio caso 3)
$ sudo ./frag.pl /
2.85402065471814% non contiguous files, 1.10098686651332 average fragments.
praticamente è come se nessun file fosse frammentato (la media è 1,1!) that’s incredible
Naturalmente se eseguito nella sola cartella contenente file scaricati da Internet, dai p2p e dai torrents troverete valori a dir poco imbarazzanti che per non scandalizzare il pubblico evito di pubblicare
Ora la domanda più spontanea è: come posso deframmentare le partizioni linux?
Cercherò di darvi una risposta in un prossimo post (con valore di prossimo compreso tra 1 ed ∞).



















Ti ricordo che la deframmentazione su Linux è sconsigliata.
si ne avevo già sentito parlare ma sinceramente non ne conosco le ragioni, anzi se hai qualche link o ne sai di più mi faresti un piacere se mi informassi.
Ad ogni modo quello che al momento ho trovato, ma che devo ancora mettere per iscritto, è una deframmentazione “particolare”. Infatti lo si può considerare quasi un trucchetto per ovviare al problema dei frammenti…
Appena trovo il tempo faccio il post
Ciao
Ma il “checking root filesystem” che di tanto in tanto si lancia prima dell’avvio del DE è necessario? Non so a voi, ma a me il checking parte ogni trenta/quaranta avvii del computer.
Si, solitamente di default è impostato il check ogni 30 mount. Si può cambiare il valore, ma ad ogni modo è meglio lasciarlo tranquillo, alla fine non ci impiega nemmeno tanto (sul mio pc con 2 dischi ci mette si e no 2 minuti).
Bye
[...] su Linux 25 01 2008 Nell’articolo di qualche giorno fa intitolato Frammentazione nei sistemi Linux, vi ho introdotto nell’argomento del file system dei sistemi operativi GNU/Linux, i quali [...]
Ciao il “checking root filesystem” è solo una misura cautelativa, non è necessario per un motivo molto banale: Ext3 è un filesystem dotato di journal (almeno in molte delle versioni attualmente disponibili), quindi il check è in grado di eseguirlo in automatico in caso di necessita senza schedularlo (come invece in molte distribuzioni viene fatto sul numero di riavvii, di solito 33).
L’esecuzione programmatica non porta grandi migliorie effettive sul sistema ma può prevenire situazioni di inconsistenza dei dati (che verrebbero comunque rilevate e gestite allo stesso modo nel momento in cui venissero riscontrate).
Dalla versione 9.10 di ubuntu con ext4 di default dovrebbe essere introdotto l’aggiornamento on line dei file
E qndi risolto ogni possibile problema di deframmentazione :-p