Blog

ZFS - Filesystem pro náročnější

Je to právě filesystem, kdo říká operačnímu systému jak má ukládat a pracovat s daty. Typicky je to jedna z věcí pod kapotou, o kterou se uživatel příliš nestará, a to je trochu škoda. Některé filesystémy totiž dokážou oproti jiným nabídnout zajímavé výhody, a jelikož mě osobně oslnil ZFS při každodenním používání, tak o něm něco málo napíšu.

Zettabyte File System je moderní proprietární filesystem od Sun Microsystems, a možná dost dobře nejlepší filesystem současnosti. Exceluje především na serverech, kdy je zapotřebí chytře propojovat větší množství disků a pracovat s velkými objemi dat, ale má co nabídnout i pro desktopy. Obsahuje nativní funkce pro správu úložišť, dynamickou velikost jednotek, podporu mirroringu/RAIDu a replikaci dat, snapshotů, šifrování, remote záloh, kontrolu integrity dat, komprese, atp.

Ve zkratce by se dalo říct, že ZFS řeší dohromady to co LVM + LUKS + ext4/ntfs/apfs, a efektivně nahrazuje tyto tři vrstvy za jednu elegantnější.

ZFS nepracuje s klasickými volumes nebo partitions, ale s datasety, které mohou být dokonce i zanořené do hierarchické struktury.

Každý dataset lze dynamicky resizovat, resp. nastavit mu velikostní kvóty a rezervace, což dává uživateli naprostou kontrolu nad místem na discích.

Se ZFS se vám už nikdy nestane, že budete muset kopírovat data z disku na disk jen proto, abyste mohli partitions na disku zmenšit / zvětšit, apod.

Datasety existují vždy v rámci poolu, které mohou být vytvořeny z jednoho či více fyzických disků.

Naprosto fantastické jsou snapshoty datasetů, kdy v jediné sekundě můžete vytvořit zálohu celého datasetu/datasetů. Snapshot se vytvoří do zbývajícího místa na datasetu, a jeho revertnutí je opět okamžité.

Doporučuji nastavit automatické provedení snapshotů před upgradem systému, čímž si ušetříte hodně času a nervů do budoucna.

Snapshoty je možné naklonovat do dalšího datasetu, aniž by zabíral místo navíc. Právě tímto způsobem je možné dostat se k zálohám uvnitř libovolného snapshotu, a vzít si co potřebujete, aniž by bylo nutné se vracet přímo do minulého snapshotu, a přijít tak o (od té doby) nové soubory.

Snapshoty také lze posílat i na vzdálený stroj, takže i v případě krádeže nebo rozbití disku pořád můžete mít svůj systém 100% zálohovaný.

Současně je možné zálohovat i šifrované inkrementální zálohy. Celkem wow!

ZFS také podporuje nativní šifrování datasetů nebo rovnou celého poolu.

Máte-li zašifrovaný celý počítač, tak při jeho startu je třeba nejprve heslo pro odemknutí datasetů, a až poté následuje startup operačního systému.

Máte-li RAID, ZFS také dokáže automaticky opravovat poškozená data z repliky, kdy na základě checksumů pozná která verze souboru je poškozená a rovnou ji přepíše nepoškozenou verzí.

Kdykoli také lze zkontrolovat integritu file systému.

Provádíte-li občas administrátorské úkony s místem, pro jeho výhody rozhodně stojí za zvážení. Aby to nebylo jen růžový, tak ještě shrnu i několik málo nevýhod z praxe.

ZFS poskytováno pod CDDL licencí, které je svým obsahem prakticky totožné s GNU GPL, ale údajně není slučitelné.

Pro linux tedy platí, že kvůli tomuto licenčnímu konfliktu není ZFS dostupné v jádře a ani oficiálních repozitářích, instalaci je nutné provést ručně - nejdřív přidat repozitář, GPG klíč pro ověření, a nainstalovat, což není zrovna těžké, ale nepotěší to.

Z výše uvedeného důvodu vychází ZFS verze později než verze kernelu, a pro instalaci nebo upgrade se musí verze shodovat. To na rolling-release distribucích jako Arch znamená, že se vám efektivně zkracuje doba, během které můžete systém upgradovat.

Je tak třeba (ideálně scriptem) sledovat kdy jsou obě verze ready k upgradu a příliš neotálet.

Občas se může stát, že buildování ZFS verze selže a pro danou verzi kernelu se prostě ZFS balík nestihne vytvořit a počkáte si až třeba na další.

Minimálně některé parametry poolu, které se nastavují při jeho vytvoření, už nejde zpětně změnit. Akorát můžete pool snadno upgradovat, abyste mohli využívat funkce novějšího ZFS, ale to je tak všechno.

Pokud by se to mělo někdy stát, tak jste odkázáni na vykopírování datasetů do jiného poolu, což sice není příjemné řešení, ale pořád je to řešení.

V případě šifrování poolu tuším není možnost jak mít vícero klíčů (hesel). To obecně nebývá problém pokud počítač s někým nechcete občas sdílet.
Aby vám byly snapshoty k něčemu dobrý, což je na ZFS asi jedna ze superpowers, je potřeba nějak zajistit jejich pravidelné vytváření a rotování. Vyřešil jsem to vlastními scripty, ale nejspíš na to půjdou dohledat i nástroje s pěkným interfacem, které s tím pomůžou.

Pokud používáte docker, jeho driver začne automaticky využívat ZFS snapshoty, což nejde vypnout. Dá se s žím žít, případně přesunout docker na partition nevyužívající ZFS.

Samozřejmě se mohou objevit i další issues, ale osobně jsem měl v tomhle směru zatím celkem kliku.