Btrfs
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.
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.
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.
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)
|
Š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.
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ášť.
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.
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
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
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
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
- ↑ Btrfs - komprese(angl.)