Rád by som upozornil, že cieľom môjho článku nie je porovnávať ostatné filesystémy, ale poukázať na nesporné výhody súborového systému ZFS a opísať moje krátke praktické skúsenosti a postrehy s jeho používaním. Príklady sú prevažne z operačného systému FreeBSD 8.2 PRERELEASE (zfs zpool testovacia verzia 28).
O čom budem konkrétne písať?
Seriál som rozdelil na tri časti. V prvej časti spomeniem, aké metódy používa ZFS na ochranu svojich dát, ako pracuje a ako si rýchlo nainštalovať FreeBSD s podporou ZFS. V druhej časti vysvetlím, ako pracovať s poolom
, z čoho sa ZFS skladá a ako sa ovláda. V tretej časti si vysvetlíme, ako pracovať s datasetmi
a ako vytvoriť snapshoty, klony, nastaviť práva na snapshoty a datasety.
Teoretická časť
Úvod do ZFS
ZFS je 128-bitový filesystém, ktorý bol pôvodne vyvíjaný spoločnosťou Sun Microsystems pre operačný systém Solaris, teraz ho vlastní firma Oracle. ZFS bolo po prvý krát predstavené v júni 2006 v operačnom systéme Solaris 10. ZFS pridáva do operačného systému medzivrstvu, ktorá mapuje logické bloky dát na ich fyzické umiestnenie na disku. Skratka ZFS znamená Zettabyte File System a vďaka open-source licencii CDDL je od 6.apríla 2007 portovaný aj do FreeBSD-7.0 RELEASE (zpool verzia 6). V stabilnej verzii FreeBSD 8.1 je od júla 2010 s aktuálnou verziou zpoolu 14. Je dostupná aj opravná verzia FreeBSD 8.2-RC1 s verziou zpoolu 15, ktorá opravuje mnohé bugy predošlej verzie. Pre porovnanie aktuálny Solaris 11 Express má ZFS verziu 31 z novembra 2010.
ZFS má tieto hlavné výhody:
– je to kompletne 128-bitový súborový systém
– môžeme uchovať 256 quadriliónov zettabytov (1 zettabyt má 1 bilión terabytov)
– má integrovaný volume manager
– stráži integritu svojich dát
– robí tzv. self-healing dát (automaticky opravuje poškodené dáta)
– ľahké ovládanie
– vie spraviť/obnoviť aktuálne snímky súborového systému (snapshoty)
– na disku je teoreticky možné uchovať až 2 na 64 snapshotov
– chybovosť dát je asi iba 0,01%
Transakčný model COPY-ON-WRITE
ZFS obsahuje patentovanú funkciu ORACLU s názvom Copy-On-Write (COW), ktorý stráži konzistenciu dát. COW je transakčný model a používa tzv. block pointers, teda ukazovatele na bloky dát v rámci svojho súborového systému. V praxi to znamená, že dátové bloky obsahujúce aktívne dáta sa neprepisujú až do chvíle, kým sa úspešne nezapíšu na iné miesto na disku. Ak je teda kopírovanie starého bloku dát ÚSPEŠNE dokončené, všetky ukazovatele na staré bloky a metadáta sú zmenené na nové bloky dát. Toto zaručí konzistenciu dát aj napríklad pri výpadku elektrického prúdu. ZFS si udržiava takisto kontrolné súčty všetkých dát a metadát. Pokiaľ sa zmení checksum nejakých dát, tak sa ich pokúsi opraviť bez manuálneho zásahu. ZFS používa 256-bitové kontrolné súčty, ktoré sú uložené priamo na disku. Z týchto dôvodov ZFS nepotrebuje fsck (file system check) na kontrolu konzistencie súborového systému. Takto sa zaručí, že pri zlyhaní diskovej operácie (napr. pri hard resete, výpadku elektrického prúdu) sa dáta budú vedieť po reštarte systému vrátiť do pôvodných dátových blokov a tak strážiť integritu svojich dát.
ZFS self-healing
ZFS self-healing je funkcia, ktorá pri mirrore dvoch a viac diskov automaticky opravuje poškodené dáta. Na spodnom obrázku vidíme v prvom kroku červený štvorec, čo značí poškodené bloky dát, kde nesedí kontrolný súčet (checksum). V druhom kroku to ZFS zistí, pozrie sa na druhý disk, kde zistí, že checksum je správny a v treťom kroku sa poškodené dáta na prvom disku automaticky prepíšu tými správnymi, ktoré sú na druhom disku. Na stránkach opensolarisu je uverejnené pekné video, ako to celé funguje.
Ukážka automatickej opravy dát pri mirrore
• RAID-1 – ZFS robí opravu zlých dátových blokov použitím kópie z mirroru
• RAID-Z/Z2 – ZFS robí opravu zlých dátových blokov použitím parity
ZFS ARC (Adaptive Replacement Cache)
Architektúra ARC
ZFS ARC je rýchla hlavná vyrovnávacia pamäť pre operácie so ZFS, ktorá sa nachádza vo fyzickej pamäti. ARC má schopnosť dynamicky meniť svoju veľkosť cache s ohľadom na celkovú dostupnú pamäť systému. Pri stave, kedy nemá systém dostatok pamäte (potreba inej aplikácie, procesu), povie ZFS, aby nejakú okamžite uvoľnil. V mnohých prípadoch tvorí ARC asi 3/4 z celkovej dostupnej pamäte pre systém.
ZFS intent log slúži na zapisovanie všetkých, aj zamýšľaných, diskových operácií do špeciálnej časti súborového systému. Jeho účel je, aby pri výpadku existoval záznam týchto udalostí, ak nastane kernel panic alebo výpadok prúdu. Toto zabraňuje nekonzistentnosti v súborovom systéme.
L2ARC je vrstva medzi diskom a virtuálnou pamäťou ARC vo fyzickej pamäti pre ZFS. Hlavná úloha tejto pamäte je urýchlenie náhodne čítaných dát.
32bit vs. 64bit
Vzhľadom k tomu, že ZFS používa vo veľkej miere operačnú pamäť, musíme zabezpečiť dostatočne veľkú operačnú pamäť, ktorú môže obhospodarovať. Odporúča sa 64-bitová verzia operačného systému a minimálne 1GB fyzickej pamäte pri FreeBSD, 512MB pri Solarise a adekvátna veľkosť swapu. Užívatelia, ktorí používajú 32-bitovú architektúru operačného systému, by si mali skompilovať kernel nanovo a pridať option „KVA_PAGES“, ktorý definuje približne jednu štvrtinu z celkovej veľkosti fyzickej pamäte pre KVA (kernel virtual address space), ktorá dovoľuje ZFS použiť viac fyzickej pamäte. V prípade, ak dôjde k vyčerpaniu voľnej pamäte pre ZFS, nastane kernel panic a samovoľne sa reštartuje operačný systém. Ak máme napr. 1GB fyzickej pamäte, tak si nastavte v configu kernelu následovné:
options KVA_PAGES=256 ; 1024MB deleno 4 = 256MB
Ešte je potrebné definovať v konfiguračnom súbore /boot/loader.conf
tieto hodnoty:
vm.kmem_size="512M" ; 1/2 z celkovej veľkosti RAM vm.kmem_size_max="512M" ; 1/2 z celkovej veľkosti RAM vfs.zfs.arc_max="256M" ; 1/2 z vm.kmem_size_max
mfsBSD
Veľmi jednoduchým spôsobom ako si nainštalovať FreeBSD s podporou filesystému ZFS je stiahnuť bootovateľné ISO mfsBSD (memory filesystem). Je to minimálna inštalácia FreeBSD, ktorá sa kompletne nahrá do operačnej pamäti. Stačí nabootovať ISO súbor, pripojiť sa na systém (heslo pre ISO je mfsroot):
# mount_cd9660 /dev/acd0 /cdrom ; namontuje ISO do /cdrom # zfsinstall -d /dev/ad0 [-d /dev/ad1] -t /cdrom/8.1-PRERELEASE-i386.tar.xz -s 2G -p pool # chroot /mnt ; zmeníme root systému # passwd ; nastavíme root heslo
Skript zfsinstall nainštaluje automaticky systém s podporou ZFS filesystému na disk ad0 s 2GB swapom a názvom poolu „pool“.
Nastavíme ešte automatické spustenie SSH démona a sieťovú kartu v /etc/rc.conf
, aby sme sa po reboote server vedeli opäť pripojiť:
sshd_enable="YES" ; automatický štart SSH po reboote servera ifconfig_(sieťovka)="DHCP" ; automatické IP adresy z DHCP servera
V súbore /etc/sshd/sshd_config
:
PermiRootLogin yes ; povolenie prihlásenia pre roota
# shutdown -r now ; reštart systému
Po reštarte systému vidíme základnú štruktúru ZFS filesystému, ktorú nám vytvoril skript zfsinstall
:
# zfs list NAME USED AVAIL REFER MOUNTPOINT pool 17.5G 664G 19K none pool/root 16.1G 664G 12.9G / pool/root/tmp 19K 664G 19K /tmp pool/root/var 180M 664G 158M /var
Záver
Týmto by som ukončil úvodný teoretický článok o ZFS. V druhom dieli si už povieme, ako pracovať s poolmi
, z čoho sa vlastne ZFS skladá a akým spôsobom ho ovládať.