I file system Linux possono frammentare i file, ma questo non significa che serva intervenire di routine: conta il file system e conta il carico di lavoro. Se usi ext4, puoi prima valutare la situazione con e4defrag -c, che controlla i file senza deframmentarli.
La frammentazione si verifica quando le parti di un file finiscono in zone diverse del disco. Sui dischi meccanici, riunirle può ridurre gli spostamenti della testina; sapere che c’è frammentazione, però, non basta da solo a stabilire che la prestazione ne risenta.
Indice
- Perché i file system Linux possono frammentarsi
- Controllare ext4 senza modificare i file
- La funzione dipende dal file system
- HDD, SSD e TRIM
Perché i file system Linux possono frammentarsi
Linux non è immune dalla frammentazione. Il documento di progetto di ext2 descrive il precedente file system Ext come soggetto a frammentazione quando gli elenchi dei blocchi liberi e degli inode, cioè le strutture che tengono traccia dei file, perdevano ordine.
Con ext2, la gestione cambiò: il file system raggruppava dati e inode correlati e poteva preallocare fino a otto blocchi adiacenti. Il documento riporta un tasso di successo della preallocazione intorno al 75%, anche su file system molto pieni. Sono dettagli storici sul progetto di ext2, non misurazioni delle prestazioni attuali di ext4.
Controllare ext4 senza modificare i file
Per valutare un file, una directory o un punto di montaggio ext4, usa e4defrag -c seguito dal percorso interessato. Per esempio, il comando sudo e4defrag -c / controlla il file system montato sulla radice, se / si trova su ext4. L’opzione -c calcola un punteggio e non deframmenta il bersaglio.
Il codice di e4defrag assegna al punteggio queste etichette:
- 0–30: nessun problema;
- 31–55: frammentazione lieve;
- 56 o più: necessaria la deframmentazione, secondo la classificazione dello strumento.
Anche un punteggio pari a zero rientra nella fascia «nessun problema». Questi intervalli sono convenzioni di e4defrag, non percentuali, soglie valide per ogni file system o garanzie di un miglioramento delle prestazioni. Se decidi di intervenire, lo spazio libero insufficiente o frammentato può impedire di migliorare la situazione; inoltre, l’operazione può competere con le applicazioni attive per memoria e banda del disco.
Lo screencast di gotbletu mostra nel terminale il controllo di ext4 con e4defrag -c e l’uso del comando di deframmentazione.
La funzione dipende dal file system
Le opzioni cambiano da un file system all’altro: il controllo di ext4, la funzione automatica di Btrfs e gli strumenti per exFAT non sono intercambiabili.
| File system | Funzione disponibile in Linux | Condizione importante |
| ext4 | e4defrag -c valuta la frammentazione; e4defrag può deframmentare i file extent supportati. | Poco spazio libero, o spazio libero frammentato, può impedire di migliorare la situazione. |
| Btrfs | autodefrag mette in coda alcune piccole scritture casuali, nell’ordine di 64 KiB. | Può aumentare la latenza in lettura e potrebbe non essere adatto a carichi di lavoro con database di grandi dimensioni. |
| exFAT | defrag.exfat -a valuta la frammentazione; defrag.exfat avvia la deframmentazione. | Per deframmentare, il volume deve essere smontato. Il manuale raccomanda prima un controllo con fsck.exfat e un backup dei dati importanti. |
Su exFAT, quindi, la valutazione e l’intervento sono operazioni distinte: -a non modifica il volume, mentre per deframmentarlo occorre smontarlo. Per Btrfs, autodefrag gestisce scritture casuali piccole, ma la latenza in lettura e i carichi con grandi database rendono inappropriata una raccomandazione valida per ogni sistema.
HDD, SSD e TRIM
La motivazione tradizionale della deframmentazione riguarda soprattutto gli HDD: avvicinare i blocchi di un file può ridurre il movimento meccanico necessario per leggerli. Un SSD non ha una testina che si sposta tra le tracce, ma questo non rende la frammentazione impossibile né autorizza conclusioni universali su ogni operazione di manutenzione.
La deframmentazione dei file e TRIM/Discard sono operazioni distinte. Non vanno trattate come sinonimi: la presenza di una funzione per SSD non equivale a un comando che riordina i frammenti dei file.