Hlavní navigace

ZFS nebo Btrfs: stabilita vs. podpora v distribucích

15. 10. 2014
Doba čtení: 8 minut

Sdílet

Souborové systémy jsou zvláštní svět, ve kterém se pře snaha o stabilitu a konzervativnost s moderními vlastnostmi, které také podléhají trendům. V posledních letech se v Linuxu začínají prosazovat moderní souborové systémy s podporou snapshotů, copy-on-write, kontrolou integrity a dalšími vlastnostmi.

Na letošní konferenci LinuxDays se objevily dvě podobné přednášky, které probíraly dva podobné souborové systémy: ZFS a Btrfs. Ten první vznikl v Solarisu, ten druhý vznikl jako přímá reakce na ten první, protože jsme chtěli mít v Linuxu také něco takového. Později byl i ZFS portován pro Linux, takže si můžeme vybrat: originál nebo linuxová kopie. Ověřený koncept i kód nebo to, co máme jednoduše po ruce přímo v jádře.

Pavel Šnajdr: ZFS na Linuxu

Pavel Šnajdr přednášel o souborovém systému ZFS, který byl původně vyvinut na Solarisu, později portován také na Linux. Dnešní úložné prostory jsou ohromné, terabajty jsou „nic“ a běžně se používají pole ve velikosti petabajtů, začal svou přednášku Šnajdr. Naopak procesory jsou tak výkonné, že nepotřebujeme specializované HW RAID karty. Vše zvládne procesor. Podle Pavla Šnajdra je naopak zásadní, že ZFS se zaměřuje na jednoduchou správu a šetří nervy administrátora.

ZFS vzniklo v roce 2001 a už od roku 2005 je open source. Na rozdíl třeba od Btrfs je tedy už mnoho let testováno ohněm, vysvětlil výhody více než deset let prověřovaného konceptu. Po odkoupení Sunu společností Oracle byl vývoj otevřené varianty zastaven, vývojáři se rozutekli a v roce 2013 spustili projekt OpenZFS. Ten umožnil portaci souborového systému na FreeBSD, Linux (ZFSonLinux) a OS X (MacZFS).

ZFS používá koncept pojmenovaný jako pooled storage. Spojuje tedy funkci souborového systému a volume managementu (LVM). Spojuje disky do takzvaných poolů a nad nimi pak vytváří buď mirror nebo variantu RAID5 nazvanou RAID-Z. Všechny datové bloky pak mají uložený svůj hash, který je při načítání dat vždy kontrolován. Případné poškození je tak velmi rychle detekováno a blok může být obnoven z jiného místa. Buď se hledá na jiném disku nebo je možné mít každý blok na disku uložený dvakrát či třikrát.

Bezpečnost je zajištěna transakčním systémem, který provádí atomické operace pomocí copy-on-write. Pokud je třeba změnit data, nejsou bloky nikdy přepisovány, ale nová data jsou zapsána na jiné místo. Jakmile jsou na svém místě, dojde k přepsání uberblocku, který začne odkazovat na novou pozici dat a staré bloky se mohou uvolnit. Díky tomu je ZFS sto procent času konzistentní a nepotřebuje kontrolu souborového systému.

V Linuxu je používán projekt ZFSonLinux, který neběží na FUSE (jako dříve v projektu ZFS on FUSE), ale plně nativně. Je možné ho zkompilovat pro jádro, ale i pro user space. To umožňuje velmi jednoduché testování celé logiky. Současná stabilní verze nese označení 0.6.3, podporuje linuxové jádro až do verze 3.14, podporuje SELinux a ACL. Balíky existují pro různé distribuce a je tedy připraven pro okamžité použití. Vlastně stačí jen přidat repozitář, vysvětlil Pavel Šnajdr. Největším problémem tak zůstává nekompatibilita licencí, protože ZFS zůstává pod CDDL a jádro je pod GPL.

Pavel Šnajdr nedá dopustit na ZFS

Důležitou vlastností jsou snapshoty, které se dají dělat rekurzivně a dají se klonovat. Je možné mít konzistentní zálohu pro všechny ty petabajty dat. Je pak možné kdykoliv obnovit stav souborového systému v době vytváření snapshotu. Stejně tak je možné dělat mezi snapshoty diffy. Vidíte v tom tu podobnost s Gitem? Jednotlivé snapshoty je také možné posílat mezi různými stoji a zálohy si tak kompletně zkopírovat jinam.

