Btrfs comprime automaticamente i file esistenti quando la compressione è abilitata?


26

Ho scelto btrfs come formato del mio /filesystem nel programma di installazione di Ubuntu 12.04 LTS. Al termine dell'installazione, ho aggiunto compress=lzole opzioni di montaggio /etc/fstabe riavviato.

I file esistenti verranno compressi automaticamente ora o devo fare esplicitamente qualcosa per far sì che ciò accada?


1
Non è necessario riavviare, è possibile sudo mount -o remount /e le nuove opzioni fstab avranno effetto.
sep332

NB potrebbe essere necessario utilizzare l'opzione compress-force o alcuni file rimarranno non compressi, qualunque cosa tu faccia ...
rogerdpack

Una nota relativa alla compressione-forza. La compressione normale ha una caratteristica in quanto se rileva che la compressione ha poco o nessun beneficio, non si preoccupa di continuare la compressione per quel particolare file (risparmiando così CPU sprecate). Usando la compressione-forza, tenta comunque una compressione inutile. Buoni esempi in cui ciò si applica sono per i file che sono già compressi (file multimediali, file zip, ecc.). In altre parole, la compressione-forza è generalmente una cattiva idea. ;)
zaTricky,

Risposte:


27

Dovrai correre btrfs fi defragmentper forzare la ricompressione dei dati esistenti. In caso contrario, verranno compressi solo i nuovi dati.

Dalle FAQ :

... considera la possibilità di rimontarlo -o compresse riscrivere determinati file sul posto oppure eseguire btrfs fi defragmentper ricomprimere tutto. Questo potrebbe richiedere del tempo.


btrfs fi deframment -r -clzo / path / to / fs
David Goodwin

2
Che dire autodefragdell'opzione mount? Ciò lo rende anche comprimere i file precedentemente non compressi quando si deframmenta automaticamente?
Geremia,

1
Assicurati di usare "-r" il flag ricorsivo per comprimere all'interno delle directory.
Salame

10

Ho fatto quello che ha detto Norbert Fabritius, ma non ho notato alcuna compressione nei file esistenti - df -h / before btrfs fi defragment = 658MB | df -h / after btrfs fi deframment = 658 MB. I nuovi file sono ok. Cercando un po 'portami questa citazione:

Eseguendo questo:

# btrfs filesystem defragment ~/stuff

non deframmenta il contenuto della directory.

Questo è di progettazione. btrfs fi defrag opera sul singolo oggetto filesystem passato a> esso. Ciò significa che il comando deframmenta solo i metadati contenuti nella directory> oggetto e non il contenuto della directory. Se vuoi deframmentare il contenuto della directory, qualcosa di simile sarebbe più utile:

# find -xdev -type f -exec btrfs fi defrag '{}' \;

Dopodiché, il mio / sta supportando 656 MB - niente di enorme, ma sicuramente c'è compressione.

Fonte: https://btrfs.wiki.kernel.org/index.php/Problem_FAQ#Defragmenting_a_directory_doesn.27t_work

Spero che questo aiuto.

Scusa per il mio inglese.


1
1. Quando si utilizza btrfs, non usare o fidarsi di df . 2. Per un miglior rapporto di compressione, utilizzare zlib (tuttavia, è più lento)
ignis

3
La riga di comando non dovrebbe includere defrag -clzoo defrag -czlibanziché solo defrag, se si desidera comprimere effettivamente le cose?
jbo5112,

5
C'è una bandiera ricorsiva "-r" quindi puoi farlo subito:btrfs fi defrag -r -czlib ~/stuff
Salame

8

Secondo la documentazione di Oracle, è possibile comprimere i file esistenti su un file system online esistente deframmentando ogni file in esso con le opzioni -c, -clzo o -czlib. LZO è raccomandato per la velocità.

find / -xdev \( -type f -o -type d \) -exec btrfs filesystem defragment -v -clzo -- {} +

Questo usa il comando find per eseguire la deframmentazione di btrfs su ogni file nel filesystem di root (dato dalla barra subito dopo il comando "find" all'inizio). Se hai altri sottovolumi, puoi usarlo di nuovo con il percorso di un sottovolume (ne ho uno a / home, ad esempio) invece della singola barra.

Per questo avrai bisogno dei privilegi di root, quindi aggiungi sudo in primo piano, se necessario.

Vedere:


3

Secondo https://btrfs.wiki.kernel.org/index.php/Mount_options#List_of_options sono disponibili i seguenti algoritmi di compressione:


compress,compress-force
Enable compression. Starting with kernel 2.6.38 you can choose the algorithm for compression:

 - compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
 - compress=lzo - Faster compression.
 - compress=no - Disables compression (starting with kernel 3.6). 

compress-force= - Enable compression even for files that don't compress well, like videos and dd images of disks. The options compress-force=zlib and compress-force=lzo works for kernels >2.6.38.

Note that old (before 2012) btrfs-progs versions will probably fail some operations (e.g. fsck) on filesystems with LZO compression. 

Nota: questo post è la risposta alla domanda aggiuntiva sul tipo di algoritmi di compressione disponibili che è stato chiesto di seguito ... quindi, per favore, non incolpare me.


2

Secondo ArchWiki :

Suggerimento: la compressione può anche essere abilitata per file senza usare l' compressopzione mount; basta applicare chattr +cal file. Se applicato alle directory, causerà la compressione automatica dei nuovi file non appena vengono.

Molto bella! Dio benedica BTRFS!

Inoltre, dal wiki di BTRFS :

Posso forzare la compressione di un file senza utilizzare l' impacco opzione di montaggio?

Sì. L'utilità chattrsupporta l'impostazione dell'attributo del file c che contrassegna l'inode per comprimere i nuovi dati scritti.


-9

La compressione è abilitata per impostazione predefinita in Btrfs, quindi a meno che tu non l'abbia disabilitata esplicitamente, dovrebbe essere compressa.


11
Non è vero, devi compression=abilitare "il tuo algoritmo di compressione preferito" in fstab per abilitarlo.
turbo,

@turbo Quali algoritmi di compressione sono disponibili?
Ripristina Monica - ζ--

sembra che al momento ci siano 2 compressioni consentite (beh, 3 se contate "nessuna"): btrfs.wiki.kernel.org/index.php/…
rogerdpack
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.