560 lines
28 KiB
Text
560 lines
28 KiB
Text
---
|
|
title: "19. Fejezet - GEOM: A moduláris lemezszervező rendszer"
|
|
part: III. Rész Rendszeradminisztráció
|
|
prev: books/handbook/disks
|
|
next: books/handbook/filesystems
|
|
---
|
|
|
|
[[geom]]
|
|
= GEOM: A moduláris lemezszervező rendszer
|
|
:doctype: book
|
|
:toc: macro
|
|
:toclevels: 1
|
|
:icons: font
|
|
:sectnums:
|
|
:sectnumlevels: 6
|
|
:source-highlighter: rouge
|
|
:experimental:
|
|
:skip-front-matter:
|
|
:toc-title: Tartalom
|
|
:table-caption: Táblázat
|
|
:figure-caption: Ábra
|
|
:example-caption: Példa
|
|
:xrefstyle: basic
|
|
:relfileprefix: ../
|
|
:outfilesuffix:
|
|
:sectnumoffset: 19
|
|
|
|
ifeval::["{backend}" == "html5"]
|
|
:imagesdir: ../../../../images/books/handbook/geom/
|
|
endif::[]
|
|
|
|
ifeval::["{backend}" == "pdf"]
|
|
:imagesdir: ../../../../static/images/books/handbook/geom/
|
|
endif::[]
|
|
|
|
ifeval::["{backend}" == "epub3"]
|
|
:imagesdir: ../../../../static/images/books/handbook/geom/
|
|
endif::[]
|
|
|
|
include::shared/authors.adoc[]
|
|
include::shared/releases.adoc[]
|
|
include::shared/hu/mailing-lists.adoc[]
|
|
include::shared/hu/teams.adoc[]
|
|
include::shared/hu/urls.adoc[]
|
|
|
|
toc::[]
|
|
|
|
[[GEOM-synopsis]]
|
|
== Áttekintés
|
|
|
|
Ez a fejezet a FreeBSD-ben található GEOM rendszert mutatja be. Ez a rendszer tömöríti az általa is alkalmazott fontosabb RAID-vezérlõ segédprogramokat. A fejezet nem részletezi, hogy a GEOM konkrétan milyen módon kezeli és vezérli az I/O-t, ahogy azt sem, hogyan mûködik az alapjául szolgáló alrendszer vagy hogy néz ki annak forráskódja. Az ilyen jellegû információk a man:geom[4] man oldalon, valamint az ott felsorolt helyeken találhatóak meg. Továbbá, ez a fejezet magukról a RAID-konfigurációkról sem ad pontos tájékoztatást. Kizárólag csak a GEOM által is támogatott RAID-besorolásokról esik szó.
|
|
|
|
A fejezet elolvasása során megismerjük:
|
|
|
|
* a GEOM segítségével milyen fajtájú RAID támogatást érhetünk el;
|
|
* hogyan kell használni a rendszer által nyújtott alapvetõ segédeszközöket a különféle RAID-szintek konfigurálásához, karbantartásához és kezeléséhez;
|
|
* hogyan kell a GEOM-on keresztül tükrözni, csíkozni, titkosítani és távolról összekapcsolni lemezes eszközöket;
|
|
* hogyan kell a GEOM rendszerben összekapcsolt lemezeknél felmerülõ hibákat felderíteni.
|
|
|
|
A fejezet elolvasásához ajánlott:
|
|
|
|
* megérteni, hogyan kezeli a FreeBSD a lemezes eszközöket (crossref:disks[disks,Háttértárak]);
|
|
* ismerni, hogyan konfiguráljunk és telepítsünk egy új FreeBSD rendszermagot (crossref:kernelconfig[kernelconfig,A FreeBSD rendszermag testreszabása]).
|
|
|
|
[[GEOM-intro]]
|
|
== A GEOM bemutatása
|
|
|
|
A GEOM rendszer adatszolgáltatókon vagy speciális [.filename]#/dev#-állományokon keresztül hozzáférést és vezérlést tesz lehetõvé bizonyos osztályokhoz - Master Boot Recordokhoz, BSD-címkékhez stb. Számos szoftveres RAID konfiguráció támogatásával a GEOM transzparens elérést tesz lehetõvé mind az operációs rendszer, mind pedig az általa felkínált segédprogramok számára.
|
|
|
|
[[GEOM-striping]]
|
|
== RAID0 - Csíkozás
|
|
|
|
A csíkozás módszerét használjuk abban az esetben, amikor több lemezmeghajtót akarunk egyetlen kötetté összevonni. A GEOM lemezalrendszer szoftveres támogatást nyújt a RAID0, más néven a lemezcsíkozás megvalósításához.
|
|
|
|
Egy RAID0 rendszerben az adatokat blokkokra bontva írjuk fel a tömbben található lemezek között szétosztva. Így ahelyett, hogy meg kellene várnunk 256 kb-nyi adat egyetlen lemezre írását, egy RAID0 rendszerben egyszerre íródik 64 kb-nyi adat négy különbözõ lemezre, és ezáltal gyorsabb elérést szolgáltat. Ez a gyorsaság további lemezvezérlõk használatával még jobban fokozható.
|
|
|
|
Az egy RAID0-csíkozásban résztvevõ lemezek mindegyikének azonos méretûnek kell lennie, mivel az írásra és olvasásra irányuló I/O-kérések a párhuzamos kiszolgálás érdekében összefésülõdnek.
|
|
|
|
image::striping.png[Példa lemezcsíkozásra]
|
|
|
|
[.procedure]
|
|
====
|
|
*Procedure: Csíkozás kialakítása formázatlan ATA-lemezekkel*
|
|
|
|
. Töltsük be a [.filename]#geom_stripe.ko# modult:
|
|
+
|
|
[source,shell]
|
|
....
|
|
# kldload geom_stripe
|
|
....
|
|
+
|
|
. Bizonyosodjuk meg róla, hogy a rendszerünkben található egy szabad csatlakozási pont. Ha majd ezt a kötetet szánjuk rendszerünk gyökérpartíciójának, használjunk erre a célra egy másik könyvtárat, például a [.filename]#/mnt#-ot:
|
|
+
|
|
[source,shell]
|
|
....
|
|
# mkdir /mnt
|
|
....
|
|
+
|
|
. Keressük meg a csíkozásra felhasználni kívánt lemezek eszközneveit, és hozzunk létre belõlük egy új csíkozott eszközt. Például, ha két használatban nem levõ, particionálatlan ATA-lemezt, név szerint a [.filename]#/dev/ad2# és [.filename]#/dev/ad3# eszközöket akarjunk csíkozni:
|
|
+
|
|
[source,shell]
|
|
....
|
|
# gstripe label -v st0 /dev/ad2 /dev/ad3
|
|
Metadata value stored on /dev/ad2.
|
|
Metadata value stored on /dev/ad3.
|
|
Done.
|
|
....
|
|
+
|
|
. Az így létrejött új köteten most hozzunk létre egy általános címkét, vagy más néven egy partíciós táblát, és telepítsük fel rá a rendszer alapértelmezett rendszerindító programját:
|
|
+
|
|
[source,shell]
|
|
....
|
|
# bsdlabel -wB /dev/stripe/st0
|
|
....
|
|
+
|
|
. Ezzel meg kellett jelennie további másik két eszköznek is a [.filename]#/dev/stripe# könyvtárban, a [.filename]#st0# eszköz mellett. Ezek többek közt az [.filename]#st0a# és az [.filename]#st0c#. Itt már ki is tudunk alakítani egy állományrendszert az [.filename]#st0a# eszközön a `newfs` használatával:
|
|
+
|
|
[source,shell]
|
|
....
|
|
# newfs -U /dev/stripe/st0a
|
|
....
|
|
+
|
|
Sok-sok számot fogunk látni cikázni a képernyõn, majd néhány másodperc múlva befejezõdik a folyamat. Létrehoztuk a kötetet, ami most már készen áll a becsatolásra.
|
|
====
|
|
|
|
A kialakított lemezcsíkozást így tudjuk kézzel csatlakoztatni:
|
|
|
|
[source,shell]
|
|
....
|
|
# mount /dev/stripe/st0a /mnt
|
|
....
|
|
|
|
A csíkozott állományrendszert a rendszerindítás folyamán automatikusan becsatlakoztathatjuk, ha elhelyezzük az alábbi kötetinformációkat az [.filename]#/etc/fstab# állományba. Erre a célra [.filename]#stripe# néven létrehozunk egy állandó csatlakozási pontot:
|
|
|
|
[source,shell]
|
|
....
|
|
# mkdir /stripe
|
|
# echo "/dev/stripe/st0a /stripe ufs rw 2 2" \
|
|
>> /etc/fstab
|
|
....
|
|
|
|
A [.filename]#geom_stripe.ko# modult is automatikusan be kell tölteni a rendszerindítás során. Ehhez a következõ sort kell hozzáadni a [.filename]#/boot/loader.conf# állományhoz:
|
|
|
|
[source,shell]
|
|
....
|
|
# echo 'geom_stripe_load="YES"' >> /boot/loader.conf
|
|
....
|
|
|
|
[[GEOM-mirror]]
|
|
== RAID1 - Tükrözés
|
|
|
|
A tükrözés számos vállalatnál és háztartásban alkalmazott technológia, amely az adatok megszakítás nélküli lementésére használatos. Amikor tükrözést használunk, az egyszerûen csak arra utal, hogy a B lemez ugyanazokat az adatokat tartalmazza, mint az A lemez. Vagy amikor a C és D lemez tartalma egyezik meg az A és B lemezekével. Függetlenül a lemezek kiosztásától, itt az a lényeg, hogy az egyik lemez teljes területe vagy az egyik partíciója le van másolva. Késõbb az ezen a módon lementett adatok könnyen visszaállíthatóak anélkül, hogy ez a szolgáltatásban vagy az elérhetõségben bármilyen kimaradást okozna, és akár még fizikailag is biztonságosan tárolhatóak.
|
|
|
|
Elõször is szereznünk kell két egyforma méretû lemezt, valamint a példák feltételezik, hogy ezek a lemezek közvetlen elérésû (man:da[4]) SCSI-lemezek.
|
|
|
|
=== Az elsõdleges lemezek tükrözése
|
|
|
|
Tegyük fel, hogy a FreeBSD az elsõ, [.filename]#da0# nevû lemezmeghajtón található, és a man:gmirror[8] számára ezt szeretnénk megadni az elsõdleges adatok tárolásához.
|
|
|
|
A tükrözés létrehozásának megkezdése elõtt a `kern.geom.debugflags` man:sysctl[8] változó megfelelõ beállításával engedélyezzünk további nyomkövetési információkat és hozzáférést az eszközhöz:
|
|
|
|
[source,shell]
|
|
....
|
|
# sysctl kern.geom.debugflags=17
|
|
....
|
|
|
|
Most építsük fel a tükrözést. Kezdjük az egészet a metaadatok elhelyezésével az elsõdleges lemezmeghajtón, tehát tulajdonképpen az alábbi parancs segítségével hozzuk létre a [.filename]#/dev/mirror/gm# eszközt:
|
|
|
|
[WARNING]
|
|
====
|
|
|
|
A rendszerindító meghajtóról készített tükrözés adatvesztést okozhat a lemez utolsó szektorában. Ennek kockázata csökkenthetõ, ha közvetlenül a FreeBSD friss telepítése után állítjuk be a tükrözést.
|
|
====
|
|
|
|
[source,shell]
|
|
....
|
|
# gmirror label -vb round-robin gm0 /dev/da0
|
|
....
|
|
|
|
Erre a rendszernek a következõ módon kell reagálnia:
|
|
|
|
[source,shell]
|
|
....
|
|
Metadata value stored on /dev/da0.
|
|
Done.
|
|
....
|
|
|
|
A GEOM inicializálásához szükségünk lesz a [.filename]#/boot/kernel/geom_mirror.ko# modul betöltésére:
|
|
|
|
[source,shell]
|
|
....
|
|
# gmirror load
|
|
....
|
|
|
|
[NOTE]
|
|
====
|
|
A parancs sikeres lefutása után a [.filename]#/dev/mirror# könyvtárban létrehoz egy [.filename]#gm0# eszközleírót.
|
|
====
|
|
|
|
A [.filename]#geom_mirror.ko# modul betöltését így tudjuk engedélyezni a rendszer indításakor:
|
|
|
|
[source,shell]
|
|
....
|
|
# echo 'geom_mirror_load="YES"' >> /boot/loader.conf
|
|
....
|
|
|
|
Nyissuk meg az [.filename]#/etc/fstab# állományt, és cseréljük le benne az összes korábbi [.filename]#da0# hivatkozást az újonnan kialakított [.filename]#gm0# tükrözés eszközleírójával.
|
|
|
|
[NOTE]
|
|
====
|
|
Ha man:vi[1] szövegszerkesztõt használjuk, akkor a következõ módon tudjuk ezt egyszerûen megtenni:
|
|
|
|
[source,shell]
|
|
....
|
|
# vi /etc/fstab
|
|
....
|
|
|
|
A man:vi[1] indítása után a `:w /etc/fstab.bak` kiadásával készítsünk az [.filename]#fstab# állomány jelenlegi tartalmáról másolatot. Ezután a `:%s/da/mirror\/gm/g` parancs használatával cseréljük ki az összes [.filename]#da0# hivatkozást a [.filename]#gm0# eszköz nevére.
|
|
====
|
|
|
|
Az így keletkezõ [.filename]#fstab# állomány nagyjából következõ módon fog kinézni. Most teljesen független, hogy SCSI vagy ATA meghajtókkal dolgozunk, a RAID eszköz neve mindig [.filename]#gm# lesz:
|
|
|
|
[.programlisting]
|
|
....
|
|
# Eszköz Csatlakozási pont Típus Beállítások Dump Menet
|
|
/dev/mirror/gm0s1b none swap sw 0 0
|
|
/dev/mirror/gm0s1a / ufs rw 1 1
|
|
/dev/mirror/gm0s1d /usr ufs rw 0 0
|
|
/dev/mirror/gm0s1f /home ufs rw 2 2
|
|
#/dev/mirror/gm0s2d /store ufs rw 2 2
|
|
/dev/mirror/gm0s1e /var ufs rw 2 2
|
|
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
|
|
....
|
|
|
|
Indítsuk újra a rendszert:
|
|
|
|
[source,shell]
|
|
....
|
|
# shutdown -r now
|
|
....
|
|
|
|
Ennek megfelelõen a rendszer indítása közben a [.filename]#da0# eszköz helyett a [.filename]#gm0# eszközt fogjuk használni. Miután sikeresen befejezõdött a rendszerindítás, a `mount` parancs kiadásával a saját szemünkkel is meggyõzõdhetünk az eredményrõl:
|
|
|
|
[source,shell]
|
|
....
|
|
# mount
|
|
Filesystem 1K-blocks Used Avail Capacity Mounted on
|
|
/dev/mirror/gm0s1a 1012974 224604 707334 24% /
|
|
devfs 1 1 0 100% /dev
|
|
/dev/mirror/gm0s1f 45970182 28596 42263972 0% /home
|
|
/dev/mirror/gm0s1d 6090094 1348356 4254532 24% /usr
|
|
/dev/mirror/gm0s1e 3045006 2241420 559986 80% /var
|
|
devfs 1 1 0 100% /var/named/dev
|
|
....
|
|
|
|
A parancs kimenete az elvárásainknak megfelelõen remekül néz ki. Zárásképpen a szinkronizálás megkezdéséhez a következõ paranccsal illesszük be a [.filename]#da1# eszközt a tükrözésbe:
|
|
|
|
[source,shell]
|
|
....
|
|
# gmirror insert gm0 /dev/da1
|
|
....
|
|
|
|
A tükrözés állapota a létrejöttét követõen az alábbi paranccsal ellenõrizhetõ:
|
|
|
|
[source,shell]
|
|
....
|
|
# gmirror status
|
|
....
|
|
|
|
Az iménti parancs eredményének nagyjából a következõnek kell lennie miután a felépítettük a tükrözést és szinkronizáltuk az adatokat:
|
|
|
|
[source,shell]
|
|
....
|
|
Name Status Components
|
|
mirror/gm0 COMPLETE da0
|
|
da1
|
|
....
|
|
|
|
Hiba esetén a tükrözés továbbra is folytatódik, azonban ilyenkor a példában szereplõ `COMPLETE` helyett a `DEGRADED` jelzést fogjuk látni.
|
|
|
|
=== Hibakeresés
|
|
|
|
==== A rendszer nem hajlandó elindulni
|
|
|
|
Ha a rendszerünk ehhez hasonló módon indul:
|
|
|
|
[.programlisting]
|
|
....
|
|
ffs_mountroot: can't find rootvp
|
|
Root mount failed: 6
|
|
mountroot>
|
|
....
|
|
|
|
Indítsuk újra a gépünket a kikapcsoló gomb vagy a reset segítségével. A rendszerindító menüben válasszuk a hatodik opciót (6). Ennek eredményeképpen megkapjuk a man:loader[8] parancssorát. Töltsük be a modult manuálisan:
|
|
|
|
[source,shell]
|
|
....
|
|
OK? load geom_mirror
|
|
OK? boot
|
|
....
|
|
|
|
Ha ez beválik, akkor valamiért a modult nem sikerült rendesen betölteni. Ellenõrizzük, hogy a [.filename]#/boot/loader.conf# állományban a neki szereplõ megfelelõ bejegyzés helyesen szerepel. Amennyiben a probléma továbbra is fennáll, helyezzük el a következõ sort a rendszermag konfigurációs állományába, majd fordítsuk újra és telepítsük:
|
|
|
|
[.programlisting]
|
|
....
|
|
options GEOM_MIRROR
|
|
....
|
|
|
|
Ezzel várhatóan orvosoltuk a problémát.
|
|
|
|
=== A meghibásodott lemezek cseréje
|
|
|
|
A lemezek tükrözésének egyik legcsodálatosabb elõnye, hogy a menet közben meghibásodott meghajtókat gond, és így feltehetõen adatvesztés nélkül ki tudjuk cserélni.
|
|
|
|
Vegyük az iménti RAID-1 konfigurációt, és tételezzük fel, hogy a [.filename]#da1# eszköz felmondta a szolgáltatot és cserére szorul. A meghajtó leváltásához keressük meg a hibás eszközt, majd állítsuk le a rendszert. Tegyük be a helyére az újat és indítsuk újra a rendszerünket. Miután elindult az operációs rendszer, a következõ parancsok kiadásával tudjuk logikailag is lecserélni a meghibásodott lemezt:
|
|
|
|
[source,shell]
|
|
....
|
|
# gmirror forget gm0
|
|
# gmirror insert gm0 /dev/da1
|
|
....
|
|
|
|
Innen a `gmirror status` parancsával kísérhetjük figyelemmel a tükrözés újraszervezésének menetét. Csupán ennyi az egész.
|
|
|
|
[[geom-ggate]]
|
|
== Eszközök hálózati illesztése a GEOM-ban
|
|
|
|
A GEOM távoli eszközök, például lemezek, CD-meghajtók stb. használatát is támogatja a hálózati illesztést szolgáló segédprogramjaival, hasonlóan az NFS-hez.
|
|
|
|
Kezdésként létre kell hozni a megosztást elõsegítõ állományt. Ez az állomány határozza meg, ki és milyen szinten jogosult használni a megosztott erõforrásokat. Például ha megosztjuk az elsõ SCSI-lemezen a negyedik slice-ot, az alábbi [.filename]#/etc/gg.exports# állomány tökéletesen megfelel:
|
|
|
|
[.programlisting]
|
|
....
|
|
192.168.1.0/24 RW /dev/da0s4d
|
|
....
|
|
|
|
Ezzel a belsõ hálózaton levõ összes számítógép képes lesz elérni a [.filename]#da0s4d# partíción található állományrendszert.
|
|
|
|
Az eszköz megosztásához elõször gondoskodnunk kell róla, hogy ne legyen csatlakoztatva, majd ezután indítsuk el a man:ggated[8] szerver démonját:
|
|
|
|
[source,shell]
|
|
....
|
|
# ggated
|
|
....
|
|
|
|
Ezt követõen a `mount` felhasználásával csatoljuk az eszközt a kliensen, az alábbi parancs kiadásával:
|
|
|
|
[source,shell]
|
|
....
|
|
# ggatec create -o rw 192.168.1.1 /dev/da0s4d
|
|
ggate0
|
|
# mount /dev/ggate0 /mnt
|
|
....
|
|
|
|
Innentõl kezdve az eszköz elérhetõ lesz a [.filename]#/mnt# csatlakozási ponton keresztül.
|
|
|
|
[NOTE]
|
|
====
|
|
Fontos kiemelnünk, hogy ez a mûvelet eredménytelen, ha az adott eszközt vagy maga a szerver, vagy pedig valamelyik másik kliens már korábban csatolta.
|
|
====
|
|
|
|
Amikor az eszközre már nincs tovább szükségünk, biztonságosan le tudjuk választani az man:umount[8] paranccsal, hasonlóan bármelyik más lemezes eszközhöz.
|
|
|
|
[[geom-glabel]]
|
|
== A lemezes eszközök címkézése
|
|
|
|
A rendszer indítása közben a FreeBSD rendszermagja a talált eszközöknek megfelelõen mindegyiknek létrehoz egy-egy eszközleírót. Ezzel a próbálgatásos módszerrel együtt jár néhány gond, például mi történik akkor, ha az új lemezes eszközt USB-n keresztül adjuk a rendszerhez? Nagyon valószínû, hogy ez az eszköz megkapja a [.filename]#da0# nevet és ezzel az eredeti [.filename]#da0# eszköz eltolódik a [.filename]#da1# névhez. Ennek köszönhetõen az [.filename]#/etc/fstab# állományban felsorolt állományrendszerek csatolása veszélybe kerül, aminek következtében akár meghiúsulhat a rendszerindulás is.
|
|
|
|
Az egyik lehetséges megoldása a problémának, ha sorbafûzzük a SCSI eszközeinket, és így a SCSI-kártyához kapcsolt újabb eszköz egy addig nem használt számot fog birtokba venni. Mi helyzet azonban az USB-s eszközökkel, amelyek kiüthetik az elsõdleges SCSI-lemezeinket? Ez egyébként azért történhet meg, mert az USB-s eszközöket általában hamarabb keresi a rendszer, mint a SCSI kártyán levõ eszközöket. Megoldhatjuk úgy ezt a gondot, hogy csak azután csatlakoztatjuk az említett eszközöket, miután a rendszer elindult. Megoldhatjuk viszont úgy is, hogy csak egyetlen ATA-meghajtót használunk és soha nem soroljuk fel a SCSI eszközöket az [.filename]#/etc/fstab# állományban.
|
|
|
|
Ezeknél kínálkozik azonban egy jobb megoldás! A `glabel` nevû segédprogrammal a rendszergazda vagy a felhasználó úgy tudja címkézni a lemezmeghajtókat, hogy azok a [.filename]#/etc/fstab# állományban szereplõ címkéket használják. Mivel a `glabel` a címkét az adott szolgáltató utolsó szektorában tárolja el, ez a címke megmarad az újraindítás után is. Ha ezt a címkét eszközként használjuk, az állományrendszerek mindig ugyanarról a meghajtóról fognak csatolódni, függetlenül attól, hogy milyen eszközleírón keresztül érjük el ezeket.
|
|
|
|
[NOTE]
|
|
====
|
|
Egyáltalán nem állítottuk, hogy egy címke csak állandó lehet. A `glabel` segítségével egyaránt létre lehet hozni állandó és átmeneti címkéket, de csak az állandó címke képes az újraindítás után is megmaradni. A két címketípus közti különbségeket a man:glabel[8] man oldal tárgyalja részletesebben.
|
|
====
|
|
|
|
=== Címketípusok és példák
|
|
|
|
A címkéknek két típusa létezik, az általános címke és az állományrendszer-címke. A címkék lehetnek állandóak vagy ideiglenesek. Az állandó címkék a man:tunefs[8] vagy man:newfs[8] parancsokkal hozhatóak létre. Ezek a címkék az adott állományrendszer típusa alapján elnevezett alkönyvtárakban jönnek létre a [.filename]#/dev# könyvtáron belül. Például az UFS2 állományrendszer-címkék a [.filename]#/dev/ufs# könyvtárban keletkeznek. Állandó címkék a `glabel label` paranccsal hozhatóak létre. Az ilyen címkék nem függenek az állományrendszerek típusától, a [.filename]#/dev/label# könyvtárban jönnek létre.
|
|
|
|
Az ideiglenes címkék a következõ induláskor elvesznek. Ezek a címkék a [.filename]#/dev/label# könyvtárban keletkeznek, és ideálisak a kísérletezgetésre. Ideiglenes címkéket a `glabel create` paranccsal hozhatunk létre. Ezzel kapcsolatosan részletesebb felvilágosítást a man:glabel[8] man oldalon találhatunk.
|
|
|
|
Ha egy UFS2 állományrendszerre szeretnénk tenni egy állandó címkét az adataink megsemmisítése nélkül, adjuk ki a következõ parancsot:
|
|
|
|
[source,shell]
|
|
....
|
|
# tunefs -L home /dev/da3
|
|
....
|
|
|
|
[WARNING]
|
|
====
|
|
|
|
Ha az érintett állományrendszeren nincs üres hely, ennek a parancsnak a használata adatvesztéshez vezethet. Ilyen esetben inkább a felesleges állományok eltávolításával kellene törõdnünk, nem pedig címkék hozzáadásával.
|
|
====
|
|
|
|
Ezután egy címkének kell megjelennie a [.filename]#/dev/ufs# könyvtárban, amelyet vegyünk is fel az [.filename]#/etc/fstab# állományba:
|
|
|
|
[.programlisting]
|
|
....
|
|
/dev/ufs/home /home ufs rw 2 2
|
|
....
|
|
|
|
[NOTE]
|
|
====
|
|
Az állományrendszert tilos csatolni a `tunefs` futtatása alatt!
|
|
====
|
|
|
|
Most már a megszokott módon csatolhatjuk az állományrendszert:
|
|
|
|
[source,shell]
|
|
....
|
|
# mount /home
|
|
....
|
|
|
|
Ettõl a ponttól kezdve, amíg a [.filename]#geom_label.ko# modul betöltõdik a rendszerindítás során a [.filename]#/boot/loader.conf# állományon keresztül, vagy a `GEOM_LABEL` opció megtalálható a rendszermag konfigurációs állományában, az eszközleíró a rendszerre nézve minden komolyabb következmény nélkül megváltozhat.
|
|
|
|
Állományrendszereket létrehozhatunk alapértelmezett címkével is a `newfs -L` paraméterével. Errõl részletesebben a man:newfs[8] man oldalon olvashatunk.
|
|
|
|
Az alábbi paranccsal tudjuk törölni a címkét:
|
|
|
|
[source,shell]
|
|
....
|
|
# glabel destroy home
|
|
....
|
|
|
|
A következõ példában azt láthatjuk, hogyan címkézzük fel a rendszerindító lemezünk partícióit.
|
|
|
|
.Partíciók címkézése a rendszerindító lemezen
|
|
[example]
|
|
====
|
|
A rendszerindításra használt lemezen levõ partíciók felcímkézésével a rendszer képes lesz akkor is minden probléma nélkül elindulni, amikor áthelyezzük egy másik vezérlõre vagy átrakjuk egy másik számítógépbe. Például most tegyük fel, hogy van egy ATA csatolós lemezünk, amelyet a rendszer [.filename]#ad0# néven ismert fel. Továbbá azt is feltételezzük, hogy a FreeBSD telepítése esetén megszokott partícionálási sémát választottuk, ahol [.filename]#/#, [.filename]#/var#, [.filename]#/usr# és [.filename]#/tmp# állományrendszereink, valamint egy lapozóterületünk van.
|
|
|
|
Indítsuk újra a rendszerünket és a man:loader[8] menüjében a kbd:[4] billentyû lenyomásával válasszuk az egyfelhasználós módot. Ezt követõen adjuk ki a következõ parancsokat:
|
|
|
|
[source,shell]
|
|
....
|
|
# glabel label rootfs /dev/ad0s1a
|
|
GEOM_LABEL: Label for provider /dev/ad0s1a is label/rootfs
|
|
# glabel label var /dev/ad0s1d
|
|
GEOM_LABEL: Label for provider /dev/ad0s1d is label/var
|
|
# glabel label usr /dev/ad0s1f
|
|
GEOM_LABEL: Label for provider /dev/ad0s1f is label/usr
|
|
# glabel label tmp /dev/ad0s1e
|
|
GEOM_LABEL: Label for provider /dev/ad0s1e is label/tmp
|
|
# glabel label swap /dev/ad0s1b
|
|
GEOM_LABEL: Label for provider /dev/ad0s1b is label/swap
|
|
# exit
|
|
....
|
|
|
|
A rendszer indítása ezután többfelhasználós módban folytatódik. A rendszerindítás befejezõdése után nyissuk meg az [.filename]#/etc/fstab# állományt és írjuk át a hagyományos eszközneveket a hozzájuk tartozó címkékre. Az [.filename]#/etc/fstab# végleges változata ennek megfelelõen körülbelül így fog kinézni:
|
|
|
|
[.programlisting]
|
|
....
|
|
# Eszköz Csatlakozási pont Típus Beállítások Dump Menet
|
|
/dev/label/swap none swap sw 0 0
|
|
/dev/label/rootfs / ufs rw 1 1
|
|
/dev/label/tmp /tmp ufs rw 2 2
|
|
/dev/label/usr /usr ufs rw 2 2
|
|
/dev/label/var /var ufs rw 2 2
|
|
....
|
|
|
|
A rendszer most már újraindítható. Ha mindent jól csináltunk, akkor a rendszer indítása problémáktól mentesen fog zajlani és a `mount` parancs eredménye a következõ lesz:
|
|
|
|
[source,shell]
|
|
....
|
|
# mount
|
|
/dev/label/rootfs on / (ufs, local)
|
|
devfs on /dev (devfs, local)
|
|
/dev/label/tmp on /tmp (ufs, local, soft-updates)
|
|
/dev/label/usr on /usr (ufs, local, soft-updates)
|
|
/dev/label/var on /var (ufs, local, soft-updates)
|
|
....
|
|
|
|
====
|
|
|
|
A FreeBSD 7.2 kiadásától kezdõdõen a man:glabel[8] osztály az UFS esetén támogatja az `ufsid`, az állományrendszer egyedi rendszerszintû azonosítójából származtatott új címketípus használatát. Ezek a címkék a rendszer indítása során a [.filename]#/dev/ufsid# könyvtárban jönnek automatikusan létre. Az `ufsid` címkéken keresztül tudunk az [.filename]#/etc/fstab# állományban állományrendszereket csatlakoztatni. A jelenleg aktív állományrendszereket és azok `ufsid` azonosítóit a `glabel status` paranccsal tudjuk lekérdezni:
|
|
|
|
[source,shell]
|
|
....
|
|
% glabel status
|
|
Name Status Components
|
|
ufsid/486b6fc38d330916 N/A ad4s1d
|
|
ufsid/486b6fc16926168e N/A ad4s1f
|
|
....
|
|
|
|
Ebben a példában az [.filename]#ad4s1d# képviseli a [.filename]#/var# állományrendszert, míg a [.filename]#ad4s1f# a [.filename]#/usr# állományrendszert. Az adott `ufsid` értékek megadásával az [.filename]#/etc/fstab# állományban a következõképpen tudjuk csatlakoztatni ezeket az állományrendszereket:
|
|
|
|
[.programlisting]
|
|
....
|
|
/dev/ufsid/486b6fc38d330916 /var ufs rw 2 2
|
|
/dev/ufsid/486b6fc16926168e /usr ufs rw 2 2
|
|
....
|
|
|
|
Minden `ufsid` címkével rendelkezõ partíció csatlakoztatható ezen a módon. Ekkor nem kell manuálisan létrehoznunk a számunkra állandó címkéket, így automatikusan élvethezhetjük az eszköznévtõl független csatlakoztatás elõnyeit.
|
|
|
|
[[geom-gjournal]]
|
|
== Naplózó UFS GEOM-on keresztül
|
|
|
|
A FreeBSD 7.0-ás verziójának megjelenésével egy rég várt kiegészítés, a naplózás vált végre elérhetõvé vált. Maga az implementáció a GEOM alrendszeren keresztül érhetõ el, és a man:gjournal[8] segédprogram segítségével könnyedén beállítható.
|
|
|
|
Mit is jelent a naplózás? A naplózás támogatásával a rendszer egy naplót vezet az állományrendszert érintõ tranzakciókról - például az olyan változtatásokról, amelyek egy komplett írási mûveletet eredményeznek - mielõtt még a metaadatok és lemezírási mûveletek szabályosan befejezõdnének. Ez a könyvelés késõbb visszajátszható az állományrendszerben lezajlott tranzakciók reprodukálásához, és ezzel megelõzhetõek az állományrendszerben keletkezõ esetleges ellentmondások.
|
|
|
|
Ez egy újabb módszer az adatvesztés és az állományrendszerben elõforduló ellentmondások elkerülésére. Eltérõen a Soft Updates módszertõl, ahol a metaadatok frissítését biztosítják és követik nyomon, vagy a Snapshots módszertõl, ahol pillanatképeket tárolunk az állományrendszerrõl, itt egy konkrét naplót tárolunk a lemez erre a célra fenntartott részén, amely bizonyos esetekben akár egy teljes külön merevlemez is lehet.
|
|
|
|
Ellentétben a többi naplózó állományrendszertõl, a `gjournal` módszere blokk alapú és nem az állományrendszer részeként került implementálásra - csupán a GEOM egyik bõvítménye.
|
|
|
|
A `gjournal` támogatásához a FreeBSD rendszermag konfigurációs állományában be kell állítani a következõ opciót - amely a 7.0 és késõbbi rendszereken alapbeállítás:
|
|
|
|
[.programlisting]
|
|
....
|
|
options UFS_GJOURNAL
|
|
....
|
|
|
|
Amennyiben naplózással rendelkezõ köteteket szeretnénk a rendszerindítás során csatlakoztatni, a [.filename]#/boot/loader.conf# állományban következõ sor hozzáadásával töltessük be a [.filename]#geom_journal.ko# modult:
|
|
|
|
[.programlisting]
|
|
....
|
|
geom_journal_load="YES"
|
|
....
|
|
|
|
Szükség esetén ezt a funkciót akár a rendszermagba is beépíthetjük, ha felvesszük a következõ sort a rendszermag konfigurációs állományába:
|
|
|
|
[.programlisting]
|
|
....
|
|
options GEOM_JOURNAL
|
|
....
|
|
|
|
Ha ezt aktiváltuk, egy szabad állományrendszeren az alábbi lépéseken keresztül tudunk létrehozni egy naplót, feltéve, hogy a [.filename]#da4# egy új SCSI-meghajtó:
|
|
|
|
[source,shell]
|
|
....
|
|
# gjournal load
|
|
# gjournal label /dev/ad4
|
|
....
|
|
|
|
Ennél a pontnál lennie kell egy [.filename]#/dev/da4# és egy [.filename]#/dev/da4.journal# eszközleírónak. Hozzunk létre egy állományrendszert ezen az eszközön:
|
|
|
|
[source,shell]
|
|
....
|
|
# newfs -O 2 -J /dev/da4.journal
|
|
....
|
|
|
|
Ez a parancs létrehoz egy UFS2 állományrendszert a naplóval rendelkezõ eszközön.
|
|
|
|
Csatoljuk is be a `mount` segítségével az eszközt kívánt csatlakozási pontra:
|
|
|
|
[source,shell]
|
|
....
|
|
# mount /dev/da4.journal /mnt
|
|
....
|
|
|
|
[NOTE]
|
|
====
|
|
Ha több slice-unk is van, akkor a napló mindegyik slice-hoz külön létrejön. Például, ha az [.filename]#ad4s1# és [.filename]#ad4s2# egyaránt slice-ok, akkor a `gjournal` legyártja az [.filename]#ad4s1.journal# és [.filename]#ad4s2.journal# eszközleírókat.
|
|
====
|
|
|
|
A jobb teljesítmény elérése érdekében kívánatos lehet a naplót egy másik lemezen tartani. Ilyen esetekben a naplózás bekapcsolásához a naplót biztosító szolgáltatót vagy tárolóeszközt a naplózni kívánt eszköz után kell szerepeltetni. A naplózás akár az aktuálisan használt állományrendszeren is aktiválható a `tunefs` használatával. Az állományrendszer módosításakor viszont mindig érdemes biztonsági másolatot készíteni! Az esetek többségében a `gjournal` hibát fog jelezni, mivel nem tudja létrehozni a naplót, azonban ez nem védi meg az adatainkat a `tunefs` helytelen használata által okozott sérülésektõl.
|
|
|
|
A rendszerindító lemezen is lehet naplózást használni. Ennek részleit a link:{gjournal-desktop}[Naplózó UFS használata asztali számítógépeken] címû cikkbõl ismerhetjük meg.
|