ZFS failisüsteemi kasutamine

Allikas: Kuutõrvaja
Redaktsioon seisuga 16. september 2009, kell 14:42 kasutajalt Jj (arutelu | kaastöö) (Lehekülg "ZFS failisüsteemi kasutamine operatsioonisüsteemiga Solaris" teisaldatud pealkirja "ZFS failisüsteemi kasutamine" alla)

Kasutus

ZFS failisüsteemi kasutuselevõtmine toimub kahes etapis

  1. tuleb moodustada ZFS pool
  2. ZFS poolis tuleb moodustada ZFS failisüsteemid

Üldiselt nimetatakse pooli, failisüsteemi, snapshoti või klooni dataset'iks.

Pool

ZFS pooli tegemisel näidatakse, milliseid füüsilisi seadmed ja millise redundantsusega kasutama asutakse. Kõige otsekohesem on kasutada kogu füüsilist seadet, aga võimalik on kasutada ka nn Solarise partitsioone, nt c4t0d0s6 või tavalisi faile failisüsteemist. Viimane võimalus on praktiliselt sobilik ehk vaid katsetamiseks ning ZFS omaduste tundmaõppimiseks.

Näiteks, moodustame kahe Solaris operatsioonisüseemile nähtava kettaseadme c2t0d0 ja c3t0d0 baasil ZFS pool'i nimega tank, milles on füüsilised kettaid paigutatud peeglisse

# zpool create tank mirror c2t0d0 c3t0d0

Moodustatud pool'i omadusi saab vaadata käsuga

# zpool status

Pooli eemaldamine toimub käsuga

# zpool destroy tank

Raid 5 skeemiga pooli moodustamiseks tuleb öelda

# zpool create tank raidz c6t8d0 c7t0d0 c7t5d0

Ning stripe ehk raid0 tekitamiseks

# zpool create tank c6t8d0 c7t0d0 c7t5d0

Pooli omadusi saab küsida öeldes

 # zpool get all tank
 NAME  PROPERTY     VALUE       SOURCE
 tank  size         244G        -
 tank  used         132G        -
 tank  available    113G        -
 tank  capacity     53%         -
 tank  altroot      -           default
 tank  health       ONLINE      -
 tank  guid         16227317280498583651  -
 tank  version      4           local
 tank  bootfs       -           default
 tank  delegation   on          default
 tank  autoreplace  off         default
 tank  cachefile    -           default
 tank  failmode     wait        default

Pooli juures on oluline tähele panna, et ta kasutab sisemiselt nn on-disk format'it. Võimalikud väärtused Solaris 10 u6 puhul on

# zpool upgrade -v  
This system is currently running ZFS pool version 10.

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
For more information on a particular version, including supported releases, see:

http://www.opensolaris.org/os/community/zfs/version/N

Where 'N' is the version number.

Pooli moodustamisel saab lisaks määrata ka on-disk format versiooni.

Failisüsteem

Moodustame poolis kaks failisüsteemi, /opt/csw ning /export/home (tundub, et neil kahel konkreetsel juhul on ZFS failisüsteemist palju abil, samas peab arusaadavalt vaatama, et süsteem, kus tegevusi läbi viia oleks selleks valmis)

bash# zfs create anum/opt-csw
bash# zfs create anum/export-home

Peale failisüseemide moodustamist tuleks neile näidata sobivad ühenduspunktid

bash# zfs set mountpoint=/opt/csw anum/opt-csw
bash# zfs set mountpoint=/export/home anum/export-home

Ühenduspunkti eemaldamiseks tuleb kasutada mountpoint=none väärtust.

Failisüsteemi külge ja lahti ühendamine toimub vastavalt

bash# zfs mount anum/opt-csw
bash# zfs umount anum/opt-csw

Failisüsteemide seisu saab vaadata käsuga

bash# zfs list

