ZFS a Solaris 10

Tak jsem se konečně dostal k tomu, abych si trošku vyzkoušel nový opěvovaný file system od Sunů – ZFS (Zettabyte File System), který je již součástí Solaris 10. Musím říci, že jsem z něho docela unešenej :-)


Jak už jsem napsal, ZFS je již součástí Solaris 10, takže nebyl žádný problém si ho při pročítání dokumentace trošku osahan naživo. V podstatě jde o souborový systém, který je napsaný zcela od základu a “trošku jinak”, než ostatní file systemy. Zahrnuje v sobě totiž mnoho dalších funkcí, které nejsou v jiných FS dostupné vubec, nebo jsou dotupné nějakou externí utilitou. Těch předností je několik:

# Kapacita ZFS je prakticky nevyčerpatelná. Tím, že se jedná o (první a zatím jediný) 128bitový file system, dokáže obhospodařovat až 16 exabytů, přičemž ani jednotlivé soubory nemají limit.

# Pro všechny oparace zápisu i čtení se počítá kontrolní součet, který slouží pro samoopravné procedury. Ty se spustí vždy, když ZFS detekuje koruptnutá data. Můžete si tak být jisti, že co zapíšete, to také dostanete ;-)

# ZFS dokáže online komprimovat a dekomprimovat data. Má to tu výhodu, že objem fyzicky zapisovaných a čtených dat je menší a tím pádem i rychlejší. Mám připravené testy a porovnání mezi UFS na SVM a ZFS a výsledky tu určitě brzy zveřejním.

# ZFS v sobě zahrnuje i propracovaný volume manager, který je těsně propojen s vlastním file systemem. Výsledkem je kompaktní a rychlý celek, který může být velice rychle rekonfigurován – online, bez ztráty nebo nutnosti přesunu dat. Již se nemusíte starat o partyšny a obávat se o místo, čekat na vytvoření FS. Stačí se rozhodnout, které disky použijete a vytvoříte na nich tzv. pool. Systém se automaticky stará o optimální rozložení dat tak, aby průchodnost systému byla co nejvyšší.

Mirrorovaný pool vytvoříme příkazem:


root@mudstone# zpool create prostor mirror c1t9d0 c1t11d0
root@mudstone# zpool status
pool: prostor
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
prostor ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t9d0 ONLINE 0 0 0
c1t11d0 ONLINE 0 0 0

errors: No known data errors

Systém se nám ihned přimountoval:


root@mudstone# zfs list
NAME USED AVAIL REFER MOUNTPOINT
prostor 78K 16.5G 24.5K /prostor
root@mudstone# df -h /prostor/
Filesystem size used avail capacity Mounted on
prostor 16G 24K 16G 1% /prostor

Pokud potřebujeme jiný mount point, použijeme otion -m při zpool create nebo jej nastavíme dodatečně:


root@mudstone# zfs set mountpoint=/export/prostor prostor
root@mudstone# zfs list
NAME USED AVAIL REFER MOUNTPOINT
prostor 84K 16.5G 24.5K /export/prostor
root@mudstone# mount|grep prostor
/export/prostor on prostor read/write/setuid/devices/exec/atime/dev=4010009
on Fri Sep 1 17:05:57 2006

v tomto poolu můžeme vytvářet další file systemy:


root@mudstone# zfs create prostor/aplikace
root@mudstone# zfs create prostor/data
root@mudstone# df -h |grep prostor
prostor 16G 27K 16G 1% /export/prostor
prostor/aplikace 16G 24K 16G 1% /export/prostor/aplikace
prostor/data 16G 24K 16G 1% /export/prostor/data

Výhodou je, že se nemusíme starat o velikosti, partyšny, disky apod. Všecho je totiž dynamické a později to můžeme kdykoliv změnit bez ztráty dat. Včetně parametrů jako je comprese dat, quota, garantované místo na disku nebo dokonce shareovaní přes nfs.


root@mudstone# zpool add prostor mirror c1t14d0 c1t13d0
root@mudstone# zpool status
pool: prostor
state: ONLINE
scrub: resilver completed with 0 errors on Fri Sep 1 17:18:40 2006
config:

NAME STATE READ WRITE CKSUM
prostor ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t9d0 ONLINE 0 0 0
c1t11d0 ONLINE 0 0 0
mirror ONLINE 0 0 0
c1t14d0 ONLINE 0 0 0
c1t13d0 ONLINE 0 0 0

errors: No known data errors

