Olyan számítógépeknél, ahol a teljesen tükrözött Vinum-alapú állományrendszereket használunk, kívánatos lehet magát a rendszerindításhoz használt állományrendszert is tükrözni. Egy ilyen konfiguráció összeállítása már messze nem annyira egyszerű, mint egy tetszőleges állományrendszer esetén, mivel:
Az indításhoz használt állományrendszernek már a folyamat nagyon korai szakaszában rendelkezésre kell állnia, ezért a Vinumnak már itt elérhetőnek kell lennie.
A rendszerindító állományrendszert tartalmazó köteten még ott kell lennie a rendszerindító kódnak és a rendszermagnak is, melyeket a rendszer saját eszközein (például ilyen a BIOS a PC-knél) keresztül kell tudnunk beolvasni, amiket viszont nem tudunk felkészíteni a Vinumra.
A soronkövetkező szakaszokban
„rendszerindító kötetként”
(root volume) fogunk általánosságban
véve hivatkozni a rendszerindításhoz
használt állományrendszert tartalmazó
Vinum-kötetre. Ennek megfelelően
valószínűleg jó ötlet a
"root"
névvel azonosítani ezt a
kötetet, habár technikai szempontból ezt semmi
nem követeli meg. Az itt felsorakozó
példákban azonban ezt a nevet fogjuk
használni.
Ennek kiváltásához számos lépést kell megtennünk:
A rendszermagnak már el kell érnie a
Vinumot a rendszerindítás során.
Emiatt a 21.8.1.1. szakasz - Automatikus indításban leírt
automatikus indítási módszer nem
alkalmazható erre a feladatra, és a
start_vinum
paramétert
nem is szabad használni a most
ismertetendő konfigurációban. A Vinumot
statikusan bele is építhetjük a
rendszermagba és így állandóan
elérhető, de ez általában nem
kielégítő megoldás. Megoldhatjuk
úgy is, ha a /boot/loader
-re
(12.3.3. szakasz - A harmadik fokozat
(/boot/loader
)) bízzuk a vinum modul
betöltését, még a rendszermag
előtt. Ezt az alábbi sorral válthatjuk
ki a /boot/loader.conf
állományban:
geom_vinum_load="YES"
A Gvinum használata során az összes többi beállítás automatikusan végrehajtódik, amint a modul betöltődik, ezért ilyenkor csak a fentebb leírt eljárásra van szükség. Az itt felsoroltak csak az elavult Vinum implementációra vonatkoznak, csupán a régebbi típusú rendszerek kedvéért említjük meg.
A Vinumot nagyon korán életre kell
keltenünk, hiszen a rendszerindításhoz
használt állományrendszert
tartalmazó kötetet kell
élesítenünk.
Alapértelmezés szerint a Vinum rendszerszinten
futó része nem keres addig semmilyen
Vinum-kötetinformációval rendelkező
meghajtót, amíg a rendszergazda (vagy
valamelyik rendszerindító szkript) ki nem adja
a vinum start
parancsot.
A most következő bekezdések mutatják be a szükséges lépéseket.
Ha hozzáadjuk a következő sort a
/boot/loader.conf
állományhoz, akkor azzal utasíthatjuk a
Vinumot, hogy a rendszermag indítása
során vizsgálja át az összes
meghajtót:
vinum.autostart="YES"
Nem szükséges megmondani a rendszermagnak,
merre keresse a rendszerindításhoz
használt állományrendszert. A
/boot/loader
megkeresi a
hozzá tartozó eszközt a
/etc/fstab
állományban
és átadja ezt az információt a
rendszermagnak. Amikor a csatlakoztatására
kerül sor, a rendszermag az eszköz
nevéből meg tudja állapítani,
melyik eszközmeghajtót kérje meg a
belső (fő- és
al)eszközazonosító
leképzéséhez.
Mivel a jelenlegi FreeBSD rendszertöltő csak 7,5 KB
méretű és egyébként is csak az
UFS állományrendszerről tud
állományokat beolvasni (mint például
a /boot/loader
t), teljesen lehetetlen
még a Vinum belső szerkezetére is
megtanítani, tehát a
Vinum-konfigurációk
értelmezésére és magának a
rendszerindító kötet elemeinek
kielemzésére. Ezért be kell vetnünk
néhány trükköt ahhoz, hogy a
rendszerindító kód számára a
rendszerindításhoz használható
szabványos "a"
partíció
képzetét keltsük.
Mindez csak akkor válik elérhetővé, ha az alábbi követelményeket teljesíti a rendszerindító kötet:
Nem lehet csíkozott vagy RAID-5 típusú.
Erenként nem tartalmazhat egynél több összefűzött allemezt.
Láthatjuk, hogy hasznos és lehetséges
is több eret használni, melyek mindegyike a
rendszerindító állományrendszer
egy-egy másolatát tartalmazza. Az indulás
folyamán azonban ezen példányok
közül csak az egyiken fogja keresni a rendszer a
rendszertöltőt és a többi
állományt egészen addig, amíg a
rendszermag magát az állományrendszert nem
csatlakoztatja. A látszat kedvéért az
ereken belül található allemezek
mindegyikének lennie kell egy saját
"a"
partíciójának,
amivel lényegében alkalmassá válik a
rendszerindításra. Ezeknek a hamis
"a"
partícióknak nem kell
feltétlenül a többiekkel megegyező
pozíciókon elhelyezkedniük, azonban a
tévedések elkerülése
érdekében valószínűleg hasznos
olyan Vinum-köteteket létrehozni, ahol a
keletkező tükrözött eszközök
szimmetrikusak.
A rendszerindító kötet egyes
eszközökön található
"a"
partícióit az
alábbiak segítségével
állíthatjuk be:
A rendszerindító kötet részeként megjelenő eszközön található allemez helyét (az eszköz elejétől számított eltolását) és méretét ellenőrizni kell az alábbi parancs segítségével:
#
gvinum l -rv root
Ne felejtsük el, hogy a Vinum az eltolásokat
és méreteket byte-okban méri.
Ezekből tehát úgy nyerünk a
bsdlabel
használatához
szükséges blokkszámokat, ha ezeket
elosztjuk 512-vel.
Futassuk le a
#
bsdlabel -e eszköznév
parancsot minden olyan eszközön, amelyik
részt vesz a rendszerindító kötet
kialakításában. Az
eszköznév
legyen a
slice (fdisk)-táblát nem tartalmazó
lemezek esetén a lemez neve (mint
például da0
), vagy
ellenkező esetben a slice neve (például
ad0s1
).
Ha már lenne egy "a"
partíció az eszközön
(valószínűleg egy Vinum előtti
rendszeríndító
állományrendszert tartalmaz), nevezzük
át valami másra és így
továbbra is elérhető marad (biztos, ami
biztos), viszont többé már nem lesz a
rendszer számára alapértelmezett
rendszerindító eszköz. Az aktív
partíciók (mint például az
éppen csatlakoztatott rendszerindító
állományrendszer) nem nevezhetőek
át, ezért ezt a lépést csak
akkor tudjuk megtenni, ha a rendszerünket egy
„Fixit” (Helyreállító)
eszközről indítjuk, vagy egy olyan
kétlépéses folyamat során, ahol
(tükrözés esetén) a lemezről
még nem indítottuk el a rendszert.
Ezt követően az eszközön
található Vinum-partíciót
(amennyiben létezik) az eszközön levő
allemez eltolásához kell helyezni. Ennek
eredménye lesz az új "a"
partíció "offset"
értéke. A partíció
"size"
(méret)
értéke szó szerint
átemelhető a fenti
számításból. Az
"fstype"
legyen
4.2BSD
. Az "fsize"
,
"bsize"
és
"cpg"
értékeket a jelenlegi
állományrendszerhez mérten
ajánlott megválasztani, azonban itt most
egyáltalán nem bírnak
jelentőséggel.
Ezzel a módszerrel
létesítettünk egy olyan új
"a"
partíciót, amely lefedi
az eszközön található
Vinum-partíciót. Jegyezzük meg, hogy a
bsdlabel
kizárolag csak abban az
esetben fogja megengedi ezt az átfedést, ha a
Vinum-partíciónk "vinum"
típussal van megjelölve.
Készen is vagyunk! Most már van minden
eszközön egy hamisított
"a"
partíciónk, amelyeken
megtalálható a rendszerindító
kötet egy-egy másolata. Határozottan
ajánlott még egyszer ellenőrizni a
munkánkat az alábbi parancs
kiadásával:
#
fsck -n /dev/eszköznéva
Figyeljünk arra, hogy az összes
vezérlési információt
tartalmazó állománynak a Vinum-köteten
található rendszerindító
állományrendszerre kell vonatkoznia, ami viszont
egy új Vinum rendszerindító kötet
beállítása után nem
feltétlenül egyezik meg a jelenlegi aktív
állományrendszerrel. Különösen az
/etc/fstab
és
/boot/loader.conf
állományokat kell ilyen szempontból
ellenőriznünk.
A következő indítás során a rendszertöltő már az új Vinum-alapú rendszerindító állományrendszerről fogja összeszedni a működéséhez szükséges adatokat és ezeknek megfelelően cselekedni. Végül, a rendszermag inicializálója után, mikor az összes eszközt felismerte, egy ehhez hasonló feltűnő üzenet fogja jelezni a beállítás sikerességét:
Mounting root from ufs:/dev/gvinum/root
Miután sikeresen konfiguráltuk a
rendszerindító Vinum-kötetet, a
gvinum l -rv root
kimenete
nagyjából így fog kinézni:
... Subdisk root.p0.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p0 at offset 0 (0 B) Drive disk0 (/dev/da0h) at offset 135680 (132 kB) Subdisk root.p1.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p1 at offset 0 (0 B) Drive disk1 (/dev/da1h) at offset 135680 (132 kB)
Itt (a /dev/da0h
partícióhoz képesti)
135680
-as eltoltás
értékekre kell figyelnünk. Ez
képződik le a bsdlabel
fogalmi
rendszerében aztán 265 darab 512 byte-os
blokkra a lemezen. Ehhez hasonlóan a
rendszerindító kötet mérete
245 760 darab 512 byte-os blokk lesz. A
rendszerindító kötet
másodpéldányát tartalmazó
/dev/da1h
ugyanilyen
beállításokkal rendelkezik.
Az említett eszközök valahogy így
jelennek meg a bsdlabel
szerint:
... 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*) c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*) h: 71771672 16 vinum # (Cyl. 0*- 4467*)
Megfigyelhető, hogy a hamis "a"
partíció "size"
paraméter értéke megegyezik a fentebb
becsült értékkel, miközben az
"offset"
paraméter
értéke egyenlő lesz a "h"
Vinum-partíción belüli eltolás
és az eszközön (vagy slice-on) belüli
eltolás összegével. Ez jellemzően egy
olyan beállítás, amivel
szükségszerűen el tudjuk kerülni a 21.9.4.3. szakasz - Semmi sem indul, a rendszertöltő hibákat
írban leírt
hibajelenséget. Látható
továbbá az is, hogy az egész
"a"
partíció végig az
eszköz összes Vinum adatát tartalmazó
"h"
partíciójában foglal
helyet.
A példával kapcsolatban megjegyezzük, hogy itt az egész eszközt a Vinum felügyelete alá bocsátottuk, tehát nem marad hátra semmilyen Vinum előtt használt rendszerindító partíció, hiszen ez egy olyan lemez, amelyet eleve egy Vinum-konfigurációba szántunk.
Fontos tudunk, hogy probléma esetén hogyan tudjuk helyreállítani a rendszerünket. A következő felsorolásban bemutatunk néhány ismert buktatót és a megoldásaikat.
Ha valamilyen okból a rendszer nem indulna el, a 10
másodpercig tartó
visszaszámlálás során a
rendszertöltőt még meg tudjuk
állítani a szóköz
lenyomásával. Ekkor a betöltő
által használt változók (mint
például a vinum.autostart
) a
show
segítségével
megvizsgálhatóak és a
set
vagy unset
parancsokkal módosíthatóak.
Ha mindössze az volt a probléma, hogy a Vinum
modulja nem szerepelt az automatikusan betöltendő
modulok között, a load geom_vinum
parancs kiadásával betölthetjük
azt.
Miután végeztünk, a
rendszerindítás folyamata a boot
-as
paranccsal folytatható. A
-as
kapcsolók jelzik a rendszermag
számára, hogy kérdezzen rá a
rendszerindító állományrendszerre
a csatlakoztatása előtt (-a
)
és csak egyfelhasználós módban
indítsa a rendszert (-s
), ahol a
rendszerindító állományrendszer
írásvédett. Így, ha csak egyetlen
eret csatlakoztattunk egy többeres kötetből, az
erek még véletlenül sem tudnak
egymásnak ellentmondó állapotba
kerülni.
Amikor megjelenik a csatlakoztatandó
rendszerindító állományrendszert
bekérése, bármelyik
érvényes rendszerindításra
alkalmas állományrendszer megadható.
Amennyiben az /etc/fstab
állományt jól beállítottuk,
az alapértelmezett érték egy
ufs:/dev/gvinum/root
értékhez
hasonló alakú lesz. Itt általában
egy ufs:da0d
formátumú
értéket láthatunk, amely feltehetően
egy Vinum használata előtti
rendszerindító állományrendszert
tartalmazó partíció. Legyünk
óvatosak, ha itt egy olyan "a"
partíciót adunk meg, amely
valójában egy rendszerindító
Vinum-eszköz allemezeire hivatkozik, mivel egy
tükrözött konfiguráció
esetén csak az eszköz egyik részét
fogjuk csatlakoztatni. Ha a későbbiekben ezt az
állományrendszert már nem csak
írásvédett módban csatlakoztatjuk,
mindenképpen el kell távolítanunk a
rendszerindító Vinum-kötetből a
többi eret, mivel máskülönben nagy
valószínűséggel eltérő
adatokat fognak tartalmazni.
Amikor az elsődleges rendszertöltő
még elindul, viszont a
/boot/loader
már nem tud
betöltődni (ezt rendszerindítás
megkezdése után bal oldalt rögtön
megjelenő forgó vonalból vehetjük
észre), a szóköz
lenyomásával itt még tehetünk egy
kísérletet a betöltés
megszakítására. Ennek
hatására a rendszertöltés
megáll a második fázisban, lásd
12.3.2. szakasz - Az első fokozat (/boot/boot1
)
és a második fokozat
(/boot/boot2
). Itt a
rendszerindításhoz megpróbálhatunk
megadni egy másik partíciót,
például egy olyat, amely a korábbi
rendszerindító állományrendszert
tartalmazza és amelyet az előbb
átneveztünk az
"a"
-ról.
Ez a helyzet akkor állhat elő, ha a Vinum telepítése során tönkretettük volna a rendszertöltőt. Sajnos a Vinum minden esetben 4 KB helyet hagy szabadon a partíció elején, a saját fejléc információjának rögzítése előtt. Az ide kerülő első és második fázisú rendszertöltők, illetve a bsdlabel adatai azonban jelenleg 8 KB helyet kívánnak meg. Így ha a Vinum-partíció egy rendszerindításra szánt slice vagy lemez 0. eltolásánál kezdődik, a Vinum beállításai felül fogják írni a rendszertöltőt.
A rendszertöltő is ugyanígy
felülírja a Vinum fejlécét és
akkor a Vinum nem találja a lemezeit, ha a fenti
problémát orvosolva, például egy
„Fixit” (Helyreállító) lemez
segítségével,
újratelepítjük a rendszertöltőt a
12.3.2. szakasz - Az első fokozat (/boot/boot1
)
és a második fokozat
(/boot/boot2
)ban bemutatott bsdlabel
-B
parancs segítségével. Noha
a Vinum egyetlen konkrét konfigurációs
beállítása vagy a kötetekben
tárolt adat sem sérül meg és vissza
tudjuk állítani az összes elveszett
információt ugyannak a
Vinum-konfigurációnak az újbóli
megadásával, a helyzetet magát
nehéz megoldani. A Vinum-fejléc és a
rendszertöltő ütközésének
megszüntetéséhez ugyanis legalább
4 KB-tal arrébb kell mozgatnunk az egész
Vinum-partíciót.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.