Btrfs

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Vytvoření souborového systému

Komprese

Kompresi lze u Btrfs využívat od jader verze 3.6 a vyšší.

Kompresi nelze používat, je-li Btrfs namountováno v režimu COW, nebo direct IO!

Data se komprimují průběžně a tak po uložení zaberou na disku fyzicky méně místa, než kdyby komprimována nebyla. Systém začne data komprimovat automaticky, je-li diskový oddíl, který používá Btrfs namountován s parametrem compress.

Poznámka
root@stroj:~# mount -t btrfs /dev/data/btrfs /mnt -o compress
root@stroj:~# mount | grep btrfs
/dev/mapper/data-btrfs on /mnt type btrfs (rw,relatime,compress=zlib,space_cache)

Výchozím kompresním algoritmem, který se použije je ZLIB. Ten sice dosahuje oproti alternativnímu LZO lepšího kompresního poměru, je však pomalejší a více zatěžuje procesor.

Místo něj lze tedy použít LZO, který je navržen pro kompresi v reálném čase, ovšem za cenu horšího kompresního poměru.

Poznámka
root@stroj:~# mount -t btrfs /dev/data/btrfs /mnt -o compress=lzo
root@stroj:~# mount | grep btrfs
/dev/mapper/data-btrfs on /mnt type btrfs (rw,relatime,compress=lzo,space_cache)

Výchozí úroveň komprese (3) lze zvýšit použitím parametr compress-force, ovšem za cenu zvýšení zátěže CPU.

Poznámka
root@stroj:~# mount -t btrfs /dev/data/btrfs /mnt -o compress-force=zlib
root@stroj:~# mount | grep btrfs
/dev/mapper/data-btrfs on /mnt type btrfs (rw,relatime,compress-force=zlib,space_cache)
Upozornění Špatný kompresní poměr může vznikat mimo jiné když CPU nestíhá data komprimovat v reálném čase. Btrfs v takovém případě začne data ukládat nekomprimovaná.

Jakým způsobem Btrfs aplikuje kompresi?

Btrfs neaplikuje kompresi přímo na soubory, ale na jednotlivé extenty. V rámci jednoho souborového systému se tak mohou vyskytovat jak nekomprimované extenty, tak extenty komprimované přes ZLIB, či LZO.

Poznámka Kompresní algoritmus nastavený při mountu se aplikuje pouze na nově vytvořené extenty.

Lze zjistit aktuální kompresní poměr?

Bohužel v současné době nelze přímo zjistit jaký je kompresní poměr uložených dat, neboť do nástroje btrfs prozatím není integrován patch, kterým lze zjistit kolik místa zabírají data zkomprimovaného souboru.

Lze komprimovat data dodatečně bez použití parametru compress?

Ano. U Btrfs lze data zkomprimovat dodatečně při defragmentaci. Pouze je třeba si uvědomit, že Btrfs nepracuje se stromovou strukturou, ale s objekty. Mají-li se tedy zkomprimovat všechny objekty (soubory a podadresáře), je třeba příkaz k defragmentaci aplikovat na každý zvlášť.

Poznámka
root@stroj:~# find /mnt -exec btrfs filesystem defrag -czlib '{}' \;
root@stroj:~# btrfs fi df /mnt
System: total=4.00MB, used=4.00KB
Data+Metadata: total=996.00MB, used=183.27MB
root@stroj:~# sync
root@stroj:~# btrfs fi df /mnt
System: total=4.00MB, used=4.00KB
Data+Metadata: total=996.00MB, used=165.39MB

Kdy komprese u Btrfs nemá smysl?

Komprese u Btrfs ztrácí smysl pokud komprimovaná data zabírají zhruba stejně jako nekomprimovaná. Typicky se jedná o data multimediálních souborů, nebo data uložená do malých komprimovaných archívů (např. rozdílové objekty u gitu!).

Naopak může být velmi výhodná je-li diskový oddíl s Btrfs použitý pro archivaci nekomprimovaných textových data.

Více k tématu viz odkazy[1]

Práce s btrfs

Snapshoty

Kontrola volného místa

Při použití btrfs příkaz df nemusí zobrazovat validní hodnotu. Je to z toho důvodu, že kromě dat jsou na disku uložená také metadata, která si vezmou své místo. Ke kontrole volného místa je proto lepší používat přímo administrační utilitu btrfs. Rozdíl je pěkně vidět na následujícím ukázkovém výpisu. Ačkoliv příkaz df uvádí volných 200GB, je ve skutečnosti volných 340GB.