root@mudstone# df -h|grep prostor
prostor 33G 27K 33G 1% /export/prostor
prostor/aplikace 33G 24K 33G 1% /export/prostor/aplikace
prostor/data 33G 24K 33G 1% /export/prostor/data

root@mudstone# zfs set compression=on prostor/data
root@mudstone# zfs set quota=5G prostor/aplikace
root@mudstone# zfs set reservation=10G prostor/data
root@mudstone# zfs set sharenfs=rw prostor/data
root@mudstone# df -h|grep prostor
prostor 33G 27K 23G 1% /export/prostor
prostor/aplikace 5.0G 24K 5.0G 1% /export/prostor/aplikace
prostor/data 33G 24K 33G 1% /export/prostor/data

# ZFS používá pro zápis proměnlivou velikost bloků. Ty se určují podle toho, jaký typ (velikost, struktura) dat se mají zapisovat.

# Možnost vytváření snapshotů a backupů přímo nástroji ZFS a to bez fyzickeho kopírování dat. Systém si pamatuje stav v okamžiku provedení snapshotu a ukládá pouze rozdíly od tohoto okamžiku. Podle těchto rozdílů je schopen předat na požádání uživateli soubor ve stavu v jakém byl v okamžiku provedení snapshotu. A to bez rootovských práv, takže dostupné pro běžné uživatele systému. Samozřejmostí je možnost vrátit celý FS do stavu v okamžiku snapshotu (tzv. rollback), clonovani, incremental backup atd.


root@mudstone# cd /export/prostor
root@mudstone# for i in `seq 1 2000`
root@mudstone# do echo puvodni text>> data/testfile
root@mudstone# done
root@mudstone# grep -c "puvodni text" data/testfile
2000
root@mudstone# zfs snapshot prostor/data@patek
root@mudstone# >testfile
root@mudstone# for i in `seq 1 500`
root@mudstone# do echo uprava>>data/testfile
root@mudstone# done
root@mudstone# grep -c "puvodni text" data/testfile
0
root@mudstone# grep -c "puvodni text"
> /export/prostor/data/.zfs/snapshot/patek/testfile
2000
root@mudstone# zfs rollback prostor/data@patek
root@mudstone# grep -c "puvodni text" data/testfile
2000

# Možnost velmi detailního nastavení uživatelských práv vycházející z praxe NFS4 a/nebo NT, kdy můžete povolit anebo zakázat některá práva včetně dědění do podadresářů.

# Zatím neuvolněné do ostrého provozu jsou funkce enkrypce dat a bezpečný delete (opravdové smazání dat z disku)

Důležitá upozornění:
1. Zničit celý fs se dá jediným příkazem, který se provede bez sebemenšího dotazu:


root@mudstone# zpool destroy prostor
root@mudstone#

2. Pokud si budete se ZFS hrát, přidáním disku do ZFS poolu se kompletně přepíše partition tabulka disku. Takže už tam nenajdete klasických 7 partitions, ale minimálně 8 a bude vám chybět 2. backup partition přes celý disk.


partition> Current partition table (original):
Total disk sectors available: 35362115 + 16384 (reserved sectors)

Part Tag Flag First Sector Size Last Sector
0 usr wm 34 16.86GB 35362115
1 unassigned wm 0 0 0
2 unassigned wm 0 0 0
3 unassigned wm 0 0 0
4 unassigned wm 0 0 0
5 unassigned wm 0 0 0
6 unassigned wm 0 0 0
8 reserved wm 35362116 8.00MB 35378499

 

Po oderbání je tento disk bez s2 partition nepoužitelný pro běžnou práci mimo ZFS (pro UFS apod.) Pokusy o přístup na c1t12d0s2 nebo o přepsání nebo vytvoření nové s2 selhávají na chyby “out of range”. Nejrychlejším postupem jak se toho zbavit, je spustit příkaz format -e a příkazem label namísto EFI label zapsat zpět původní SMI label:


root@mudstone# format -e c1t12d0
selecting c1t12d0
[disk formatted]

<snip>

format> label
[0] SMI Label
[1] EFI Label
Specify Label type[1]: 0
Warning: This disk has an EFI label. Changing to SMI label will erase all
current partitions.
Continue? yes
Auto configuration via format.dat[no]? yes
partition>

Pro rychlou ukázku toho jak to funguje v praxi se mrkněte na flashovou animaci. Pro podrobnější seznámení a další bádání doporučuji dokumentace z OpenSolaris.org

Leave a Reply

Your email address will not be published. Required fields are marked *