või ise näidates soovitud parameetrid

 # zfs list -o shareiscsi,origin,name,used,avail,refer,mountpoint,type

Failisüseemi eemaldamine toimub sarnase käsuga

bash# zfs destroy anum/opt-csw

Failisüsteemi omaduste küsimiseks tuleb öelda näiteks

 # test-baas:~# zfs get all anum/iscsi
 NAME        PROPERTY       VALUE                  SOURCE
 anum/iscsi  type           filesystem             -
 anum/iscsi  creation       Tue Oct  9 15:38 2007  -
 anum/iscsi  used           36.5K                  -
 anum/iscsi  available      6.63G                  -
 anum/iscsi  referenced     36.5K                  -
 anum/iscsi  compressratio  1.00x                  -
 anum/iscsi  mounted        yes                    -
 anum/iscsi  quota          none                   default
 anum/iscsi  reservation    none                   default
 anum/iscsi  recordsize     128K                   default
 anum/iscsi  mountpoint     /anum/iscsi            default
 anum/iscsi  sharenfs       off                    default
 anum/iscsi  checksum       on                     default
 anum/iscsi  compression    off                    default
 anum/iscsi  atime          on                     default
 anum/iscsi  devices        on                     default
 anum/iscsi  exec           on                     default
 anum/iscsi  setuid         on                     default
 anum/iscsi  readonly       off                    default
 anum/iscsi  zoned          off                    default
 anum/iscsi  snapdir        hidden                 default
 anum/iscsi  aclmode        groupmask              default
 anum/iscsi  aclinherit     secure                 default
 anum/iscsi  canmount       on                     default
 anum/iscsi  shareiscsi     off                    default
 anum/iscsi  xattr          on                     default

Failisüsteemi loomisel vaikimisi ei ole määratletud failisüsteemi suurust. Kui sama zfs pooli sisse moodustada mitu failisüsteemi, siis ühe täitumine tähendab kõigi täitumist, selle vastu aitab failisüsteemile suuruse seadmine (ingl. k. quota) öeldes nt

 # zfs set quota=16G anum/export-home

Snapshoti kasutamine

Failisüsteemist snapshoti moodustamisel fikseeritakse ära ajahetkele vastav failisüsteemi olek ning seostatakse selle olekuga nimi. Snapshoti nime abil saab edaspidi selle snapshoti poole pöörduda. Peale failisüsteemist snapshoti moodustamist toimub vastava failisüsteemi enda kasutamine edasi muutusteta.

Snapshot võimaldab

  • ajahetkele vastavale failisüsteemi olekule tagasi pöörduda
  • ajahetkele vastavast failisüsteemist teha koopiat (nt backupi või failisüsteemi klooni tegemise mõttes)
  • vahetult read-only ligipääsu selle ajahetkele vastavale seisule (snapshot on iseenesest read-only)

Failisüsteemist snapshoti moodustamine toimub näiteks käsuga

bash# zfs snapshot anum/opt-csw@20070331

kusjuures @-märgi järel ei pruugi olla tingimata aega tähistav sõne. Snapshoti saab moodustada failisüsteemist, mille failid on avatud, kuid ilmselt saab kooskõlaliste andmetega snapshoti, kui failisüsteem ei ole parasjagu kasutusel (või on teada kuidas olukorda lahendada).

Kui failisüsteem oli snapshoti tegemise ajal ühendatud kataloogi /opt/csw alla, siis snapshotile vastavale failisüsteem asub kataloogis /opt/csw/.zfs/snapshot/20070331. Oluline on tähele panna, et shelli tab klahviga complete'imine ei toimi, '.zfs/' osa tuleb välja kirjutada.

Üheks snapshoti kasutamise eesmärgiks võiks olla tekitada olukord, et peale muudatuste tegemist kõnealusesse failisõsteemi saaks vajadusel hõlpsasti pöörduda tagasi eelmisele seisule. Tingimusel, et taastataval failisüsteemil ei ole avatud faile (st praktiliselt peab olema võimalik failisüsteemi lahti ühendada, mida küll zfs käsk automaatselt teeb), tuleb eelmisele seisule tagasipöördumiseks öelda