Silnou stránkou je také vlastní podpora cachování, kde si ZFS drží zvlášť seznam nejčastěji používaných bloků a nejnověji použitých bloků. Pokud dojde paměť, ZFS nejdříve zahodí poslední používaná data a nechá si ta opravdu nejpoužívanější. V tom je podle Šnajdra zásadní rozdíl proti běžnému cachování v jádře, které je při nedostatku paměti ochotné velmi snadno celou cache „vylít“ bez ohledu na to, jaká data v ní jsou. Zajímavá je také L2ARCcache, která umožňuje zapisovaná data uložit nejprve na rychlé úložiště (typicky SSD) a až později je zapsat na pole. Podobně existuje log pro synchronní zápisy, které je možné rychle odhazovat na zařízení s nízkou latencí. Hodí se to zejména pro databáze, které mívají soubory otevřené pro synchronní zápis a takto stoupne výrazně výkon.

Pavel Šnajdr se dále věnoval praktickému nasazení ZFS ve sdružení vpsFree.cz. Používáme kontejnery a pro nás kontejner znamená adresář, tedy ideální prostor pro ZFS datasety. Původně byl na serverech RAID10 s ext4 a Flashcache, což naráželo zejména při použití velkého množství databází. Linuxová cache je totiž velmi naivní a jádro ji velmi snadno vylije a výkon jde k nule. Toto celé několikavrstvé řešení tedy bylo nakonec nahrazeno jedinou vrstvou v podobě ZFS.

Od července 2014 běží celé vpsFree.cz na ZFS, což mimo jiné umožňuje většinu doby běžet pouze z RAM. Zjednodušuje to zálohy, dnes jsme schopni velmi rychle zálohovat všechny VPS, dříve s ext4 nám to trvalo celý den a někdy jsme museli kvůli délce zálohy den vynechat. V budoucnu je v plánu nabídnout některé vlastnosti ZFS dovnitř do VPS jednotlivým uživatelům. Ti si pak budou moci udělat vlastní snapshoty a nastavovat si některé vlastnosti datasetu pro svou VPS. To bude ale vyžadovat nějaký vývoj a patch do jádra.

Michal Halenka: 7 let existence Btrfs

Michal Halenka se na své přednášce zabýval především uživatelskou stránkou souborového systému Btrfs. Důležité pro mě je, co mi takový souborový systém přinese než to, jak to funguje pod kapotou, zahájil svou přednášku. Během ní se samozřejmě neubránil srovnání s přímým konkurentem ZFS. Hlavní výhodou Btrfs je licence GNU GPL, je tedy kompatibilní s licencí linuxového jádra. Stejně jako ZFS používá systém poolů, umí snapshoty, kontrolní součty a copy-on-write. Jsou to tuším jediné dva souborové systémy v Linuxu, které umí copy-on-write.

Btrfs vznikl v roce 2006 v IBM Research, kde byla vytvořena první implementace v userspace. V roce 2008 pak vyšla první ostrá verze 1.0. Na rozdíl od jiných projektů, má tady číslování svůj smysl, protože od verze 1.0 používá Btrfs stejný datový model až do dnešního dne. Poprvé se souborový systém objevil v linuxovém jádře verze 2.6.29 v roce 2009. Od roku 2013 a verze jádra 3.10 je označován za stable. Pořád to ale neznamená, že nemůže dojít ke ztrátě dat. Btrfs ještě neprošel tak intenzivním testováním jako třeba ZFS, varoval Michal Halenka a rozhodně doporučil zálohování.

Btrfs se tedy stále ještě intenzivně vyvíjí, ale pro řadu nasazení už může být zajímavý. Některé vlastností už má, jiné se vyvíjí a o některých teprve sníme. Michal Halenka zmínil některé další zásadní vlastnosti Btrfs jako online defragmentace, změnu velikosti za běhu, přidávání a odebírání blokových zařízení, balancing, kontrola chyb za běhu (online scrubbing), podporu pro RAID 0, 1, 5, 6 a 10 a konečně také offline kontrolu souborového systému. Dlouho bylo Btrfs vyčítáno, že nemá žádný nástroj pro kontrolu integrity dat a opravu souborového systému.

