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
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
Risposte:
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
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.
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.
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.
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.
Il comando per deframmentare un filesystem btrfs è
btrfs filesystem defragment sync -r -v -f [-czlib] / /home
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>