Deframmentazione Btrfs di file / cartelle


9

Ho appena installato Ubuntu 11.10 sul filesystem Btrfs e voglio fare una domanda sulla deframmentazione dei file.

Devo davvero deframmentare i file o l'intero sistema?

Deframmenta # btrfs deframment filesystem / pool1 Deframmenta

Deframmentazione Btrfs


No, btrs, ext4,3,2, ETC ... non richiedono di deframmentare le unità, ne soffrono come qualsiasi altro filesystem.
Uri Herrera,

Ma da nessuna parte è uguale a NTFS.
Uri Herrera,

Risposte:


13

Non è necessario deframmentare manualmente i filesystem Btrfs.

Sì, Btrfs è COW (copia su scrittura), il che implica che frammenta i file molto più di Ext, ma questo è affrontato in diversi aspetti del design, inclusa la possibilità di deframmentare facilmente il filesystem mentre è online. Questo estratto fornisce maggiori dettagli (enfasi sulla mia):

Deframmentazione automatica

I filesystem COW (copy-on-write) presentano molti vantaggi, ma presentano anche alcuni svantaggi, ad esempio la frammentazione. Btrfs espone i dati in sequenza quando i file vengono scritti sul disco per la prima volta, ma un progetto COW implica che qualsiasi modifica successiva al file non deve essere scritta sopra i vecchi dati, ma essere inserita in un blocco libero, che verrà causare frammentazione (i database RPM sono un caso comune di questo problema). Inoltre, soffre dei problemi di frammentazione comuni a tutti i filesystem.

Btrfs offre già alternative per combattere questo problema: in primo luogo, supporta la deframmentazione online usando il comando btrfs filesystem defragment. In secondo luogo, ha un'opzione di montaggio -o nodatacow, che disabilita COW per i dati. Ora btrfs aggiunge una terza opzione, l' -o autodefragopzione mount. Questo meccanismo rileva piccole scritture casuali nei file e le mette in coda per un processo di deframmentazione automatica, quindi il filesystem si deframmenterà mentre viene utilizzato. Non è ancora adatto alla virtualizzazione o ai carichi di lavoro di grandi database, ma funziona bene per file più piccoli come database rpm, SQLite o bdb.

Quindi, fintanto che non si prevede di eseguire software ad alta intensità di I / O come un database sotto carico significativo, si dovrebbe essere tutti bravi, purché si montino i filesystem con l' autodefragopzione.

Per verificare la frammentazione dei file, è possibile utilizzare l' utilità filefrag :

$ find /path -type f -exec filefrag {} + >frag.list
# Now you can use your favourite tools to sort the data

Sui sistemi Systemd, /var/log/journal/sarà probabilmente il più frammentato. Puoi anche guardare ~/.mozillae altri database dei browser.

Per deframmentare, utilizzare:

$ sudo btrfs fi defrag -r /path

come faccio a sapere se si esegue la deframmentazione ... oppure no ... per controllare lo stato della deframmentazione
One Zero

2
Questa risposta è sbagliata come nel wiki di BTRFS: btrfs gotchas . Il problema della frammentazione dei file può essere facilmente riprodotto eseguendo systemd-journald su un volume btrfs. Anche se non ho ancora testato inhowfar l'opzione autodefrag risolve questo problema.
Jonas Schäfer,

Sto usando btrfs a tempo pieno ormai da almeno 18 mesi, con systemd, firefox, ecc. Un rapido controllo usando filefragrivela che i file journal sono effettivamente fortemente frammentati (con una media di 10k estensioni ciascuno), ma non ho osservato spiking della CPU né impatto sulle prestazioni. Non ho autodefragacceso, lo abiliterò e riporterò al prossimo riavvio.
Félix Saparelli,

Quindi: la frammentazione dei file si verifica, autodefragaiuta, l'impatto delle prestazioni è minimo nella migliore delle ipotesi sui sistemi di tutti i giorni. Ovviamente i server pesanti potrebbero aver bisogno di misurare e mettere a punto le cose, ma anche in questo caso si tratta di un software alfa, quindi potresti volerlo evitare comunque.
Félix Saparelli,

find /path -type f -exec filefrag {} + >frag.listevita tutti gli FIBMAP unsupportederrori delle directory e di altri file non regolari e non si spezza su nomi di file strani.
Peter Cordes,

0

Per il bene di questo argomento, penso che sia meglio chiarire che:

Qualsiasi filesystem! = Utilità di recupero / gestione

Tieni presente che il filesystem riguarda l'organizzazione dei dati su un hardware fisico, ogni altra attività viene svolta con software e utilità extra che, specialmente in GNU / linux, sono eseguiti da persone che probabilmente non sono strettamente correlate a chi aveva creato il filesystem.

Questo probabilmente non è il caso di Btrfs, ma a volte siamo vicini a questo perché gli ambienti desktop e aziendali possono fornire soluzioni diverse con diversi gradi di affidabilità.

La risposta alla tua domanda è "no" ma è un "no" correlato al normale comportamento di un file system generico e ogni utilità che puoi trovare su questo è semplicemente un progetto diverso.

Quando devi deframmentare il tuo filesystem, tieni presente che utilizzerai un software esterno che non è realmente correlato alla vita del filesystem stesso, con tutti i pro e i contro.


0

Il comando per deframmentare un filesystem btrfs è

btrfs filesystem defragment sync -r -v -f [-czlib] / /home

0

Sulla base di questa risposta mi è venuta in mente:

sudo find / -xdev -type f -exec filefrag {} + | sed -En 's/(.+): (\w+) extent.*/\2 \1/p' | sort -nr

Questo elenca prima i file più frammentati, con il formato:

<num-fragments> <pathname>
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.