FreeBSD – ZFS beállítások

A ZFS a fájlrendszer, a Sun egyik nagy találmánya, amelyet 2005 elején dobtak be a nagy közösbe, az OpenSolaris részeként lett nyílt forrású CDDL licenc alatt.

Finomhangolás

A ZFS támogatás nem igényel különösebb beállítást a rendszer részéről, de a /boot/loader.conf fájlba érdemes felvennünk az alábbi bejegyzéseket:

vm.kmem_size=1536M
vfs.zfs.arc_max=512M
vfs.zfs.prefetch_disable=1
vfs.zfs.txg.timeout=5

A ZFS betöltéséhez pedig szükséges (/etc/rc.conf):

zfs_enable="YES"

Ezek után egy újraindítás célszerű, egyrészt rövidebb idő, mint beállítani a megfelelő paramétereket parancssorból, másrészt ellenőrzésképp érdemes megtenni.

ZFS kötetek és fájlrendszerek

A telepítéskor létrehoztunk egy /bpool (base pool) és egy /dpool (data pool) helyre csatolt fájlrendszert, ezeket csatoljuk le majd töröljük ki az /etc/fstab fájlból (előtte írjuk le az eszközök neveit, mert arra szükségünk lesz). Ezekből ZFS kötet (pool) lesz, a kötet a ZFS egyik alapegysége, egy ZFS kötethez bármikor hozzáadhatunk új eszközt, kivehetünk belőle eszközt, kijelölhetünk tartalék eszközt, ésatöbbi. A kötetek kezelésére a zpool parancs szolgál. A fentebb megejtett újraindítás után újra belépve létre kell hozni a megfelelő ZFS köteteket:

# zpool create bpool da0s2d
# zpool create dpool da0s2e

# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
bpool                  7.94G    110K   7.94G     0%  ONLINE     -
dpool                   210G    110K    210G     0%  ONLINE     -

# zpool status
  pool: bpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        bpool       ONLINE       0     0     0
          da0s2d    ONLINE       0     0     0

errors: No known data errors

  pool: dpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        dpool       ONLINE       0     0     0
          da0s2e    ONLINE       0     0     0

errors: No known data errors

A bpool kötetre kerül a /usr, a /var és a /tmp fájlrendszer. A fájlrendszer a ZFS másik egysége, amelyet zfs parancs segítségével tudunk macerálni. Hozzuk létre az említett fájlrendszereket:

# zfs create bpool/tmp
freebsd# zfs create bpool/usr
freebsd# zfs create bpool/var
freebsd# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
bpool       182K  7.81G    21K  /bpool
bpool/tmp    18K  7.81G    18K  /bpool/tmp
bpool/usr    18K  7.81G    18K  /bpool/usr
bpool/var    18K  7.81G    18K  /bpool/var
dpool       105K   207G    18K  /dpool

Ezen beállítások után ismét újra kell indítanunk a telepített rendszert, de most single-user módban kell ezt megejteni (a FreeBSD menüben a negyedik pont). A single-user módban a ZFS kötetek nincsenek felcsatolva, jobban mondva egyetlen fájlrendszer sincs felcsatolva, még a / is csak olvasható módon.

A ZFS a hostid alapján keresi meg a saját köteteit, ezért ha hostid nélkül kezdenénk neki a ZFS felhasználásnak, akkor látszólag elvesznek a köteteink, ekkor ki kell adnunk a `zpool import -a` parancsot, hogy beimportálja azokat.

Nézzük meg, hogy minden rendben van-e:

# /etc/rc.d/hostid start
Setting hostuuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Setting hostid: 0xFFFFFFFF.
# /etc/rc.d/zfs start
# zfs list
NAME        USED  AVAIL  REFER  MOUNTPOINT
bpool       182K  7.81G    21K  /bpool
bpool/tmp    18K  7.81G    18K  /bpool/tmp
bpool/usr    18K  7.81G    18K  /bpool/usr
bpool/var    18K  7.81G    18K  /bpool/var
dpool       105K   207G    18K  /dpool

A ZFS érdekessége, hogy nem kell a fájlrendszer használatához /etc/fstab bejegyzés, ezt maga a fájlrendszer tárolja. Ha megvan minden, amire szükségünk van, akkor másoljuk át a hivatkozott fájlrendszereket, nevezzük át a régi helyén (biztos-ami-biztos), majd adjunk meg új csatolási pontot a ZFS fájlrendszereknek:

# cp -Rp /tmp/ /bpool/tmp/
# cp -Rp /usr/ /bpool/usr/
# cp -Rp /var/ /bpool/var/

# mount -u /
# mv /tmp /tmp.install
# mv /usr /usr.install
# mv /var /var.install

# zfs set mountpoint=/tmp bpool/tmp
# zfs set mountpoint=/usr bpool/usr
# zfs set mountpoint=/var bpool/var

# df -h
Filesystem              Size    Used   Avail Capacity  Mounted on
/dev/da0s2a             3.9G    377M    3.2G    10%    /
devfs                   1.0K    1.0K      0B   100%    /dev
bpool                   6.8G      0B    6.8G     0%    /bpool
dpool                   207G      0B    207G     0%    /dpool
bpool/tmp               6.8G      0B    6.8G     0%    /tmp
bpool/usr               7.0G    214M    6.8G     3%    /usr
bpool/var               6.9G     70M    6.8G     1%    /var

Az eredeti, de átnevezett könyvtárakat akár megtarthatjuk, ha van helyünk elég, de ZFS probléma esetén van még egy rescue rendszerünk, így nem annyira lényeges ezen könyvtárak tárolása, a rendszerfrissítések során úgyis eltávolodik az eredetileg telepített és a futó rendszer.

