Z čoho sa skladá ZFS?
ZFS sa skladá s dvoch objektov:
– pool (úložisko)
– dataset (dátový set)
Ako sa ovláda ZFS?
ZFS môžno ovládať dvomi jednoduchými príkazmi:
– zpool – ovládanie ZFS poolov
– zfs – ovládanie ZFS filesystému
ZFS ZPOOL
ZFS pool je storage objekt, ktorý tvorí základ systému ZFS a pozostáva z mnohých fyzických zariadení nazývaných „devs“ (virtual devices). ZFS pooly sa spravujú príkazom zpool. ZFS je teda založené na virtuálnych dátových zariadeniach nazývaných pooly.
Typy virtuálnych zariadení (vdev)
Každý ZFS pool môže obsahovať ZFS datasety. Je to spoločné meno pre tieto ZFS objekty: clones (read/write)
, file systems
, snapshots (read-only snímok)
, volume
.
Prehľad ZFS objektov
Každý dataset je identifikovaný jedinečným menom a pracuje sa s nimi pomocou príkazu zfs. Dátové miesto pre datasety je alokované z poolu. Datasety je možné identifikovať na základe tohto formátu:
pool/cesta[@snapshot] Príklad: pool <-- pool pool/root <-- dataset pool/root@snapshot01 <-- snapshot
Praktická časť
ZPOOL CREATE
Tento jednoduchý príkaz zfs create služí na vytvorenie poolu na disku.
Syntax: create [-fn] [-o property=value] ... [-O file-system-property=value] ... [-m mountpoint] [-R root] ...
Pridanie nového disku do systému s názvom poolu pool by vyzeralo takto:
# zpool create pool ad1
ZPOOL LIST
Príkaz zpool list ponúka široký prehľad informácií o stave nášho poolu. Poznámka: Prepínač -H slúži na vynechanie hlavičky výpisu (NAME SIZE USED AVAIL…).
Syntax: zpool list [-H] [-o property[,...]] [pool] ...
# zpool list pool NAME SIZE USED AVAIL CAP HEALTH ALTROOT pool 35.2G 6.39G 28.9G 18% ONLINE -
Vo výpise vidieť názov poolu (NAME), celkovú veľkosť poolu (SIZE), sumár alokovanej veľkosti všetkých datasetov a interných metadát (USED), sumár nealokovaného priestoru v poole (AVAILABLE), percentuálne vyjadrenie naplnenosti poolu (CAP), aktuálny „zdravotný“ stav poolu (HEALTH), alternatívny root, ak je nejaký definovaný (ALTROOT). Ak chceme vypísať iba určité vlastnosti poolu, ktoré nás zaujímajú, môžeme použiť prepínač -o a za ním názvy oddelené čiarkou (užitočné pri skriptoch).
# zpool list -o name,used,avail,cap pool NAME USED AVAIL CAP pool 6.47G 28.8G 18%
ZPOOL DESTROY
Príkazom zfs destroy sa vymazáva pool.
Upozornenie!Pri zadaní daného príkazu sa bez akéhokoľvek potvrdenia vymaže zvolený pool! (pokiaľ nie je nič namapované)
# zpool destroy pool
ZPOOL STATUS
Dôležitým príkazom je aj zfs status pre vypísanie „zdravotného“ stavu nášho poolu. Stav poolu je určený zo stavu jeho top-level zariadenia (parentu). Platí, že ak sú všetky virtuálne zariadenia (vdevs) ONLINE, tak je celý pool v stave ONLINE. Ak je hocijaké virtuálne zariadenie v stave DEGRADED (degradované) alebo UNAVAILABLE (nedostupné), tak pool ako taký je označený ako DEGRADED (degradovaný). Ak je top-level zariadenie označené ako FAULTED (chybné) alebo OFFLINE, tak celý pool je označený ako FAULTED (chybný).
Stav celého nášho poolu teda zistíme príkazom:
# zpool status -v pool pool: pool state: DEGRADED status: One or more devices could not be opened. Sufficient replicas exist for the pool to continue functioning in a degraded state. action: Attach the missing device and online it using 'zpool online'. see: http://www.sun.com/msg/ZFS-8000-D3 scrub: resilver completed with 0 errors on Fri Mar 17 16:11:35 2010 config: NAME STATE READ WRITE CKSUM pool DEGRADED 0 0 0 raidz ONLINE 0 0 0 ad0p1 ONLINE 0 0 0 ad0p2 ONLINE 0 0 0 ad1p1 UNAVAIL 0 0 0 cannot open ad1p2 ONLINE 0 0 0
Vo výpise vidíme názov nášho poolu (pool)
, stav poolu (state)
, prípadne odporúčaný postup (action)
ako opraviť pool (toto pole nie je zobrazené pokiaľ nie je zistený problém) a odkaz na oficiálnu stránku Oracle o danom probléme (see)
.
V tomto prípade vidíme, že pool s názvom pool
je v degradovanom (DEGRADED) stave. Môžeme sa ho pokúsiť znova dostať do ONLINE stavu príkazom:
# zpool online pool ad0 Bringing device ad0 online # zpool status -x pool all pools are healthy
ONLINE Zariadenie je plne funkčné. DEGRADED V zariadení došlo k zlyhaniu, ale stále je schopné fungovať. FAULTED Zariadenie je kompletne nedostupné. Tento stav zvyčajne naznačuje zlyhanie zariadenia, kedy ZFS nevie prijímať a odosielať dáta. Ak je top-level zariadenie v tomto stave, tak celý pool je nedostupný. OFFLINE Zariadenie bolo dané administrátorom do stavu offline, kedy sa s ním nedá pracovať až do nastavenia stavu ONLINE. UNAVAILABLE Zariadenie sa nedá otvoriť. Ak je top-level zariadenie v stave UNAVAILABLE, potom žiadne zariadenie v príslušnom poole nie je prístupné.
ZPOOL HISTORY
Príkaz zpool history ako už napovedá jeho názov slúži na vypísanie histórie zadaných príkazov. Toto je užitočné na identifikovanie prípadných chybných príkazov.
Syntax: zpool history [názov poolu] # zpool history pool History for 'pool': 2010-12-07.20:23:54 zpool create -f -m none -o altroot=/mnt -o version=13 pool ad0p3 2010-12-07.20:23:54 zfs create -o mountpoint=/ pool/root 2010-12-07.20:23:54 zfs create pool/root/var 2010-12-07.20:23:54 zfs create pool/root/tmp 2010-12-07.20:23:54 zpool set bootfs=pool/root pool ....
ZPOOL HEALTH
Nie menej dôležitý údaj je zfs health, ktorý hovorí o stave poolov a hlási prípadné chyby s nimi súvisiace.
# zpool status pool pool: pool state: ONLINE status: The pool is formatted using an older on-disk format. The pool can still be used, but some features are unavailable. action: Upgrade the pool using 'zpool upgrade'. Once this is done, the pool will no longer be accessible on older software versions. scan: none requested config: NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 ad1p3 ONLINE 0 0 0 NAME STATE READ WRITE CKSUM pool ONLINE 0 0 0 ad1p3 ONLINE 0 0 0 errors: No known data errors
V tomto výpise je dôležitý stav poolu state
a hodnoty READ
, WRITE
, CHSUM
:
READ – I/O chyby vyskytujúce sa pri požiadavke na čítanie.
WRITE – I/O chyby vyskytujúce sa pri požiadavke na zápis.
CKSUM – Checksum chyby. Zariadenie má poškodené dáta.
Prípadné chyby môžete odstrániť a vrátiť pool do stavu ONLINE:
# zpool online pool da0 # zpool clear pool
ZPOOL IOSTAT
Zpool iostat čiže input/output statistics slúži na aktuálne zobrazenie vstupno-výstupných operácií daného poolu. Zobrazuje počet operácií read/write, priepustnosť v jednotkách, alokované a voľné miesto v poole.
# zpool iostat -v 1 capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- pool 5.06G 2.88G 9 2 258K 122K ad1p3 5.06G 2.88G 9 2 258K 122K ---------- ----- ----- ----- ----- ----- -----
ZPOOL UPGRADE
Aktuálnu verziu zpoolu zistíme príkazom zpool upgrade. Dolu vídime aj zoznam verzií s krátkym popisom, čo ktorá verzia pridáva.
# zpool upgrade -v This system is currently running ZFS pool version 14. The following versions are supported: VER DESCRIPTION --- -------------------------------------------------------- 1 Initial ZFS version 2 Ditto blocks (replicated metadata) 3 Hot spares and double parity RAID-Z 4 zpool history 5 Compression using the gzip algorithm 6 bootfs pool property 7 Separate intent log devices 8 Delegated administration 9 refquota and refreservation properties 10 Cache devices 11 Improved scrub performance 12 Snapshot properties 13 snapused property 14 passthrough-x aclinherit support 15 user/group space accounting
Vo výpise vidieť, že používame zpool verziu 14 pre pool pool
. Dostupná je však verzia 15 pre náš systém. Teraz spravíme upgrade zpoolu na verziu 15 a prepíšeme bootcode, aby sme po reštarte systému nabootovali.
# zpool upgrade -V 15 pool Successfully upgraded 'pool' from version 14 to version 15 If you boot from pool 'pool', don't forget to update boot code. Assuming you use GPT partitioning and da0 is your boot disk the following command will do it: gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad1 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad1
Poznámka: Bližšie informácie o jednotlivých verziách si môžete pozrieť na OpenSolaris.org, kde „N“ je číslo príslušnej verzie o ktorú sa zaujímate.
Záver
Sme na konci druhého dielu, v ktorom som písal o ZFS zpoole. Čaká nás posledný článok, ktorý bude najzaujímavejší. Vysvetlím, ako sa robí snapshot súborového systému, ako ho obnoviť alebo jednoducho preniesť na iný server.