Určite ste už počuli o filesystéme ZFS od spoločnosti Sun Microsystems. V tomto blogu si ukážeme praktické ukážky - zaobchádzanie s poolmi a filesystémami. Cieľom tohto blogu nie je pojednávať o technickej vyspelosti ZFS a iných filesystémov.
Systém na ktorom som predvádzal príklady:
SunFire V250 Solaris 10 update 2 (6/06)
# uname -a
SunOS linda 5.10 Generic_118833-33 sun4u sparc SUNW,Sun-Fire-V250
slovník pojmov
dataset: spoločné meno pre tieto ZFS objekty: clones, file systems, snapshots, volumes.
Každý dataset je identifikovaný jedinečným menom v ZFS namespace. Datasety je možné identifikovať na základe tohto formátu zápisu:
pool/path[@snapshot]
clone: zapisovateľný file systém, ktorého prvotný obsah je rovnaký ako obsah datasetu z ktorého bol vytvorený
filesystem: dataset, ktorý obsahuje štandardný POSIXový filesystém
pool: logická skupina zariadení (devices) popisujúcich usporiadanie a fyzickú charakteristiku dostupného úložného miesta. Miesto pre datasety je alokované z poolu.
snapshot: read-only obraz filesystému alebo zväzku (volume) v danom čase.
volume: dataset použitý k emulácii fyzického zariadenia (device). Napríklad môžete použiť ZFS volume ako swap.

Praktické použitie
kedže mám na testy jeden disk, tak si budeme ukazovať jednotlivé ukážky len na ňom.
73 GB SCSI disk som rozdelil na sedem rôzne veľkých partícií (na nich si budeme okrem iného simulovať viac diskov v systéme :)):
Disk s ktorým pracujeme je c0t1d0sX (kde X je číslo partície)
Part Tag Flag First Sector Size Last Sector
0 usr wm 34 2.00GB 4194337
1 usr wm 4194338 4.00GB 12582945
2 usr wm 12582946 6.00GB 25165857
3 usr wm 25165858 10.00GB 46137377
4 usr wm 46137378 12.00GB 71303201
5 usr wm 71303202 15.00GB 102760481
6 usr wm 102760482 19.00GB 142606369
8 reserved wm 143358321 8.00MB 143374704
Začnime teda tým najjednoduchším a vytvorme si pool z jediného device:
# zpool create stuff c0t1d0s0
použitím tohto príkazu vytvoríme pool s názvom stuff o veľkosti 2 GB.
Máme teda pool:
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
stuff 1.98G 83.5K 1.98G 0% ONLINE -
a príkaz automaticky vytvoril na poole aj filesystém s mountpointom:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
stuff 76K 1.95G 24.5K /stuff
Čo v prípade, že chceme veľkosť poolu zvačšit?
# zpool add stuff c0t1d0s1
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
stuff 5.95G 190K 5.95G 0% ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
stuff 77K 5.86G 24.5K /stuff
Nový filesystém z existujúceho poolu
Keďže filesystém ZFS má veľa možností nastavenia (napr. kompresia, kvóty a pod.), môžeme chciež mať viac filesystémov v jednom poole. Vytvorme filesystém pre úživateľa user1
# zfs create stuff/user1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
stuff 108K 5.86G 24.5K /stuff
stuff/user1 24.5K 5.86G 24.5K /stuff/user1
Ako vidíte, jednotlivé filesystémy si navzájom miesto v poole zdieľajú. Keďže chcem, aby užívateľ user1 mal 100 MB kvótu, použijem tento príkaz:
# zfs set quota=100m stuff/user1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
stuff/user1 24.5K 100M 24.5K /stuff/user1
Ak sme slušní, môžeme túto kvótu aj garantovať (Vidíme, že obsadené miesto na celom poole sa zvýšilo o rezervovanú veľkosť pre filesystém user1):
# zfs set reservation=100m stuff/user1
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
stuff 100M 5.76G 26.5K /stuff
stuff/user1 24.5K 100M 24.5K /stuff/user1
Samozrejme užívateľovi user1 sa 100 MB môže zdať málo a keďže sme dobromilní, môžeme mu nastaviť kompresiu:
# zfs set compression=on stuff/user1
Takto si môžeme pozrieť compressratio filesystému (keďže nemáme na filesystéme žiadne dáta, ratio je len 1.00):
# zfs get compressratio stuff/user1
NAME PROPERTY VALUE SOURCE
stuff/user1 compressratio 1.00x -
Raid1 - mirror
Vďaka tomu, že nemám na testovanie dva rovnaké disky a ani dve rovnaké partície, budem musieť improvizovať. ZFS našťastie dokáže mirrorovať aj disky (partície), ktoré nie su rovnaké:
# zpool create important mirror c0t1d0s5 c0t1d0s6
invalid vdev specification
use '-f' to override the following errors:
mirror contains devices of different sizes
# zpool create -f important mirror c0t1d0s5 c0t1d0s6
Samozrejme, že veľkosť zrkadleného poolu sa odvíja od najmenšieho člena mirror poolu:
# zpool status important
pool: important
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
important ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0s5 ONLINE 0 0 0
c0t1d0s6 ONLINE 0 0 0
errors: No known data errors
Raid10 (mirror + stripe)
Príkaz v podstate rovnaký ako v prípade obyčajného mirroru, akurát ho rozšírime o ďalší mirror:
# zpool create -f important10 mirror c0t1d0s2 c0t1d0s3 mirror c0t1d0s4 c0t1d0s5
# zpool status important10
pool: important10
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
important10 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0s2 ONLINE 0 0 0
c0t1d0s3 ONLINE 0 0 0
mirror ONLINE 0 0 0
c0t1d0s4 ONLINE 0 0 0
c0t1d0s5 ONLINE 0 0 0
errors: No known data errors
# zpool list important10
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
important10 17.9G 81K 17.9G 0% ONLINE -
Raid5? Nie, raidz!
ZFS podporuje niečo podobné ako raid-5 avšak ponúka lepšiu distribúciu parity (než obyčajný raid5) a eliminuje takzvanú “Raid5 write hole” kedy sa parita a dáta v prípade výpadku prúdu stávaju nekonzistentnými.
# zpool create -f important5 raidz c0t1d0s2 c0t1d0s3 c0t1d0s4
# zpool status important5
pool: important5
state: ONLINE
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
important5 ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c0t1d0s2 ONLINE 0 0 0
c0t1d0s3 ONLINE 0 0 0
c0t1d0s4 ONLINE 0 0 0
errors: No known data errors
# zpool list important5
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
important5 17.9G 141K 17.9G 0% ONLINE -
Rušíme pooly a filesystémy
# zfs destroy stuff/user1
V prípade, že filesystém, ktorý rušíme má dedičné filesystémy, môžeme použiť
# zfs destroy -r
Pool zničíme príkazom (pozor, ked ničíme pool, tak sa neberie ohľad na existujúce filesystémy v poole)
# zpool destroy stuff
To by bolo pre základ všetko, niekedy nabudúce si povieme o ZFS Snapshotoch a ZFS ACL.
Prosím berte na vedomie, že tento blog zápis neobsahuje kompletnú prácu so ZFS - naozaj nie je a nebolo mojim cieľom prepisovať Administration guide :)
|
webhosting by: |
UnlimitedHosting | CustomHosting | FreeWeb.sk |