options KVA_PAGES=512
20. Fejezet - Támogatott állományrendszerek
This translation may be out of date. To help with the translations please access the FreeBSD translations instance.
Table of Contents
20.1. Áttekintés
Az állományrendszerek szerves részét képezik napjaink operációs rendszereinek. Segítségükkel a felhasználók adatokat tölthetnek fel és tárolhatnak a számítógépen, szabályozhatják a hozzáférésüket, és természetesen mûködtethetik a merevlemezeiket. A különféle operációs rendszerekben általában azért annyi közös, hogy mindannyiukhoz tartozik egy natív, vagyis általuk alapból ismert állományrendszer. A FreeBSD esetében ezt konkrétan a Fast File System vagy röviden FFS, amely az eredeti Unix™ File System, vagy más néven UFS megoldásain alapszik. A FreeBSD tehát a merevlemezeken ebben a natív állományrendszerben tárol adatokat.
A FreeBSD természetesen ezen kívül még ismer számos egyéb állományrendszert, ezáltal képes adatokat olvasni más operációs rendszerek részérõl is kezelhetõ partíciókról, például helyi USB-eszközökrõl, flashkártyákról és merevlemezekrõl. Továbbá ismeri néhány más operációs rendszer natív állományrendszerét, mint például a Linux® Extended File System (EXT) vagy éppen a Sun™ Z File System (ZFS).
FreeBSD alatt az egyes állományrendszerek ismerete változó. Bizonyos esetekben elegendõ csupán egy megfelelõ modul betöltése, máskor viszont egy komplett eszközkészlet segítségével tudunk velük dolgozni. Ez a fejezet igyekszik a Sun™-féle Z állományrendszerrel kezdõdõen bemutatni a FreeBSD felhasználói számára más állományrendszerek használatát.
A fejezet elolvasása során megismerjük:
a natív és támogatott állományrendszerek közti különbségeket;
a FreeBSD által ismert állományrendszereket;
hogyan engedélyezzünk, állítsunk be és érjünk el nem natív állományrendszereket.
A fejezet elolvasásához ajánlott:
a UNIX® és FreeBSD alapjainak ismerete (A UNIX alapjai);
a rendszermag konfigurációjának és fordításának alapvetõ fogásainak ismerete (A FreeBSD rendszermag testreszabása);
a különbözõ külsõ fejlesztésû szoftverek telepítésének ismerete (Alkalmazások telepítése. csomagok és portok);
a lemezek és egyéb tárolóeszközök, valamint a FreeBSD alatt az eszközök elnevezésének minimális ismerete (Háttértárak).
20.2. A Z állományrendszer (ZFS)
A Sun™ Z állományrendszere egy új, közös tárolási módszeren nyugvó technológia. Ez annyit jelent a gyakorlatban, hogy mindig csak annyi helyet foglal, amennyire az adatoknak közvetlenül szüksége van. Emellett úgy alakították ki, hogy az adatok épségét minél inkább védje, ezért például megtalálhatjuk benne a pillanatképek készítését, a másolatok létrehozását és az adatok sértetlenségének ellenõrzését. Továbbá egy RAID-Z néven bemutatott új replikációs modellt is támogat. A RAID-Z alapvetõen a RAID-5 megoldásához hasonlít, azonban írás során keletkezõ hibák ellen igyekszik védelmet nyújtani.
20.2.1. A ZFS finomhangolása
A ZFS funkcióit megvalósító alrendszer alapértelmezés szerint meglehetõsen sok erõforrást kíván, ezért nem árt a legjobb hatékonyságra behangolnunk a mindennapokban felmerülõ igények mentén. Mivel ez még egy fejlesztés és tesztelés alatt álló része a FreeBSD-nek, elképzelhetõ, hogy ez a jövõben változik, viszont jelen pillanatban a következõ lépéseket javasoljuk.
20.2.1.1. Memória
Hasznos, ha a rendszerünkben legalább 1 GB memória található, de inkább 2 vagy több az ajánlott. Az itt szereplõ példákban ehelyett azonban mindenhol csupán 1 GB-ot feltételezünk.
Néhányaknak sikerült 1 GB-nál kevesebb központi memóriával is használni ezt az állományrendszert, azonban ilyenkor nagyon könnyen elõfordulhat, hogy komolyabb terhelés esetén a FreeBSD a memória elfogyása miatt egyszerûen összeomlik.
20.2.1.2. A rendszermag beállításai
A rendszermag konfigurációs állományából javasolt eltávolítani az összes nem használt meghajtót és funkciót. A legtöbb meghajtó egyébként is elérhetõ modul formájában, és a /boot/loader.conf állományon keresztül minden gond nélkül betölthetõek.
Az i386™ architektúránál szükségünk lesz az alábbi konfigurációs beállítás megadására, majd a rendszermag újrafordítására, végül a rendszer újraindítására:
Ezzel az opcióval a rendszermag címterét növeljük meg, aminek eredményeképpen a vm.kvm_size
változót immáron az eredetileg 1 GB-os (PAE használata esetén pedig 2 GB-os) határ felé tudjuk állítani. Az itt megadandó értéket úgy tudjuk meghatározni, ha a beállítani kívánt méret MB-okban számolt értékét elosztjuk néggyel. A példában tehát az 512
egy 2 GB nagyságú címteret ad meg.
20.2.1.3. A rendszertöltõ beállításai
A kmem címterét az összes FreeBSD által ismert architektúra esetében érdemes megnövelnünk. A teszteléshez használt rendszeren 1 GB fizikai memória állt rendelkezésre, itt a /boot/loader.conf állományban a következõ értékek megadásával minden remekül mûködött:
vm.kmem_size="330M" vm.kmem_size_max="330M" vfs.zfs.arc_max="40M" vfs.zfs.vdev.cache.size="5M"
A ZFS finomhangolásával kapcsolatos további javasolatokat a http://wiki.freebsd.org/ZFSTuningGuide címen olvashatunk.
20.2.2. A ZFS használata
A Z állományrendszerhez létezik egy olyan mechanizmus, amelyen keresztül már a FreeBSD indítása során el tudjuk végezni a közös tárolók csatlakoztatását:
# echo 'zfs_enable="YES"' >> /etc/rc.conf
# /etc/rc.d/zfs start
A leírás fennmaradó részében feltételezzük, hogy három SCSI-lemezünk van, amelyeket rendre a da0, da1 és da2 eszközök formájában tudunk elérni. Az IDE lemezek tulajdonosainak értelemszerûen itt majd az ad eszközneveket kell használniuk a SCSI-eszközök hivatkozásai helyett.
20.2.2.1. Egyetlen közös tároló használata
A zpool
kiadásával egyetlen lemezen is létre tudunk hozni egy egyszerû, nem redundáns ZFS partíciót:
# zpool create minta /dev/da0
Az új közös tárterület a df
parancs felhasználásával rögtön láthatóvá válik:
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235230 1628718 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032846 48737598 2% /usr
minta 17547136 0 17547136 0% /minta
A parancs kimenetében tisztán láthatjuk, hogy a minta
nevû tároló nem csak egyszerûen elkészült, hanem egyúttal csatolódott. Innentõl már a többi állományrendszerhez hasonlóan tetszõlegesen elérhetõ, az alábbi példához hasonlóan állományok hozhatóak rajta létre vagy listázható a tartalma:
# cd /minta
# ls
# touch proba
# ls -al
total 4
drwxr-xr-x 2 root wheel 3 Aug 29 23:15 .
drwxr-xr-x 21 root wheel 512 Aug 29 23:12 ..
-rw-r--r-- 1 root wheel 0 Aug 29 23:15 proba
Sajnos azonban ez a tároló még ki sem használja a ZFS által felkínált lehetõségeket. Ezért most hozzunk létre egy állományrendszert ezen a tárolón belül és engedélyezzük rajta a tömörítést:
# zfs create minta/tomoritett
# zfs set compression=gzip minta/tomoritett
A minta/tomoritett
most már egy tömörített Z állományrendszer. Próbáljuk ki mit tud, és másoljunk néhány nagyobb méretû állományt a /minta/tomoritett könyvtárba.
Ezután a tömörítés akár ki is kapcsolható:
# zfs set compression=off minta/tomoritett
Az állományrendszer leválasztásához adjuk ki a lenti parancsot, majd ellenõrizzük az eredményét a df
használatával:
# zfs umount minta/tomoritett
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235232 1628716 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
minta 17547008 0 17547008 0% /minta
Tegyük ismét elérhetõvé és csatlakoztassuk újra az állományrendszert, majd nézzük meg az eredményt a df
paranccsal:
# zfs mount minta/tomoritett
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
minta 17547008 0 17547008 0% /minta
minta/tomoritett 17547008 0 17547008 0% /minta/tomoritett
A közös terület és az állományrendszer mellesleg a mount
parancs kimenetébõl is megfigyelhetõ:
# mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
minta on /minta (zfs, local)
minta/tomoritett on /minta/tomoritett (zfs, local)
Látható, hogy a létrehozásuk után a Z állományrendszerek teljesen hétköznapi módon viselkednek, de természetesen további lehetõségek is elérhetõek hozzájuk. A következõ példában adat
néven készítünk egy új állományrendszert. Mivel ide majd nagyon fontos állományokat akarunk elhelyezni, állítsuk be, hogy minden adatblokkból két példány legyen:
# zfs create minta/adat
# zfs set copies=2 minta/adat
A df
újbóli kiadásával most már látható is ez az állományrendszer és annak tárfoglalása:
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235234 1628714 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032864 48737580 2% /usr
minta 17547008 0 17547008 0% /minta
minta/tomoritett 17547008 0 17547008 0% /minta/tomoritett
minta/adat 17547008 0 17547008 0% /minta/adat
Vegyük észre, hogy a közös területen levõ állományrendszerek mindegyikén ugyanannyi szabad terület van. A df
segítségével a késõbbiekben remekül megfigyelhetõ lesz, hogy az egyes állományrendszerek mindig csak annyi területet foglalnak el a közös területbõl, amennyire abban a pillanatban ténylegesen szükségünk van. A Z állományrendszerek esetén megszûnik a partíciók és kötetek fogalma, és több állományrendszer tárolódik egyazon közös területen. Ha már nem akarjuk használni, egyszerûen csak töröljük le az állományrendszereket és ezt a közös tárolót:
# zfs destroy minta/tomoritett
# zfs destroy minta/adat
# zpool destroy minta
Nyilván tapasztalhattunk már, hogy a lemezeink olykor menthetetlenül meghibásodnak. Amikor egy lemezes meghajtó tönkremegy, a rajta tárolt adatok általában elvesznek. Az ilyen jellegû kellemetlenségek elkerülésének egyik módja az ún. RAID-tömbök építése. A következõ szakaszban bemutatjuk, hogy a Z állományrendszerek esetén hogyan tudunk ilyen tömböket készíteni.
20.2.2.2. RAID-Z tömbök
Korábban már utaltunk rá, hogy ebben a szakaszban három SCSI-lemez, vagyis a da0, da1 és da2 eszközök használatát feltételezzük (vagy természetesen ad0 és így tovább, ha IDE-lemezeket használunk). Egy RAID-Z formátumú közös tároló készítéséhez a következõ parancsot kell kiadni:
# zpool create tarolo raidz da0 da1 da2
A Sun™ ajánlása szerint egy RAID-Z konfigurációban legalább három, legfeljebb kilenc lemezt javasolt alkalmazni. Ha egyetlen közös tárolóban esetleg tíznél több lemezt szeretnénk felhasználni, akkor érdemes inkább kisebb RAID-Z csoportokra felosztani ezeket. Ha viszont csak két lemezünk van, de továbbra is redundanciára lenne szükségünk, hozzunk helyette létre egy ZFS tükrözést. Ezzel kapcsolatban részletesebben a zpool(8) man oldalon keresztül tájékozódhatunk. |
Ennek hatására tehát keletkezik egy tarolo
nevû Z-tároló. Ez a korábbiakhoz hasonló módon ellenõrizhetõ is a mount(8) és df(1) parancsokon keresztül. Természetesen az iménti listába további lemezeszközök tetszõlegesen felvehetõek. Most hozzunk létre ezen a közös területen egy felhasznalok
nevû állományrendszert, ahová majd a felhasználók adatait fogjuk tenni:
# zfs create tarolo/felhasznalok
Miután ezzel megvagyunk, az imént létrehozott állományrendszerre nyugodtan beállíthatunk tömörítést és biztonsági másolatokat. Ebben az alábbi parancsok lesznek a segítségünkre:
# zfs set copies=2 tarolo/felhasznalok
# zfs set compression=gzip tarolo/felhasznalok
Ezt követõen költöztessük át a felhasználókat, vagyis másoljuk át az adataikat ide és hozzuk létre a megfelelõ szimbolikus linkeket:
# cp -rp /home/* /tarolo/felhasznalok
# rm -rf /home /usr/home
# ln -s /tarolo/felhasznalok /home
# ln -s /tarolo/felhasznalok /usr/home
A felhasználók adatai immáron a frissen létrehozott /tarolo/felhasznalok állományrendszeren tárolódnak. Próbáljuk ki, hozzunk létre egy új felhasználót és jelentkezzünk be vele.
Készítsünk most egy pillanatképet is, amelyet aztán késõbb szükség esetén vissza tudunk állítani:
# zfs snapshot tarolo/felhasznalok@08-08-30
A snapshot
csak valós állományrendszerekkel mûködik, könyvtárakra vagy állományokra nem. A nevében a @
karakter választja el egymástól a hozzá tartozó címkét az állományrendszer vagy kötet nevétõl. Ha netalán a felhasználói könyvtárak valamiért megsérültek volna, a következõ paranccsal állíthatóak vissza:
# zfs rollback tarolo/felhasznalok@08-08-30
Az adott idõpontban aktív pillanatképeket az adott állományrendszer .zfs/snapshot könyvtárában találhatjuk meg. Például az elõbb készített pillanatkép az alábbi paranccsal nézhetõ meg:
# ls /tarolo/felhasznalok/.zfs/snapshot
Ha ebbõl elindulunk, akkor pillanatok alatt írható egy olyan szkript, amely a felhasználók adatairól havonta készít egy pillanatképet. Ilyenkor azonban fontos számításba vennünk, hogy az idõvel felgyülemlõ pillanatképek rengeteg helyet el tudnak foglalni. A korábbi pillanatkép így távolítható el:
# zfs destroy tarolo/felhasznalok@08-08-30
Miután alaposan kipróbáltuk a /tarolo/felhasznalok néven létrehozott állományrendszerünket, állítsuk be véglegesen ez eddigi /home állományrendszer helyére:
# zfs set mountpoint=/home tarolo/felhasznalok
Ekkor a df
és mount
parancsok használatával meggyõzõdhetünk róla, hogy ezt az állományrendszert innentõl már valóban a /home könyvtárnak tekintjük:
# mount
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1d on /usr (ufs, local, soft-updates)
tarolo on /tarolo (zfs, local)
tarolo/felhasznalok on /home (zfs, local)
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/ad0s1a 2026030 235240 1628708 13% /
devfs 1 1 0 100% /dev
/dev/ad0s1d 54098308 1032826 48737618 2% /usr
tarolo 26320512 0 26320512 0% /tarolo
tarolo/felhasznalok 26320512 0 26320512 0% /home
Ezzel lényegében befejeztük a RAID-Z tömb konfigurációját. Az állományrendszerek állapotára vonatkozóan a periodic(8) alkalmazásával akár naponta kérhetünk ellenõrzést:
# echo 'daily_status_zfs_enable="YES"' >> /etc/periodic.conf
20.2.2.3. A RAID-Z helyreállítása
Minden szoftveres RAID implementáció kínál valamilyen megoldást az állapotának ellenõrzésére, ez alól tulajdonképpen a ZFS sem kivétel. A RAID-Z eszközök állapota a következõ paranccsal kérdezhetõ le:
# zpool status -x
Ezt az üzenetet láthatjuk, amikor minden tároló kifogástalanul mûködik és semmilyen probléma sincs:
all pools are healthy
Ha viszont valamilyen gond lenne valamelyik lemezzel, például leállt, akkor az elõbbi parancs eredménye ehhez lesz hasonló:
pool: tarolo
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tarolo DEGRADED 0 0 0
raidz1 DEGRADED 0 0 0
da0 ONLINE 0 0 0
da1 OFFLINE 0 0 0
da2 ONLINE 0 0 0
errors: No known data errors
A válasz szerint az eszközt az adminisztrátor állította le. Ez ennél a példánál valóban igaz. Lemezeket a következõ módon lehet leállítani:
# zpool offline tarolo da1
Így miután leállítottuk a rendszert, a da1 eszköz cserélhetõ. A rendszer soron következõ indításakor ezzel a paranccsal tudjuk jelezni logikailag is a lemez cseréjét:
# zpool replace tarolo da1
Nézzük meg újra a tömb állapotát, de ezúttal a -x
kapcsoló megadása nélkül, mivel csak így fogjuk látni:
# zpool status tarolo
pool: tarolo
state: ONLINE
scrub: resilver completed with 0 errors on Sat Aug 30 19:44:11 2008
config:
NAME STATE READ WRITE CKSUM
tarolo ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
errors: No known data errors
A példa szerint minden megfelelõen mûködik.
20.2.2.4. Az adatok ellenõrzése
Elõzetesen már szó esett róla, hogy a ZFS képes a tárolt adatok sértetlenségének ellenõrzésére. Az új állományrendszerek létrehozásánál ez a lehetõség automatikusan aktiválódik, de tetszés szerint letiltható:
# zfs set checksum=off tarolo/felhasznalok
Ez a lépés viszont nem feltétlenül jó döntés, mivel az adatintegritás megtartásához felhasznált ellenõrzõ összegek nagyon kevés helyet foglalnak és meglehetõsen hasznosak. Emellett semmilyen észlelhetõ lassulást nem okoznak az állományrendszer használata során. Ha engedélyezzük, a ZFS ilyen ellenõrzõ összegek segítségével folyamatosan figyelni tudja az adatok épségét. Ezt az ellenõrzést a scrub
paranccsal válthatjuk ki. Nézzük meg például a tarolo
esetében:
# zpool scrub tarolo
Ez a vizsgálat a tárolt adatok mennyiségétõl függõen nagyon sokáig is eltarthat, illetve rengeteg lemezmûveletet foglal magában, ezért egyszerre csak egy ilyen futtatása javasolt. Miután befejezõdött, a tároló állapota az eredményének megfelelõen frissül, amelyet közvetlenül utána le is kérdezhetünk:
# zpool status tarolo
pool: tarolo
state: ONLINE
scrub: scrub completed with 0 errors on Sat Aug 30 19:57:37 2008
config:
NAME STATE READ WRITE CKSUM
tarolo ONLINE 0 0 0
raidz1 ONLINE 0 0 0
da0 ONLINE 0 0 0
da1 ONLINE 0 0 0
da2 ONLINE 0 0 0
errors: No known data errors
A példában látható az utolsó ellenõrzés ideje. Ezen lehetõség használatával hosszú idõn keresztül szavatolni tudjuk az adataink épségét.
Last modified on: 2024. március 9. by Danilo G. Baio