bash# zfs rollback anum/opt-csw@20070331

Teiseks snapshoti kasutamise eesmärgiks võiks olla ajahetkele vastava koopia moodustamine, mida saab talletada faili kujul ning millelt saab hiljem vajadusel ajahetkele vastavat failisüsteemi seisu taastada. Koopia tegemine toimub käsuga

bash# zfs send anum/export-home@20070331 | gzip -c > anum-export-home-20070331.gz

Taastamine toimuks käsuga

bash# gunzip -c anum-export-home-20070331.gz | zfs receive anum/export-home

Arvutis olevate snapshottide nimekirja näeb käsuga

bash# zfs list -t snapshot

Snapshoti eemaldamine toimub käsuga

bash# zfs destroy anum/opt-csw@20070331

Failisüsteemi kloon

Selleks, et snapshotile vastavasse failisüsteemi saaks kasutada traditsiooniliselt, tuleb temast moodustada failisüsteemi kloon, näiteks selliselt

bash# zfs clone anum/opt-csw@20070331 anum/opt-csw-20070331

Tulemusena tekib failisüsteemi anum/opt-csw-20070331 kasutada nagu tavalist ZFS failisüsteemi.

Lisaks on võimalus algne failisüsteem, st see, mille snapshotist kloon tekitati, asendada klooniga öeldes

 # zfs promote anum/opt-csw-20070331

Toimuvat võiks ette kujutada nii, et keskel on snapshot ja promotemise tulemusena vahetavad allikas ja kloon omavahel kohad, mis mille suhtes moodustatud on.

Kui üldiselt tuleb eemaldada asju järjekorras, 1. kloon, 2. snaphost, 3. allikas, siis promote'imise tulemusena saab ilma klooni eemaldamata allika eemaldada.

Selleks, et kloon kannaks allikaks olnud failisüsteemi nime, tuleb kasutada zfs rename käsku.

Failisüsteemi võrku jagamine

ZFS failisüsteemi saab jagada võrku nii nagu tavalist failisüsteemi NFS serveri abil. Solarise puhul on aga mugav seda teha lihtsalt seades ZFS failisüsteemi sharenfs omaduse väärtuseks 'on'. Näiteks selliselt

# zfs set sharenfs=on anum/export-home

Hõplsasti saab käsu share abil veenduda, kas failisüsteem tekkis NFS serveri poolt välja jagatud failisüsteemide nimekirja, näiteks

# share
- /export/home rw "kasutajate kodukataloogid"  
- /var/log/postgresql   ro   "pg logid" 

Selliselt välja jagatud failisüsteemi kasutamine toimub NFS kliendi poolt samuti kui tavalise NFS serveri poolt välja jagatud failisüsteemi kasutamine.

Alates versioonist Solaris 10 8/07 (u4) saab hõlpsasti jagada võrku iscsi targetina ZFS volume'it, selleks tuleb öelda

bash# zfs create -V 20g tank/iscsishare
bash# zfs set shareiscsi=on tank/iscsishare
bash# iscsitadm list target
Target: tank/iscsishare
    iSCSI Name: iqn.1986-03.com.sun:02:875dc199-fcc0-e9f3-d548-b18bd837c9d5
    Connections: 0

Tõsi, tundub, et ZFS volume'ile vastavale ressursile ei pääse praktiliselt muud moodi ligi kui üle iscsi.

Targeti eemaldamiseks tuleb öelda

bash# zfs set shareiscsi=off tank/iscsishare
bash# zfs destroy tank/iscsishare

NFS ja iSCSI protokolliga ZFS ressursi võrku jagamisel leiab aset Solarisele iseloomulikuna, et automaatselt käivitatakse sobivalt seadistatud NFS ja iSCSI targeti deemonid.

