La famiglia di filesystem ext2 / ext3 / ext4 non necessita di deframmentazione.
Quale disegno sottostante aiuta questo filesystem a non frammentarsi?
La famiglia di filesystem ext2 / ext3 / ext4 non necessita di deframmentazione.
Quale disegno sottostante aiuta questo filesystem a non frammentarsi?
Risposte:
Un modo in cui il file system ext4 tiene sotto controllo la frammentazione, è con il processo di allocazione ritardata (modalità di allocazione predefinita di ext4).
L'allocazione ritardata funziona rinviando la mappatura dei blocchi di dati di file appena scritti sui blocchi del disco nel file system fino al tempo di riscrittura.
Questo funziona allocando la maggior parte dei blocchi per un file contemporaneamente, quando è noto il numero totale di blocchi (o almeno un ballpark) in ciascun file. Ciò consente all'allocatore di blocchi ( mballoc
menzionato nella risposta di MMK) di fare un lavoro migliore nel trovare un'area di spazio libero di dimensioni adeguate per mettere il file.
Nel file system ext3, esiste un allocatore di blocchi per il disco per ciascun blocco, quindi è possibile che si verifichi la frammentazione.
Tuttavia, nel file system ext4 esiste un allocatore multi-blocco che può ritardare la scrittura di blocchi su disco, in modo che possa allocare più blocchi contemporaneamente in un singolo blocco di disco per consentire una scrittura contigua - e così, è meno probabile che possa verificarsi la frammentazione (è ancora possibile, solo meno probabile)
Almeno per Ext2 (ed Ext3 penso, sebbene ne sia meno sicuro), non c'è nulla nel formato / struttura su disco che possa impedire la deframmentazione.
La mancanza di necessità di deframmentazione risiederà a livello di implementazione, che varierà da SO a SO. Cioè, a seconda dell'implementazione, un file in Ext2 può essere frammentato o meno.
Se si evita la frammentazione, ciò sarà probabilmente dovuto all'assegnazione ritardata di blocchi fisici. Cioè, a un certo livello dell'implementazione, il file system memorizzerà nella cache i dati (e accederà tramite il numero di blocco logico) fino a quando non viene scritto / eseguito il commit su disco. Quando i dati vengono infine scritti su disco, è necessario allocare blocchi fisici. L'algoritmo di allocazione può (o non può) allocare un numero di blocchi fisici disponibili contigui per i dati.
Spero che sia di aiuto.