Poznámka
stroj:~# df -h /mnt
Souborový systém       Velikost Užito Volno Uži% Připojeno do
/dev/mapper/data-sklad     3,7T  3,4T  200G  95% /mnt
stroj:~# btrfs fi show
Label: 'box'  uuid: 8c25587e-6680-4669-b04a-b34725068564
        Total devices 1 FS bytes used 3.30TB
        devid    1 size 3.64TB used 3.64TB path /dev/dm-0

Btrfs Btrfs v0.19

Dotazem přímo na připojený souborový systém je možné získat podrobnější výpis, který prozradí i kolik místa zabírají samotná data a kolik metadata

Poznámka
spike:~# btrfs fi df /mnt
Data: total=3.49TB, used=3.31TB
System, DUP: total=8.00MB, used=428.00KB
System: total=4.00MB, used=0.00
Metadata, DUP: total=74.75GB, used=5.00GB
Metadata: total=8.00MB, used=0.00

Reflink

Defragmentace

Defragmentace je proces, kdy se data jednoho souboru, rozdělená na více objektů rozházených po celém disku scelí do jednoho nového objektu.

Btrfs pracuje s on-line defragmentací. To znamená, že lze objekty defragmentovat za normálního provozu. Defragmentace se totiž v btrfs provádí de fakto automaticky, při každém kopírování či přesouvání souboru, neboť cílový objekt se vytváří z těch stávajících jako zbrusu nový, scelením objektů původních. Díky tomu jsou takové operace v btrfs bezpečnější než u jiných FS, protože původní objekty se odstraňují až poté co úspěšně vytvořen objekt nový.

I tak se ale může stát, že se vyskytnou defragmentované soubory. Obzvláště tehdy, je-li disk poměrně plný, protože k jednou vytvořeným objektům se už btrfs automaticky nevrací. Proto lze objekty deframentovat i dodatečně.

Každá položka souborového systému je samostatný objekt. Defragmentace adresáře v případě btrfs se tedy v žádném případě neaplikuje rekurzivně na objekty, které jsou jinak jeho součástí. Defragmentují se pouze metadata, která se týkají objektu který je defragmentován (adresář).

Rekurzivní defragmentaci lze provést s využitím utility find

Upozornění Přitom je třeba mít na vědomí, že při defragmentaci objektu, pro který v rámci btrfs existuje nějaká přírůstková kopie (COW) - typicky objekt, který je součástí snapshotu, dojde k jejich vzájemnému oddělení a vytvoření vzájemně nezávislých objektů. Tzn. že si data ukousnou další místo na disku!

Vyvážení - balance

Vyvažování (balance) je operace, která prostě vezme všechna data a metadata a přepíše je na jiné místo disku, s tím že je propasíruje přes alokační mechanismus. Tj. mechanismus, který rozhoduje kam se má co uložit.

Toto vyvažování bylo původně navrženo pro použití u btrfs rozloženého přes fvíce fyzických zařízení - odtud také název této funkcionality. Ale dá se využít i tehdy, pokud se přidá další zařízení, když hrozí zaplácnutí disku.

Tato operace má i další postranní efekty, které lze s výhodou využít: - Je-li na zařízení alokováno hodně bloků dat, které jsou jinak poměrně nevyužité, lze jejich zpřeházením scelit místo, neboť během vyvažování dojde k efektivnějšímu uložení dat a metadat. - Na souborovém systému, kde došlo k chybě při replikaci (např. u RAID-1 kde umřel disk) to donutí obnovit ztracenou kopii z metadat na aktuálně aktivním zařízení.

Co je důležité vědět

Upozornění Vyvažování nijak nepracuje s tzv. B-stromy, takže nemá žádný vliv na zrychlení přístupu k souborovému systému.

Scrub

Obnova btrfs

Pro obnovu btrfs existuje utilita btrfs-restore, která umožňuje nedestruktivním způsobem obnovit data ze souborového systému, který nejde namontovat.

Odkazy

https://btrfs.wiki.kernel.org/index.php/Problem_FAQ Oficiální FAQ
https://wiki.archlinux.org/index.php/Installing_on_Btrfs_root Btrfs jako kořenosý souborový systém
https://wiki.archlinux.org/index.php/Maximizing_Performance Maximalizace výkonu u Btrfs