[ Prev ] [ Index ] [ Next ]

ZFSIntro

Created Thursday 12 June 2008

Posted on ETNTechBlog:
ZFS - Zetta file system, finální slovo Sunu na ideální fs
Posted 12.11.2007 by jhr

V rámci svého zájmu o OS Solaris jsem měl možnost ůčasti na workshopu další zajímave technologie, kterou OS Solaris 10 přináší, a tím je souborový systém ZFS. Sun považuje tento filesystém jako definitivní slovo ve vývoji souborových systémů.

Jednou z nejzajímavějších věci na ZFS jsou jeho atomické akce. Důsledkem je například neexistence utility pro opravu po pádu, fsck. Tento nástroj není vůbec potřeba jelikož souborový systěm se nemůže nacházet v nekonzistentním stavu. Docíleno je toho copy-on-write mechanismem kdy do stromu referencovaných datových bloků na disku jsou zapsány vždy jen ucelená a konzistentní data, kdy zcela na vrcholu stromu je ukazatel na strom dat jako takový. Dokud do tohoto vrcholu neprobublají veškeré změny a nedojde k finálnímu zápisu vidí ostatní aplikace stále stará data.

Tento vrchol stromu je tak ideálním místem využitým k vytváření snapshotů souborového systému. Jednoduchým příkazem tak lze provésts vytvoření snapshotu, který je následně k dospozici pouze pro čtení a lze jej zpřístupnit i pro zápis, provést jeho zálohu, případně ho prohlásit za ten správný obsah který chceme mít dostupný v rámci storage poolu/datasetu (poll je uložiště, dataset je ucelená skupina v rámci poolu). Ve spolupráci se Solaris Zones to davá například takove možnosti, jako provozovat aplikaci a db server uvnitř zóny, provést její snapshot, zpřístupnit ho jako jinou zónu, provést drobne úpravy nastaveni a aplikaci například na jiné ip adrese spustit paralelně s daty z doby snapshotu. Druhou záležitostí je vytvoření okna pro provedeni konzistentních záloh. Kouzel lze provádět určitě mnoho.

Kromě obyčejného uložiště dat lze pomoci ZFS vytvořit také spolehlivější formy jako mirror nebo raidz případně raidz2. Jedná se v podstatě o alternativy k volume manageru s tím, že odpadá mezivrstva mezi FS a fyzickým diskem ve forme nejake formy volume manageru. Veškerá funkcionalita je již v rámci filesystému. Zajímavé je, že ideálním fyzickým uložištěm pro ZFS jsou obyčejné disky bez HW raid karet, ideálně s vypnutými zápisovými buffery a nechat toto na filesystému jako takovém. Mimo logiky kterou uplatňuje jde také o jistu, že operace kterou filesystém provedl byla opravdu uložena fyzicky na disk. Vhodným serverem je například sun x4500 s až 48TB ve 4u serveru.

Data v rámci ZFS jsou chráněna proti chybám pomocí hash otisku který je uložen mimo vlastní data. Neexistence fsck je nahrazena možností kontroly zda data na disku jsou opravdu správně uložena. Nejde tedy o kontrolu struktury FS ale přímo o kontrolu korektnosti dat vůči jejich otiskům. Tuto kontrolu provádí scrubber, který překontroluje otisky a v případě problémů v mirroru nebo raidz dokáže data opravit případně reportovat problém pokud by mělo jít například o hw problém. Další operací, která může v rámci zfs probíhat je resilvering, který provádí resynchronizaci na nový disk přidaný například do mirroru.

Dalších zajímavých vlastností je mnoho a zmíním je některé a jen stručně. V rámci poolu a data setů lze definovat limity obsazení disku, ale také dedikovat/rezervovat určitý diskový prostor. Data sety lze přímo vysdílet přes NFS. Lze také nastavit kompresi dat. V rámci ZFS jsou ACL ve stylu NFS4. Aktualně je dokonce vytvářena implementace CIFS (sdílení souborů pod ms windows alá samba) která techto ACL bude využívat a bude tak možné vytvořit ideální ulořiště data pro windows s možností rozšířené správy práv.

No a kde tedy lze ZFS použít? Samozřejmě na Solarisu. Konkrětně v aktuálním Solarisu 10 x86 nebo SPARC. ZFS je stejně jako OpenSolaris dostupný pod licencí CDDL i ve formě zdrojového kódu a je tedy licenčně nekompatibilní s licencí pod kterou je distribuován Linux (kernel). Z toho plyne že přímo v upstream linux kernelu nemůže být zařazen. Existuje však implementace přes FUSE a lze si ho tedy na linuxu vyzkoušet. Dále je dostupné ZFS například pro nejnovější MacOS X a je již i v připravovaném FreeBSD 7.

Malá ukázka jak to vypadá například přes zmíněné fuse:

opravdu to jede:
[root@deebee ~]# uname -a
Linux deebee 2.6.23-ARCH #1 SMP PREEMPT Sat Oct 27 09:04:14 UTC 2007 i686 Genuine Intel(R) CPU U2500 @ 1.20GHz GenuineIntel GNU/Linux
[root@deebee ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zfs-test 37.5M 26.0M 25.5K /mnt/zfs-test
zfs-test/testdir 37.2M 26.0M 37.2M /mnt/zfs-test/testdir
[root@deebee ~]# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
zfs-test 95.5M 37.6M 57.9M 39% ONLINE -
a snapshotováni:
[root@deebee ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zfs-test 37.5M 26.0M 25.5K /mnt/zfs-test
zfs-test/testdir 37.2M 26.0M 37.2M /mnt/zfs-test/testdir
[root@deebee ~]# zfs snapshot zfs-test/testdir@now
[root@deebee ~]# du -hsc /mnt/zfs-test/testdir/
38M /mnt/zfs-test/testdir/
38M total
[root@deebee ~]# rm -rf /mnt/zfs-test/testdir/mozilla/
[root@deebee ~]# du -hsc /mnt/zfs-test/testdir/
1.5K /mnt/zfs-test/testdir/
1.5K total
[root@deebee ~]# zfs clone zfs-test/testdir@now zfs-test/testdir_now
[root@deebee ~]# du -hsc /mnt/zfs-test/testdir
1.5K /mnt/zfs-test/testdir
1.5K total
[root@deebee ~]# du -hsc /mnt/zfs-test/testdir_now/
38M /mnt/zfs-test/testdir_now/
38M total
Pár odkazů na závěr:


Backlinks: :jhrcz-wiki:KnowHowKickstarters