Btrfs
Vytvoření souborového systému
Komprese
Používat kompresi lze u Btrfs od jádra verze 2.6.38
Aktivuje se použitím volby compress při mountu. Btrfs pak průběžně před zápisem na disk extenty komprimuje a ověřuje kompresní poměr. Není-li výhodný, tak zapíše data bez komprese.
Data se komprimují automaticky na pozadí, ovšem pouze pokud stíhá CPU!.
Komprimovaná data zabírají fyzicky méně místa. Proto je komprese na úrovni souborového systému výhodná kupř. tam, kde se ukládají především textová data.
Naopak svou režií zbytečně zatěžuje CPU tam, kde se ukládají multimediální soubory, či data pakovaná do malých komprimovaných archívů (typicky např. rozdílové objekty u gitu!).
Komprimace se provádí před uložením extentu z vyrovnávací paměti (cache) na disk. Nelze ji tudíž používat, je-li diskový oddíl s Btrfs namountován v režimu COW, kdy se ukládají pouze rozdílová data, nebo direct IO, při kterém se nepoužívá vyrovnávací paměť a data zapisuje rovnou na disk. |
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í kompresní algoritmus, který se použije není-li určeno jinak je ZLIB. Ten sice dosahuje oproti alternativnímu LZO lepšího kompresního poměru, je však pomalejší a víc zatěžuje procesor.
Algoritmus LZO, který je navržen pro kompresi v reálném čase, zatěžuje procesor mnohem méně, ovšem jeho výsledky mají horší kompresní poměr a tak jsou data zapisována ve větší míře bez komprese.
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)
|
Rozhodovací mechanismus Btrfs, který určuje zda-li se mají uložit data s kompresí či bez, lze ovlivnit použitím volby compress-force. Tím se natvrdo upřednostní komprimovaná data, bez ohledu na to, zda-li je kompresní poměr výhodný či nikoliv.
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 bez komprese. |
Jakým způsobem Btrfs aplikuje kompresi?
Jak už padla zmínka, Btrfs neaplikuje kompresi přímo na uložené soubory, ale na jednotlivé extenty souborového systému. V rámci jednoho svazku se tak mohou vyskytovat jak extenty nekomprimované, tak extenty komprimované přes ZLIB, či LZO.
Komprese (a to platí i pro zvolený algoritmus), se aplikuje po namountování až na nově zapsané extenty. Extenty, které byly uloženy dříve, zůstávají beze změny. |
Dodatečná komprimace extentů
Dodatečně lze extenty komprimovat (i dekomprimovat) během defragmentace. Pouze je třeba si uvědomit, že Btrfs nepracuje se stromovou strukturou, ale s objekty. Mají-li se tedy komprimovat objekty (soubory a podadresáře) rekurzivně, je třeba příkaz k defragmentaci aplikovat na každý objekt zvlášť pomocí utility find.
Lze zjistit aktuální kompresní poměr?
Bohužel v současné době nelze zjišťovat, s jakým kompresním poměrem jsou data uložená, neboť do nástroje btrfs prozatím není integrován patch, který umožňuje zjistit kolik fyzického místa na disku zabírají komprimovaná data uloženého souboru.
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
- ↑ Btrfs - komprese(angl.)
- 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