A ZFS előnyei röviden

Nos, kicsit fésüljük meg a ZFS fájlrendszeren lévő könyvtárakat, első körben hozzunk létre egy snapshot-ot, amely a telepítéskori állapotot tartalmazza:

# zfs snapshot bpool/usr@install
# zfs snapshot bpool/var@install
# zfs snapshot bpool/tmp@install

# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
bpool               214M  7.60G    18K  /bpool
bpool/tmp            23K  7.60G    23K  /tmp
bpool/tmp@install      0      -    23K  -
bpool/usr           214M  7.60G   214M  /usr
bpool/usr@install      0      -   214M  -
bpool/var           262K  7.60G   244K  /var
bpool/var@install    17K      -   244K  -
dpool               105K   207G    18K  /dpool

Ezek a pillanatfelvételek nem foglalnak felesleges helyet, csak a jelenkori állapotot rögzítik, célszerű ezt megtenni (később újabb snapshot készíthető, ha újabb stabil állapotba kerül a rendszer). Egy létrehozott snapshot önmagában kevés a boldogsághoz, ha használni is szeretnénk, akkor klónozni kell:

# zfs clone bpool/usr@install bpool/usr_at_install

# df -h
Filesystem              Size    Used   Avail Capacity  Mounted on
[...]
bpool/usr_at_install    7.8G    214M    7.6G     3%    /bpool/usr_at_install

# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
bpool                  214M  7.60G    19K  /bpool
bpool/tmp               23K  7.60G    23K  /tmp
bpool/tmp@install         0      -    23K  -
bpool/usr              214M  7.60G   214M  /usr
bpool/usr@install       38K      -   214M  -
bpool/usr_at_install      0  7.60G   214M  /bpool/usr_at_install
bpool/var              278K  7.60G   244K  /var
bpool/var@install     33.5K      -   244K  -
dpool                  105K   207G    18K  /dpool

A ports tartalma jól tömöríthető, ezért kevesebb helyet foglal, ha tömörített ZFS fájlrendszeren tároljuk:

# zfs create bpool/usr/ports
# zfs set compression=gzip-9 bpool/usr/ports

Hozzunk létre és másoljuk át a /usr/local fájlrendszert is, de ezt nem fontos tömöríteni, illetve egy új ZFS fájlrendszert a FreeBSD fordításához szükséges /usr/obj csatolási pontra.

# rm -R /usr/local
# zfs create bpool/usr/local
# cp -Rp /bpool/usr_at_install/local/ /usr/local/
# zfs create bpool/usr/obj

Ha mindez megvan, célszerű egy újraindítást is megejteni, hogy lássuk minden helyesen működik-e. Ez túlzott biztonságnak tűnhet, de ha egy későbbi újraindításkor problémával szembesül az operációs rendszer, akkor nem biztos, hogy pont a közelében leszünk…

Azonban még nem végeztünk a ZFS kapcsán, érdemes körülnézni, hogy mi mennyi helyet foglal:

# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
[...]
bpool/usr          1.61G  2.24G   442M  /usr
bpool/usr@install   848M      -  1.26G  -
bpool/usr/local    78.9M  2.24G  78.9M  /usr/local
bpool/usr/obj        18K  2.24G    18K  /usr/obj
bpool/usr/ports     133M  2.24G   133M  /usr/ports
bpool/usr/src       151M  2.24G   151M  /usr/src
[...]

# df -h
Filesystem           Size    Used   Avail Capacity  Mounted on
[...]
bpool/usr            2.7G    442M    2.2G    16%    /usr
bpool/usr/local      2.3G     79M    2.2G     3%    /usr/local
bpool/usr/obj        2.2G      0B    2.2G     0%    /usr/obj
bpool/usr/ports      2.4G    133M    2.2G     5%    /usr/ports
bpool/usr/src        2.4G    151M    2.2G     6%    /usr/src
[...]

Hm… van itt ellentmondás bőven. A ZFS szerint a /usr 1.6GBájtot foglal el, a df szerint pedig csak 442MBájtot illene. A különbséget megtaláljuk a bpool/usr@install nevű snapshot-ban, hiszen ez továbbra is tárolja a fájlokat, amelyeket töröltünk, és egy másik ZFS fájlrendszerbe másoltunk vissza… mivel minden jó és szép, töröljük és hozzuk létre újra a snapshot-ot:

# zfs destroy bpool/usr@install
cannot destroy 'bpool/usr@install': snapshot has dependent clones
use '-R' to destroy the following datasets:
bpool/usr_at_install

# zfs destroy bpool/usr_at_install
# zfs destroy bpool/usr@install
# zfs snapshot bpool/usr@install

# zfs list
NAME                USED  AVAIL  REFER  MOUNTPOINT
bpool               808M  3.12G    18K  /bpool
bpool/tmp            45K  3.12G    23K  /tmp
bpool/tmp@install    22K      -    23K  -
bpool/usr           805M  3.12G   442M  /usr
bpool/usr@install      0      -   442M  -
bpool/usr/local    78.9M  3.12G  78.9M  /usr/local
bpool/usr/obj        18K  3.12G    18K  /usr/obj
bpool/usr/ports     133M  3.12G   133M  /usr/ports
bpool/usr/src       151M  3.12G   151M  /usr/src
bpool/var          1.39M  3.12G  1.22M  /var
bpool/var@install   172K      -   265K  -
dpool               105K  1.95G    18K  /dpool

Rögtön több helyünk lett… 🙂

Leave a Comment

Scroll to Top