Uživatelskou výhodou je, že Btrfs je součástí jádra a utility už jsou ve většině velkých distribucí. Určitě v Debianu, Ubuntu, Archu, Gentoo, openSUSE i v dalších, vyjmenoval Michal Halenka nejběžnější distribuce. Nástroje pro správu Btrfs jsou velmi důležité, protože například kvůli kompresi či copy-on-write je problém běžnými nástroji zjistit množství zabraného místa.

Blízká budoucnost snad přinese online deduplikaci, zatím je k dispozici pouze offline varianta, kdy je třeba mít souborový systém odpojený. Pak se porovnávají hashe nebo přímo bitově jednotlivé soubory a v případě shody se mění v reference. Taková deduplikace je přitom velmi náročná na paměť, podle Halenky to bude velmi podobné jako u ZFS a je potřeba 1 GB paměti na 1 TB diskového prostoru. Další novinky by se měly týkat RAID polí. Nejvíce je zatím možné mít dvě parity devices v RAID 6, ale vývojáři by rádi měli ještě více zařízení. Chybí také podpora swapu, který pořádně nefunguje kvůli copy-on-write. Vývojáři by také rádi přidali podporu šifrování, která se zatím provádí přes LUKS. Funguje to krásně.

Michal Halenka používá Btrfs

Moderní a užitečnou vlastností je podpora snapshotů, i když podle Halenky v případě Btrfs vlastně o plnohodnotné snapshoty nejde. Vytvoří se jen subvolume, která obsahuje odkazy na původní subvolume. Jelikož je to atomická operace, provede se okamžitě. Vznikne tím plně zapisovatelný „snapshot“, stejně jako zůstává zapisovatelný ten původní.

Užitečnou vlastností je také komprese dat, kterou je možné na souborovém systému zapnout buď povinně nebo až po ověření toho, že má na konkrétních datech smysl. Doporučuji to používat, je to velmi užitečné. Podporovány jsou kompresní algoritmy zlib, lzo a připravuje se lz4. Protože se komprese provádí ‚per extent‘, je možné mít každou část disku komprimovanou jiným algoritmem a pro uživatele je to zcela transparentní. Zatím ovšem neexistuje nástroj, kterým by bylo možné zjistit, kolik prostoru bylo komprimací ušetřeno. V jádře tato vlastnost přístupná je, zatím ale nikdo nenapsal příslušnou utilitu.

Btrfs umožňuje konverzi z ext3/4 bez nutnosti přemístit data na jiný disk a celý disk smazat. Konverze probíhá tak, že se odloží bokem první megabajt s důležitými daty pro souborový systém, zduplikují se adresáře a inody a vytvoří se metadata pro Btrfs. Vznikne tím plně generický souborový systém, nejsou s ním žádné problémy. Jen může dojít k tomu, že jsou objekty na disku neoptimálně rozloženy. Výhodou je, že pokud konverze kdykoliv v průběhu selže, je možné se vrátit do původního stavu.

CS24_early

Btrfs není plánované pro tak velké nasazení jako ZFS, což je podle Halenky znát i podle maximálních velikostí podporovaných úložišť. Na druhou stranu zvládne podstatně víc než ext4, který se kvůli zpětné kompatibilitě drží stále při zemi.

ZFS nebo Btrfs?

Oba zmíněné souborové systémy jsou si z uživatelského hlediska velmi podobné, nabízí řadu moderních vlastností jako snapshoty, kompresi či deduplikaci. Na ZFS je ovšem znát podstatně delší vývoj s většími investicemi a testování velkou zátěží v praxi. Btrfs ještě potřebuje nějaký čas k dozrání a doplnění všech potřebných vlastností, pro něj ale zase hraje překotnější vývoj, rychlé doplňování nových funkcí a hlavně licenční kompatibilita s jádrem. Pokud tedy chcete podobný souborový systém začít používat, můžete okamžitě sáhnout po mladém Btrfs nebo si dát tu práci a dostat do svého systému odladěné a stabilní ZFS. Co byste zvolili vy? Používáte některý z nich?

Který souborový systém v Linuxu preferujete?

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.