ZFS failisüsteemi kasutamine Solarise non-global tsoonis

ZFS failisüsteemi kasutamiseks Solarise non-global tsooni juures saab tsooniga seostada kas ZFS failisüsteemi enda või ZFS dataset'i. Viimasel juhul on tsooni administraatoril enam võimalusi vastava ZFS ressursiga tegeleda, nt saab ta moodustada failisüsteeme ja snapshotte tsooni sees.

Näiteks teeme nii, et ZFS failisüsteemi tank/data saab kasutada tsoonis 'tsooninimi' ning ta on seal kataloogi /data alt ligipääsetav

 bash# zfs set mountpoint=legacy tank/data
 bash# zonecfg -z tsooninimi
 ...
 zonecfg:tsoooninimi> add fs
 zonecfg:tsoooninimi:fs> set type=zfs
 zonecfg:tsoooninimi:fs> set special=tank/data
 zonecfg:tsoooninimi:fs> set dir=/data
 zonecfg:tsoooninimi:fs> end

Aga soovides delegeerida non-global tsoonile tank/data kui dataset'i tuleb öelda

 zonecfg:tsooninimi> add dataset
 zonecfg:tsooninimi:dataset> set name=tank/data
 zonecfg:tsooninimi:dataset> end

Tsooni delegeeritud failisüsteemidega ei saa globaalses tsoonis turvakaalutlustega ennem tegeleda, kui tsooni seadistustest on vastav dataset eemaldatud ning lisaks on ka eemaldatud zoned lipp

bash# zfs set zoned=off tank

kus tank on dataset'i nimi.

zpooli versiooni uuendamine

Solarise operatsioonisüsteemi uuendamisel võib juhtuda, et zfs tarkvara toetab uuemat zfs failisüsteemi versiooni kui kasutusel on. Sellest saab teada käsuga

bash# zpool status export
 pool: export
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.

Nagu arvuti ütleb, versiooni uuendamine toimub selliselt

bash# zpool upgrade export
This system is currently running ZFS version 3.
Successfully upgraded 'export' from version 2 to version 3

Kõvaketta vahetamine zpoolis

Kõvaketta vahetamiseks zpoolis tuleb öelda

zpool replace -f anum c5t1d0 c5t2d0

mille tulemusena zpoolis anum asendatakse esimene seade teisega. Samal ajal zpooli olekut vaadates saab teada kui kaugel asendamine on

bash# zpool status
 pool: anum
state: ONLINE
status: One or more devices is currently being resilvered.  The pool will
        continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
 scrub: resilver in progress, 12.91% done, 0h11m to go
config:

       NAME           STATE     READ WRITE CKSUM
       anum           ONLINE       0     0     0
         mirror       ONLINE       0     0     0
           c0t4d0     ONLINE       0     0     0
           replacing  ONLINE       0     0     0
             c5t1d0   ONLINE       0     0     0
             c5t2d0   ONLINE       0     0     0

errors: No known data errors

Seadme lisamine zpooli

Seadme lisamiseks tuleb öelda, kusjuures poolilt moodustatud failisüsteemid võivad olla samal ajal külge ühendatud

 # zpool add poolinimi seadmenimi

Seejuures peab arvestama, et eemaldada saab vaid redundantseid seadmeid.

Näiteks kui on olemas pool

  NAME          STATE     READ WRITE CKSUM
       tank          ONLINE       0     0     0
         mirror      ONLINE       0     0     0
           c0t0d0s4  ONLINE       0     0     0
           c1t0d0s4  ONLINE       0     0     0
         mirror      ONLINE       0     0     0
           c0t1d0s4  ONLINE       0     0     0
           c1t1d0s4  ONLINE       0     0     0

siis sinna ühe mirroripaari lisamiseks tuleb öelda

 # zpool add tank mirror c0t0d0s3 c1t0d0s3

