# Deframmentazione

In informatica la deframmentazione è un'operazione di ottimizzazione dell'archiviazione dei dati nella memoria di massa di un computer. Consiste nel ridurre la frammentazione esterna dei file presenti sulla memoria stessa (es: un disco fisso) ristrutturandone l'allocazione e facendo in modo che ciascun file risulti memorizzato in una zona contigua dal punto di vista fisico, permettendo così di ridurre drasticamente i tempi di accesso e lettura dei file. La deframmentazione è un'operazione che può essere svolta in modo automatico dal file system durante il suo regolare funzionamento oppure eseguita tramite esplicita richiesta dell'utente tramite l'esecuzione di un programma.

## Campo di applicazione

La deframmentazione può essere utilizzata solo per ridurre la frammentazione esterna. La frammentazione interna non può invece attualmente essere ridotta, a causa del metodo di utilizzo dei file system odierni. L'utilizzo della deframmentazione è essenziale per i file system che utilizzano una tecnica di allocazione file contigua, altrimenti a lungo andare non sarebbe possibile allocare nuovi file anche se ci fosse spazio sufficiente (ma frammentato) sul disco. Nell'allocazione a lista concatenata usata nei moderni file system la deframmentazione serve invece soltanto a velocizzare le operazioni di lettura/scrittura su disco.
Quando un file viene scritto su un hard disk, questo occupa il primo spazio libero (settore) disponibile, ed occupa tanti settori quanti ne servono per contenere l'intero file. Se però lo spazio contiguo è troppo piccolo rispetto alle dimensioni del file, il file viene suddiviso in uno o più pezzi non contigui. Alla fine di ogni catena di settori contigui, viene inserito un riferimento che rimanda al successivo settore che contiene la restante porzione del file, fino al raggiungimento della fine del file.
Un file, modificato in più occasioni, può aumentare di dimensione e quindi verrà sempre più suddiviso in "frammenti" per poter essere memorizzato nelle parti libere dell'hard disk. Reiterate azioni di questo tipo, anche se del tutto normali, portano ad una progressiva frammentazione dei file, con il risultato di rendere più lento il loro reperimento.
La gestione del file da parte del sistema operativo è trasparente per l'utente, ma l'hard disk è costretto a leggere in punti differenti della faccia del disco, saltando da un settore all'altro, per fornire il file completo, rallentando così le operazioni di input/output.

## Funzionamento

La deframmentazione ripristina la contiguità dei file rendendo più veloce la loro lettura in quanto il sistema operativo non deve cercare le parti del file sparse per l'hard disk. Il programma di deframmentazione sposta temporaneamente i cluster di uno stesso file in zone libere del disco; successivamente cerca (o libera spostando altri cluster) uno spazio contiguo che possa contenere completamente questo file. Questa operazione ha tempistiche lunghe, in quanto il sistema operativo oltre a dover copiare i file in un'altra posizione del disco, deve riaggiornare tutti i puntatori della lista di ogni file. Nell'allocazione contigua la deframmentazione consiste solamente nel ricompattare tutti i file, eliminando gli spazi vuoti tra essi. Anch'essa è un'operazione molto dispendiosa di tempo.

### Problematiche

La problematica maggiore dell'operazione di deframmentazione è la presenza di file che non possono essere spostati. Questi file sono file di paging e di swap, utilizzati dal sistema operativo per la gestione della RAM. Lo spostamento di questi file causerebbe la perdita dei riferimenti per il corretto funzionamento del sistema operativo. Inoltre, poiché il programma di deframmentazione non può spostare sé stesso né file utilizzati da altri programmi, esistono tool che deframmentano il disco rigido prima dell'avvio del sistema operativo, permettendo così la completa deframmentazione.

## Altre tecniche

Alcuni programmi specializzati forniscono la possibilità di effettuare vari tipi di deframmentazione a seconda delle esigenze dell'utente. La deframmentazione può essere effettuata al semplice fine di ricompattare i file frammentati (opzione utile per gli hdd di archivio) oppure per esempio per riordinare i file in ordine alfabetico oppure in base alla data e/o frequenza di accesso ai file. Quest'ultima opzione è molto utile per hdd che ospitano il sistema operativo e i programmi.

## Software

Per deframmentare un disco è possibile utilizzare Utilità di deframmentazione dischi (incluso in Windows), MyDefrag, Defraggler, Slimcleaner o UltraDefrag.