Tento systém byl navržen Sun Microsystems. Poprvé byl představen v roce 2005 v distribuci OpenSolaris.
Je licencován CDDL, která není kompatibilní s GPL, pod kterou je vydáván Linux.
Proto jsou jeho hlavní doménou operační systémy rodiny BSD a Solaris.
ZFS byla původně zkratka pro Zettabyte File system, ale v součastnosti již neznamená nic.
Oproti většině file systémů používá proměnnou velikost bloku.
Nepoužívá inody, ale různé struktury pro konkrétní operace (block-pointer, space-map…).
V názvosloví ZFS označujeme skupinu fyzických zařízení pro ukládaní dat jako pool.
Do poolu můžeme zařízení přidávat a odebírat online.
V poolu vytváříme další file systemy. Ty mají mountpoint, který defaultně odpovídá cestě v poolu.
V ZFS můžeme také vytvořit volume, který je přístupný jako standardní zařízení.
ZFS vytvoříme tím, že vytvoříme pool.
[root@freebsd ~]# zpool create zpool /dev/ada0p3
[root@freebsd ~]# zpool status
pool: zpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zpool ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
errors: No known data errors
[root@freebsd ~]# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ada0p2 2031132 832404 1036240 45% /
devfs 1 1 0 100% /dev
zpool 8192947 31 8192916 0% /zpool
Vytvořený pool je defaultně připojen v rootu.
File system vytvoříme příkazem zfs.
[root@freebsd ~]# zfs create zpool/test
Pro složitější příklad ukážeme defaultní rozdělení disku použitím automatického rozdělení – Automatic Root-on-ZFS, při instalaci FreeBSD.
Velikost swapu jsme vybral při instalaci 1 GB. Po instalaci vypadají diskové oddíly takto.
[root@freebsd ~]# gpart show
=> 34 20971453 ada0 GPT (10G)
34 1024 1 freebsd-boot (512K)
1058 2097152 2 freebsd-swap (1.0G)
2098210 18873277 3 freebsd-zfs (9.0G)
[root@freebsd ~]# zpool status
pool: zroot
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zroot ONLINE 0 0 0
gptid/f245d5b1-3350-11e4-88e0-a7ca1f524829 ONLINE 0 0 0
errors: No known data errors
Pool zroot se skládá z jednoho oddílu a jeho stav je v pořádku.
Další výpis zobrazuje informace o velikosti a volném místu v poolu.
[root@freebsd ~]# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
zroot 8.94G 939M 8.02G 10% 1.00x ONLINE -
Podíváme se na jednotlivé file systemy.
[root@freebsd ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zroot 939M 7.88G 144K none
zroot/ROOT 887M 7.88G 144K none
zroot/ROOT/default 887M 7.88G 887M /
zroot/tmp 176K 7.88G 176K /tmp
zroot/usr 576K 7.88G 144K /usr
zroot/usr/home 144K 7.88G 144K /usr/home
zroot/usr/ports 144K 7.88G 144K /usr/ports
zroot/usr/src 144K 7.88G 144K /usr/src
zroot/var 48.9M 7.88G 48.2M /var
zroot/var/crash 148K 7.88G 148K /var/crash
zroot/var/log 208K 7.88G 208K /var/log
zroot/var/mail 144K 7.88G 144K /var/mail
zroot/var/tmp 152K 7.88G 152K /var/tmp
Rozdělění odpovídá myšlence ZFS. Založí se jeden velký oddíl a ten můžeme následně dále dělit.
Připojení file systemu na jiné místo provedeme nastavením parametru mountpoint
[root@freebsd ~]# zfs set mountpoint=/var/log zroot/var/log
Rozdělení poolu reflektuje standardní potřeby FreeBSD uživatele.
Na jednotlivé datasety lze aplikovat kvóty a rezervace. Můžeme takto zaručit, že příliš obsáhlé logy nezasáhnou do provozu databáze.
Kvóty a rezervace lze nastavit online.
[root@freebsd ~]# zfs set quota=2g zroot/var/log
Tato vlastnost je výhodou při použití jailů, kdy můžeme omezit obsazený prostor pro jednotlivé jaily.
[root ~]$ zfs list -o name,used,avail,refer,mountpoint,quota,reserv
NAME USED AVAIL REFER MOUNTPOINT QUOTA RESERV
zpool 2.44T 238G 31K /mnt/zpool none none
zpool/jail 68.7G 41.3G 38K /jail 110G none
zpool/jail/backup 4.03G 41.3G 3.32G /jail/backup none none
zpool/jail/honeypot 462M 41.3G 421M /jail/honeypot none none
zpool/jail/ldapradius 11.7G 41.3G 10.9G /jail/ldapradius none none
zpool/jail/snort 27.0G 41.3G 6.98G /jail/snort 80G none
zpool/jail/syslog 16.6G 41.3G 11.2G /jail/syslog none none
zpool/jail/webs 8.83G 41.3G 2.26G /jail/webs none none
zpool/ports 1.08G 2.92G 1.08G /usr/ports 4G none
zpool/tmp 20.3M 1004M 20.3M /tmp 1G 1G
zpool/usr 2.45G 3.55G 2.45G /usr 6G 6G
zpool/var 1.21G 2.79G 1.21G /var 4G 4G
Snapshoty se vytváří příkazem zfs.
[root ~]# zfs snapshot zpool/jail/snort@Wed
Pro vytváření periodických záloh využijme automatického skriptu.
Vlastnoručně napsaného, nebo jako v tomto případě nástrojem zfSnap.
[root ~]# zfs list -t all
...
zpool/jail/snort 27.0G 41.3G 6.98G /jail/snort
zpool/jail/snort@weekly-2014-07-12_05.42.00--2m 2.38G - 6.86G -
zpool/jail/snort@weekly-2014-07-19_06.03.00--2m 1.84G - 6.88G -
zpool/jail/snort@weekly-2014-07-26_05.57.00--2m 1.74G - 7.11G -
zpool/jail/snort@weekly-2014-08-02_06.26.00--2m 1.78G - 7.12G -
zpool/jail/snort@weekly-2014-08-09_06.39.00--2m 1.68G - 7.12G -
zpool/jail/snort@weekly-2014-08-16_06.13.00--2m 1.70G - 7.13G -
zpool/jail/snort@weekly-2014-08-23_06.30.00--2m 2.05G - 7.13G -
zpool/jail/snort@weekly-2014-08-30_06.24.00--2m 1.26G - 7.03G -
zpool/jail/snort@Wed 0 - 6.98G -
...
Ze snapshotu lze vytvořit proud dat, který můžeme uložit do souboru pro účely zálohování.
Snapshot lze také odeslat na vzdálený systém, kde může být připraven jako záloha pro případ výpadku.
[root ~]# zfs send zpool/jail/snort@Wed | ssh backup zfs recv spool/backup
Systém implementuje Self-Healing vlastnost použitím techniky RAID-Z.
Jedná se o RAID5 s COW transakcemi.
Kdykoliv ZFS zjistí poškození dat nebo metadat špatným kontrolním součtem, může blok opravit pomocí správného bloku na redundantním disku.
Pro ušetření místa na disku můžeme zapnout vlastnost deduplikace. Pokud systém při zápisu na disk zjistí, že zapisovaný blok již existuje, neuloží ho, ale vytvoří pouze ukazatel na existující blok.
V dokumentaci k ZFS na FreeBSD stojí, že některé vlastnosti ZFS jsou velice náročné na paměť RAM.
Obecně se doporučuje 1 GB RAM na 1 TB storage.
Pokud použijeme vlastnost deduplikace doporučuje se až 5 GB RAM na 1 TB dat.
Komprese je ve výchozím nastavení pouze pro metadata.
Typ komprese můžeme vybrat z možností lzjb, gzip, gzip-[1–9], zle, lz4.
Šifrování je v beta stádiu.
ZFS se poprve objevil ne v Opensolarisu ale v Solarisu. Mel jsme k dispozici preview drive nez sel do Opensolarisu. Jinak dnesni Solaris 11 je vykradeny Opensolaris + opravy od Orasunu + dalsi modifikace a povysovani verze poolu+zfs kvuli kravinam.
Co takhle pustit zfs send s "-D"? Udela se deduplikovany snapshot.
2 Tomas:
ZFS s raidem raid-z neni problem, co se vadnych disku tyce, ale sam se neprida, je treba zaradit disk do zpoolu jako spare a je jedno, zda tam jiz byl jako hotspare, nebo se prida pozdeji.
Pokud ma disk jako spare, rebuild jiz probyha automaticky, neni problemvymenit i podezrely disk, tim, ze se prohlasi z vadny, myslim ze jsem tam videl i volbu replace, pro bezvypadkovou vymenu (snad si to nepletu s netappem, kde tohle je). Pouziva se v dobe, kdy mi SMART hlasi ze ma disk mnoho remapovanych sektoru a vim, ze odejde.
ZFS ma ale 2 velke bolesti, nemoznost rozsirit raid-z o dalsi disky, mimo spares a nema opravny nastroj. Videl jsem zhrouceny ZFS, byl na FC externim raid poli, tedy chyba HW vyloucena, na data se nedalo dostat, proste nesel inicializovat a bylo vymalovano ... opravny nastroj se neplanuje, tedy za me ZFS nikdy
[4] Na nutnost nastroje bylo upozornovano uz na nekolika developer konferencich. Jediny takovy je zpool scrub a zdbg a to je pro hardcore znalce a recovery firmy.
Prvni verze ZFS mely hodne neprijemne chyby kdy neslo na importovat nakopnuty pool ani jen pro cteni kvuli par zmenenym bajtum na kritickych mistech. Dnes uz je to opravene.
Pokud se bavime o zfs je vzdy vhodne uvadet verzi poolu a zfs filesystemu kde se chyba vyskytla.
Jinak backup backup backup. A to vysypat si snapshot a nebo jeste lepe po souborech - pravidlo vylouceni chyby ve fs.
Problem co popisujes se muze stat na jakkemkoliv FS. Pri vylozene hloupych logickych chybach se mohou poskodit vsechny kopie metadat. Je jednodussi to nahrnout z pasek a nechat bezet system z jine lokace z jineho pole nez se snazit to opravit.
raid-z se da nafouknout tak ze do jiz existujiciho poolu das dalsi raid-z. ale to asi neni cos chtel;)
Vice stve ze nemuzes odendat disk z poolu pokud zakos ma velke oci a zjistil ze nepotrebuje nezaplnenych 70TB a zbytecne za ne plati. Je to pomerne casty pripad v produkci.
No a tak to chce zmensit. Pritom vyhoda zfs je ze na rozdil od klasicke kombinace volume manager+fs vi kde data ma. Takze si muze zkontrolovat jestli ma volno a po pozadavku na odpojeni disku zacit presouvat data do zbytku poolu.
Zel neda se to ted resit jinak nez odpojenim s odstavkou coz je hodne drahe a navic platis dalsich v jednu chvili treba 70 + 30TB kvuli presunu.
Zajímalo by mě, k čemu by ZFS mělo mít opravný nástroj. fsck přece původně vzniklo proto, že "klasické" unixové fs měly by design problém s konzistencí v případě, že systém havaroval v nevhodný okamžik. Takový stav nebylo složité zjistit při skenováni fs a dal se i celkem snadno opravit, takže vznikl fsck, který tohle řešil. Občas mám pocit, že lidi mají tendence přikládat fsck téměř nadpřirozené schopnosti, ale většinou je z toho vyléčí první spuštění fsck na opravdu poškozeném fs...
Každopádně ZFS žádný takový jednoduchý designový problém nemá, takže nevím, k čemu by se ten "opravný nástroj" měl používat? Je jasné, že prakticky cokoli ve vesmíru se může rozbít ale obávám se, že způsoby rozbití ZFS jsou tak unikátní, že je dost nereálné řešit je nějakým univerzálním nástrojem.
2 Izak:
"byl na FC externim raid poli, tedy chyba HW vyloucena" - neměl byste tolik věřit reklamám:-)
…
Přečteno 10 310×
Přečteno 6 582×
Přečteno 6 570×
Přečteno 6 556×
Přečteno 5 930×