Co je to ZFS
V první řadě si musíme ujasnit, co to vlastně ZFS je. Jedná se o souborový systém vyvinutý společností Sun Microsystems. Původně byl ZFS vyvinut pochopitelně pro operační systém Solaris, ale díky jeho uvolnění pod open-source licencí CDDL může být jeho kód portován i do dalších operačních systémů. Samotná zkratka znamená Zettabyte File System.
Kde jej najdeme
Kromě Solaris 10 se můžeme nově setkat se ZFS také na BSD, chystá se podpora například pro Mac OS X.
Bohužel připravit podporu pro Linux nebude tak snadné, kvůli problémům s licencí. Jak jsem již zmínil, originální kód ZFS je k dispozici pod licencí CDDL, ale Linux používá GNU GPL. Obě tyto licence jsou navzájem nekompatibilní.
Sun se ale vyjádřil v tom smyslu, že má zájem ZFS na Linux dostat. Měl by proto vzniknout port ZFS pod FUSE, který by umožnil běh souborového systému v uživatelském prostoru, kde by odlišná licence nebyla na překážku.
Základní charakteristika
ZFS je souborový systém. Těch existuje celá řada, ale ZFS nabízí několik zásadních vlastností, které jej od ostatních „konkurentů” výrazně odlišují.
Velikost souborového systému
Především se jedná o 128 bitový souborový systém, což v praxi znamená, že dokáže teoreticky spravovat až 16 miliard miliard (16*1018) kapacit dnešních běžných 64bitových souborových systémů.
To ovšem není jediný takto vysoko nastavený limit. Stejně velký jako jeden souborový systém (čili 16 exabytů) může mít i jediný soubor, v každém adresáři může být teoreticky až 256 souborů a podobně. ZFS je tedy konstruován tak, aby byla jeho kapacita prakticky nevyčerpatelná.
Proměnlivá velikost bloků
ZFS používá k ukládání dat bloky s proměnlivou velikostí. To má řadu výhod a umožňuje například použití menších bloků v případě zapnutého kompresního mechanismu.
Komprese
ZFS přímo implementuje transparentní kompresi souborů na disku. Dokáže tak urychli většinu diskových operací tím, že zapisuje menší množství dat.
Kontrola dat
Aby byla vždy zachována konzistence všech dat, používá ZFS 64bitové kontrolní součty uložené přímo na disku. Díky nim dokáže udržet data vždy v kondici. Pokud ZFS narazí na nekonzistentní data, provede automaticky jejich opravu bez zásahu administrátora. Není tedy potřeba použít fsck ani jinou podobnou utilitu.
Kopírování při zápisu
ZFS používá metodu copy-on-write a nikdy proto nepřepisuje předchozí data. Pokud je potřeba změnit některý blok, je zaalokován nový blok, proběhne zápis dat, změní se veškerá metadata příslušející starému bloku a pak je teprve smazán starý blok.
Jak to funguje
Z pohledu aplikací se jedná o běžný POSIX souborový systém, takže není potřeba nic upravovat ani rekompilovat. Z pohledu uživatele/administrátora se jedná o další vrstvu nad virtuálními diskovými kapacitami, která nevyžaduje pro svou práci LVM.
Díky svému zcela odlišnému návrhu zachází ZFS s disky jinak než běžný souborový systém. Využívá společnou kapacitu všech dostupných jednotek, nad kterými pak vytváří vlastní strom souborových systémů. Celková kapacita se nazývá pool (jako bazén). Už tedy nejsou potřeba žádné diskové oddíly (partitions).
Aby ZFS optimalizoval svou práci, používá dynamické rozdělování zátěže na všechny jednotky. Jakmile je přidán další disk, dojde automaticky k přerozdělení dat mezi disky, takže je pak ihned používán naplno i nový disk.
Každému svazku ve stromu je pak přidělena taková kapacita, kterou potřebuje. Zároveň ale používá výkon celé diskové kapacity. Aby nedocházelo k přeplňování disků, je k dispozici samozřejmě také systém kvót.
Protože je ZFS připraven na velké zátěže, implementuje I/O reordering, který dovoluje optimalizovat jednotlivé operace. To má ohromný vliv na celkový výkon ZFS.
Poslední výhodou, o které se zmíním, je velmi snadná obsluha celého systému a rychlá práce s jednotlivými jeho částmi. Veškeré operace jako je přidávání disků, vytváření nových uzlů a podobně trvají jen několik málo sekund.
Praxe
Práce s disky se díky ZFS velmi zjednodušuje, už nejsou potřeba diskové oddíly, formátování disků, vytváření nových souborových kapacit a podobně. Vše se zjednodušuje na dva příkazy: zpool
a zfs
.
K vytvoření nového poolu budeme potřebovat jeden jediný příkaz:
# zpool create prvni c1t2d0
Timto jsme na jednom disku vytvořili jeden pool s názvem prvni
. Můžeme si na něm vytvořit další souborové systémy s vlastní hierarchií. Řekněme, že to bude adresář filmy
:
# zfs create prvni/filmy
Ten si pak nastavíme tak, aby se automaticky připojoval do námi zvoleného mountpointu:
# zfs set mountpoint=/pub/video prvni/filmy
A to je celé. Takto si můžeme vytvořit další a další souborové systémy. Zdá se vám to jednoduché? Možností je ale mnohem více:
# zfs set quota=20g prvni/filmy
Nastavíme kvótu na 20 GB, aby se nám uživatelé moc neroztahovali. Můžeme si také zapnout kompresi, přestože nám to zrovna u filmů k ničemu nebude:
# zfs set compression=on prvni/filmy
Práce se ZFS je přesně takhle jednoduchá.
Závěrem
Bohužel ZFS zatím neumí fungovat jako kořenový souborový systém, a tak z něj nemůžeme bootovat. Podle Sunu se této funkce ale také v dohledné době dočkáme.
ZFS je už dnes velmi použitelný souborový systém s mnoha výhodami proti běžným souborovým systémům. Jeho možnosti jsou široké, ale zároveň klade minimální nároky na obsluhu a administraci. Zdá se, že většina vývojářů už pochopila jeho sílu a portování na další systémy snad na sebe nenechá dlouho čekat.