ning tulemuseks on

  NAME          STATE     READ WRITE CKSUM
       tank          ONLINE       0     0     0
         mirror      ONLINE       0     0     0
           c0t0d0s4  ONLINE       0     0     0
           c1t0d0s4  ONLINE       0     0     0
         mirror      ONLINE       0     0     0
           c0t1d0s4  ONLINE       0     0     0
           c1t1d0s4  ONLINE       0     0     0
         mirror      ONLINE       0     0     0
           c0t0d0s3  ONLINE       0     0     0
           c1t0d0s3  ONLINE       0     0     0

Pooli import ja eksport

Kui arvutile lisada kõvakettad, mis omavahel moodustavad pooli, siis saab seda tutvustada operatsioonisüsteemile käsuga

test-baas:~# zpool import
  pool: teine_anum
    id: 3176370179574190780
 state: ONLINE
status: The pool is formatted using an older on-disk version.
action: The pool can be imported using its name or numeric identifier, though
        some features will not be available without an explicit 'zpool upgrade'.
        The pool may be active on on another system, but can be imported using
        the '-f' flag.
config:
        teine_anum  ONLINE
          c7t0d0s3  ONLINE
          c6t8d0s3  ONLINE

Ning kui sobib, siis teha kasutatavaks öeldes

bash# zpool import teine_anum

Kui imporditav pool arvab enda kohta nime, mis on juba kasutusel, siis tuleb öelda

bash# zpool import teine_anum uus_pooli_nimi

Kusjuures, kui sedasi külge ühendatava pooli sees on kirjeldatud failisüsteemid, mille külgeühenduspunkt ei ole töötavas operatsioonisüsteemis tühi, siis ei toimu külgeühendamist ja saab sarnase teate

bash# zpool import -f teine_anum          
cannot mount '/data': directory is not empty

Kui aga on plaanist pooli moodustavad kõvakettad süsteemist eemaldada, tuleb öelda

bash# zpool export anum

Probleemid

Kui zfs mingil põhjusel nö eksib väga ära, siis võib arvuti bootimine olla vägagi raskendatud. Aitab bootida nullindasse milestone'i, sarnaselt

{0} ok boot /sbus@7,0/SUNW,fas@3,8800000/sd@2,0 -m milestone=none

sisestada juurkasutaja parool ning eemaldada fail

/etc/zfs/zpool.cache

Iseenesest jäävad zfs andmed selle liigutuse tulemusel hävitamata, kuid ilmselt on seal midagi suhteliselt katki ning nad vajavad oskuslikku lähenemist.

Kui pooli moodustamisel vastab süsteem, et

bash# zpool create tank c6t8d0 c7t0d0 c7t5d0
invalid vdev specification
use '-f' to override the following errors:
/dev/dsk/c6t8d0s0 contains a ufs filesystem.
/dev/dsk/c6t8d0s2 contains a ufs filesystem.
/dev/dsk/c6t8d0s3 is part of exported or potentially active ZFS pool kolmas_anum. Please see zpool(1M).

ning on teada, et võib neid asjaolusid mitte arvestad, siis sobib kasutada create järel võtit -f

bash# zpool create -f tank c6t8d0 c7t0d0 c7t5d0

Kasutamine CSW tarkvaraga majandamisel

CSW paketid paigaldatakse reeglina kataloogi /opt/csw kusjuures paketihaldusega seotud muudatused fikseeritakse kataloogis /var/sadm, st samas kohas koos nt SUNW pakettidega. Kui need kataloogid paigutada ZFS failisüsteemidele, siis on CSW tarkvara muudatuste tegemisel võimalus suhteliselt hõlpsasti kasutades sobivalt ZFS snapshotte neid muudatusi vajadusel tagasi võtta.

Lisaks, /export ja /usr/local kataloogide pidamine ZFS peal võib samuti anda süsteemi haldamisel juurde paindlikkust.