FreeBSD kézikönyv
Előző | Fejezet 21. A Vinum kötetkezelő | Következő

# 21.9. Rendszerindítás Vinum-kötetről

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.

## 21.9.1. A Vinum kellően korai indítása

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 Szakaszban 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) 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"

- > Megjegyzés: 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.

  > Megjegyzés: 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.

## 21.9.2. A Vinum-alapú rendszerindító kötet elérése a rendszertöltés során

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:

1. 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.

2. 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.

3. 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

## 21.9.3. Egy Vinum-alapú rendszerindító állományrendszer példája

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 Szakaszban 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.

## 21.9.4. Hibakeresés

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.

### 21.9.4.1. A rendszertöltő elindul, de a rendszer viszont már nem

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.

### 21.9.4.2. Csak az elsődleges rendszertöltő indul el

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. 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.

### 21.9.4.3. Semmi sem indul, a rendszertöltő hibákat ír

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 Szakaszban 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.

Előző | Tartalom | Következő
A Vinum beállítása | Fel | Virtualizáció

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.