Perché ext2 e i successori non necessitano di deframmentazione?


Risposte:


9

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 ( mballocmenzionato nella risposta di MMK) di fare un lavoro migliore nel trovare un'area di spazio libero di dimensioni adeguate per mettere il file.


Tieni presente che questa è davvero solo una funzionalità del driver ext4 . Ora, non so se molto tecnicamente parlando che non potrebbe montare i vecchi fs con tale opzione (almeno parzialmente ). Ancora adesso DELALLOC è contrassegnato come solo ext4 .
mirh

8

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)


6

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.


In realtà esiste un'utilità e2defrag e può essere necessaria (su dischi piuttosto pieni con molti file scritti casualmente). L'allocatore ritardato di ext4 lo rende ancora meno probabile. Ma anche ext2 aveva una sorta di allocazione / scrittura ritardata, il che rendeva meno necessario eseguire un'utilità di deframmentazione rispetto all'allocatore primitivo di MS-DOS®.
mirabilos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.