Instalace serveru FreeBSD / ZFS

Miroslav Lachman 000.fbsd at quip.cz
Wed Mar 25 14:01:17 CET 2009


Jozef Babjak wrote:
>>>Mel jsem na mysli zvetsovani mista na filesystemu serveru napr. pro /home
>>>a ne pridavani disku do serveru. :-)
> 
> 
>>Jak je to v tomto ohledu na ZFS netusim.
> 
> 
>   ^-- IIRC, jednoducha zmena velkosti particii a na nich leziaceho
> suboroveho systemu - odhliadnuc od faktu ze, samotne pojmy particie a
> suboroveho systemu mozu byt v pripade ZFS zavadzajuce - je jednou zo
> zakladnych crt ZFS. Nakolko je to teoria a nakolko je to pouzitelne
> [na FreeBSD], zial, povedat neviem.

Se ZFS je situace uplne jina. V idealnim pripade dostane ZFS nejake cele 
disky (treba ad0 a ad1 do mirroru, nebo ad0 + ad1 + ad2 do RAIDZ [neco 
jako RAID5]), v pripade pouziti nejakeho pole pod nim, dostane jen to 
jedno zarizeni, ktere to diskove pole "exportuje" pro system.
Z techto disku se prikazem zpool vytvari pool, ve kterem se rozdeluji 
jednotlive souborove systemy. Pro kazdy souborovy system (rikejme mu 
oddil) je dostupna kapacita celeho poolu, dokud ji neomezime prikazem
zfs set quota=size tank/muj_oddil

Na jednom stroji to vypada nejak takhle:

root at kiwi ~/# zfs list
NAME                              USED  AVAIL  REFER  MOUNTPOINT
tank                             1.30T  1.37T  29.9K  /tank
tank/system                      1.04G  1.37T  28.4K  /tank/system
tank/system/tmp                  49.4K  1.37T  49.4K  /tmp
tank/system/usr                   610M  1.37T  80.0K  /tank/system/usr
tank/system/usr/obj              26.9K  1.37T  26.9K  /usr/obj
tank/system/usr/ports             441M  1.37T   213M  /usr/ports
tank/system/usr/ports/distfiles   105M  1.37T   105M  /usr/ports/distfiles
tank/system/usr/ports/packages    123M  1.37T   123M  /usr/ports/packages
tank/system/usr/src               168M  1.37T   168M  /usr/src
tank/system/var                   453M  1.37T   213K  /var
tank/system/var/db                415M  1.37T   415M  /var/db
tank/system/var/db/pkg            387K  1.37T   387K  /var/db/pkg
tank/system/var/log              37.7M  1.37T  37.7M  /var/log
tank/system/var/run              60.6K  1.37T  60.6K  /var/run
tank/vol0                        1.30T  1.37T  1.30T  /vol0
tank/vol0/mon                    65.1K  1.37T  65.1K  /vol0/mon

Celkova velikost poolu je v tomto pripade 2.7TB (pool tvori 4 disky o 
kapacite 1TB v rezimu RAIDZ) a z toho uz je 1.3TB zabraneho mista.
Jak je videt, tak kazdy z oddilu ma porad ve sloupci AVAIL napsano 
1.37T. Pokud bych chtel treba pro /vol0/mon nastavit, ze muze dostat 
maximalne 1GB mista a vic ne, staci na to prikaz:

zfs set quota=1G tank/vol0/mon

a od te chvile bude radek pro tento oddil vypadat nasledovne:

tank/vol0/mon                    65.1K  1024M  65.1K  /vol0/mon

aha, vlastne by se mi ted hodil ten oddil vetsi, treba 5GB:

zfs set quota=5G tank/vol0/mon

tank/vol0/mon                    65.1K  5.00G  65.1K  /vol0/mon

a po predvedene ukazce to na tom stroji zase vratim zpet

zfs set quota=none tank/vol0/mon

tank/vol0/mon                    65.1K  1.37T  65.1K  /vol0/mon

Takze pokud nekdo opravdu potrebuje casto nastavovat velikost oddilu 
(rekl bych spis adresarove quoty), tak je ZFS "ta prava volba" 
(samozrejme s ohledem na soucasnou kvalitu / stabilitu atd., to si kazdy 
musi zvazit sam)

Pokud by nekoho prekvapovalo, proc tu mam vytvoreno tolik oddilu, tak je 
to proto, ze se ZFS to je mozne vyuzit a nedela to problemy. Kdyby neco, 
mohu je kdykoliv zrusit a neprijdu tim o zadne prealokovane misto, jako 
kdyz clovek nevhodne rozdeli disk s UFS.
Tady jsem si napriklad "hral" s nastavovanim ruzne komprese pro ruzne 
oddily (ta se da opet kdykoliv za behu zapnout, vypnout, zmenit jeji 
uroven...)

zfs get -r compression | grep -v off
NAME                             PROPERTY     VALUE
tank/system/usr/ports            compression  gzip-9
tank/system/usr/src              compression  gzip-9
tank/system/var/db/pkg           compression  gzip-9
tank/vol0                        compression  gzip
tank/vol0/mon                    compression  gzip-9

Ucinnost si lze snadno prohlednout:

zfs get -r compressratio | grep -v 1.0
NAME                             PROPERTY       VALUE
tank                             compressratio  1.17x
tank/system                      compressratio  1.61x
tank/system/usr                  compressratio  2.13x
tank/system/usr/ports            compressratio  1.67x
tank/system/usr/src              compressratio  3.26x
tank/system/var/db/pkg           compressratio  4.29x
tank/vol0                        compressratio  1.17x
tank/vol0/mon                    compressratio  2.08x

Jsou tam zapocitane i nadrazene oddily, ktere ve skutecnosti 
komprimovane nejsou, ale jelikoz jejich potomci kompresi pouzivaji, tak 
i nadrazeny oddil vykazuje nejake compressratio.

Jeste tu od nekoho padnul dotaz na moznost bootovani FreeBSD ze ZFS - v 
7.x tato moznost neni a i kdyby byla, tak bych ji nevyuzil. Pro tenhle 
konkretni stroj pouzivam USB flashdisk s UFS, kde je root a tam 
nainstalovany zakladni system a mountovany Read-Only, zbytek pak je na 
ZFS. Takze i kdyby se s tim ZFS stalo neco hodne oskliveho, mam 
fungujici system na USB flashdisku a muzu se pokouset ZFS obnovit.
Ve skutecnosti staci mit na nejakm UFS oddilu jen loader a oddil /boot, 
zbytek pak uz lze po natazeni kernelu premountovat ze ZFS.

V soucasne dobe tusim uz loader ve verzi 8.x ma nejakou podporu 
bootovani ze ZFS, ale nevim, jestli jen z mirroru, nebo i RAIDZ / RAIDZ2.

Doufam, ze tahle mala ukazka nekoho nalaka k testovani a odhalovani 
dalsich chyb v ZFS :)
Ale nasazeni do provozu necht si kazdy zvazi podle sveho. Na to co jsem 
od toho potreboval ja jsem to nasadil uspesne k plne spokojenosti, ale 
tak nejak "vim" co od toho ocekavat a kde mohou byt problemy a na co 
bych to zatim urcite nepouzil a zustal u UFS.

Mirek



More information about the Users-l mailing list