ggrruubb:: aa rreennddsszzeerrbbeettööllttöö...
TRANSCRIPT
1
Írta Pete Kelly (critter)
Későre jár és holnap sűrű napod lesz. Mented teháta munkádat és kikapcsolod a komputert. Másnapbekapcsolod a gépet és megáll a szíved, amikor eztaz üzenetet látod: „kernel panic”, vagy „grub error”és a számítógép nem indul.
Most mi legyen? Nos, a jó hír az, hogy a kapottüzenet jelzi, a hiba nem egyéb, mint szoftverprobléma és egy beállító fájlt kell kijavítani, vagy aboot betöltő programját kell újra telepíteni. Ezt nemnehéz megcsinálni, de jó, ha érted is, hogy mitakarsz elérni. Tehát, mindenek előtt szükségünk vannémi háttér információra. Igyekszem egyszerűenfogalmazni.
A betöltési (boot) folyamat
Amikor feszültség aláhelyezed a komputert, aprocesszornak meg kellmondani, hogy mitcsináljon. Az alaplapnakvan egy listája ameghajtókról, amikről akomputer képes betölteniTudja azt is, hogy milyensorrendben kellpróbálkozni, és így aprocesszort a lista első meghajtójára irányítja. Aprocesszor a meghajtó tároló területének elejére
megy további információkért. Ez a tároló területkisebb, szektornak nevezett részekre oszlik, és aprocesszor a meghajtó első szektorára néz, amitMaster Boot Recordnak, vagy MBRnek hívnak. Azösszes partíció első szektora szintén foglalt, és bootszektornak nevezik. Itt nincs elegendő hely aprocesszor számára szükséges összes információtárolására, tehát mutatja a processzornak, hogy holtalálja a kódot, ami a boot betöltési folyamatánakbefejezéséhez szükséges, így a processzorfolytathatja a teljes rendszerbetöltést.
A PCLinuxOS által használt boot betöltő programotgrubnak (GRand Unified Bootloader) hívják és azMBRben tárolt kódot, pedig „grub stage 1”nek. Amemóriába betöltendő utolsó kódrészlete pedig a„grub stage 2”.
A stage 2 indítja a kernelt és állít fel egy ideiglenesfájlrendszert a memóriában, ami a kernel számára, asikeres rendszerindításhoz szükséges modulokhozés meghajtókhoz hasonló dolgokat tartalmaz. Ehhezegy „initial ram disk”ként, vagy initrd.imgként ismertrendszerképet használ.
Sajnos itt van problémánk. Van egyszer a stage2,ami tudja, hogy a rendszer hol tárolja kernelt és azinitrdt, ugyanakkor a stage1 semmit sem tud afájlrendszerről. Lépjünk a stage1_5be. Ezekből többis van és mindegyik rendszerfüggően kap nevet,mint e2fs_stage1_5és reiserfs_stage1_5. Astage1_5 kód ezekben a fájlokban jelenti a kapcsota kettő között, de a stage1nek képesnek kell lenniearra, hogy megtalálja. Szerencsére, a meghajtópartíciói elhelyezési módjának köszönhetően mindig
van néhány szabad szektor az első, lefoglalt után,és ez az, ahová a kiegészítő kód kerül. A stage1tudja, hogy mindig meg kell néznie a root partíciómásodik szektorát és az ott található kódvégrehajtása után a grub képes lesz megtalálni adolgokat a fájlrendszerben.
Amikor a szükséges betöltési feladatokat elvégezve,a kernel már képes lesz a fizikai fájlrendszerkezelésére, a vezérlés átkerül a kernelhez.
Nagy vonalakban így működik a PCLinuxOSnél.Ennél sokkal többet lehetne a grub rendszerérőlmesélni, és nem ez az egyetlen módja a rendszerbetöltésének.
Helyreállítás
A következők a PCLinuxOS disztribúcióira érvényesek és nekem mindig bevált, azonban más rendszerek esetén lehet, hogy kiigazítást igényelnek.Ubuntu és az összes Ubuntu alapú változat grub2öthasznál, ahol ez biztosan nem működik.
A fentiekből következik, hogy a grubnak háromdolgot kell megmondani, hogy betölthesse azoperációs rendszert:
• Hol a kernel?• Hol az initrd?• Melyik meghajtó, vagy partíció hordozza a grub
stage1_5öt és stage2öt?
Ezt az információt a grub általában a konfigurációsfájljától kapja, ami a PCLinuxOS esetében a
Grub: a rendszerbetöltö javításaGrub: a rendszerbetöltö javításaPCLinuxOS Magazine – 2011. január
2
/boot/grub/menu.lst. Néhány rendszer ezt grub.confnak hívja. Ha a fájl információi hibásak akkor ahiányzó kernel, vagy initrd grub errort (hiba) ad, ésa rossz fájlrendszerleírás kernel pánik üzenetet ad.
Az információk a boot parancssorában is megadhatók, bár ezt egy kicsit tovább tart összehozni.
A helyreállításához indíts a telepítés LiveCDjéről,ami memóriában futó operációs rendszert ad, és itt ameghajtód bármelyik hibás fájlját kijavíthatod.
Az információk előkerítése
Először is tudni kell, hogy a PCLinuxOS melyik meghajtóra és partícióra lett telepítve, és ebben a grubsegíthet. LiveCDről indítva nyiss egy terminált ésszerezz rendszergazda jogokat a következőkbegépelésével:
su <Enter>
Kéri a rendszergazda (root) jelszavát. Most rendszergazdai jogosítványokat kaptál, ezért különösenoda kell figyelni arra, hogy mit írsz a parancssorba.
Írd be:
grub <Enter>
Kapsz egy ellenőrző üzenetet és belépsz a grubparancshéjába, ahol parancsokat adhatsz ki, sőt agrub teljes rezidens részét újra is telepítheted:
GNU GRUB version 0.97 (640K lower / 3072Kupper memory)
[ Minimal BASHlike line editing is supported.For the first word, TAB lists possible commandcompletions. Anywhere else TAB lists thepossible completions of a device/filename. ]
grub>
A parancssorba írd be a következőket:
find /boot/grub/stage2 <Enter>
Kapsz egy listát azokról a partíciókról, amik grubstage2t tartalmaznak. A legtöbb ember esetében ezcsak egy partíció lesz, de ha több Linuxot isindíthatnál, akkor mindegyik szerepelni fog. Apartíciók ilyen (hd0,0), vagy hasonló formábanjelennek meg, mivel a grub nem ismer hda1et, vagy
sda1et. Egyszerűen meghajtóként látja őket. A grubnullától és nem egytől kezdi a számolást. Az elsőszám a meghajtó, a második a partíció sorszáma.Írd be, hogy quit <Enter> a grub elhagyásához.
Most már tudjuk, a rendszerünket tartalmazómeghajtó és partíció sorszámát, csatolhatjuk éskörülnézhetünk. Abból indulok ki, hogy ez a partícióa (hd0,0), az első lemez első partíciója. Még mindiga terminálban rootként írd be:
mkdir /a <Enter>mount /dev/sda1 /a <Enter>
Ha a meghajtód IDE, akkor az sdat cseréld hdara.Ha nem tudod, akkor fdisk l <Enter>t beírvamegkapod a felismert meghajtók listáját.
A meghajtó most már az „/a” alá csatolásra került ésígy a kernelnek és az intrdnek az „/a/boot”ban kelllennie. A kernel és az initrd neve elég hosszú,összetett, tehát egyszerűbb hivatkozásokat készítenihozzájuk. A kernel neve vmlinuzzal kezdődik, azinitrdé pedig initrdvel. A megjelenítésükhöz gépeldbe az alábbiakat és jegyezd fel a neveket.
ls /a/boot/vmlinuz* <enter>ls /a/boot/initrd* <enter>
Az „@”tel végződő név hivatkozás, és ezthasználhatod a grubod beállító fájljában.
Grub: a rendszerbetöltő javítása
3
A partíció címkézése
Most kaptam két hivatkozást, vmlinuz és initrdnéven. Azt is tudom, hogy a betöltés eszköze a(hd0,0), de könnyebbnek tartom a címkékhasználatát. Ha tehát azt gépelem, hogy „tune2fs Lkde4 /dev/sda1”, ez kde4 címkét ad a partíciómnak.Hasonló módon címkét adok minden meghajtómnak.Ha jobb szereted a grafikus felületet, használatod aPCLinuxOS Vezérlőközpontját, ott a Helyi lemezek→ Lemezpartíciók kezelése → Átváltás szakértőimódba résznél.
A beállító fájl
Most megvizsgálhatod és kijavíthatod a menu.lstt.Én a „nano” parancssori szövegszerkesztőthasználom, amivel nagyon könnyű fájlokatszerkeszteni, de te bármilyen olyanszövegszerkesztőt használhatsz, ami sima,formázás nélküli szöveget ment. Nyisd meg atelepített rendszer menu.lst fájlját:
nano /a/boot/grub/menu.lst <Enter>
Az eredeti fájl így néz ki:
timeout 10color white/blue yellow/bluegfxmenu (hd0,0)/boot/gfxmenudefault 0
title linuxkernel (hd0,0)/boot/vmlinuzBOOT_IMAGE=linux root=UUID=442bec9e
f1434cc2866cd65a92fbac69resume=UUID=afccaaaa054d424b8a3c093f1b2a743d splash=silent vga=788initrd (hd0,0)/boot/initrd.img
title linuxnonfbkernel (hd0,0)/boot/vmlinuzBOOT_IMAGE=linuxnonfbroot=UUID=442bec9ef1434cc2866cd65a92fbac69 resume=UUID=afccaaaa054d424b8a3c093f1b2a743dinitrd (hd0,0)/boot/initrd.img
title failsafekernel (hd0,0)/boot/vmlinuzBOOT_IMAGE=failsaferoot=UUID=442bec9ef1434cc2866cd65a92fbac69 failsafeinitrd (hd0,0)/boot/initrd.img
Nem annyira bonyolult, mint amilyennek látszik. Azelső négy sor a menüt állítja be, míg a háromsorosblokkok egyegy „stanza”nak (szakasz) hívottbejegyzést takarnak. A fenti stanzak mindegyikehárom sorból áll, még ha a magazin valószínűlegszét is tördeli azokat. A menu.lst formátumalényeges.
A három sor „title”, „kernel” és „initrd” kezdetű.Mindegyik pontosan egy sor hosszúságú kell legyen,még ha a „kernel” sora gyakran elég hosszúra nyúlikis. Egyéb sorok is lehetnek a stanzaban, deezeknek is egysorosnak kell lenniük.
Új menüelem hozzáadása
Új stanzat (menüelemet) fogok hozzáadni azelejére, pontosabban azon sorok közé, amik a„defaults 0” és a „title linux” feliratot jelenítik meg:
title kde4kernel (hd0,0)/boot/mykernelroot=LABEL=kde4initrd (hd0,0)/boot/myinitrd
Minden stanza előtt és után legyen egyegy üressor, különben a grub nem tudja, hogy hol kezdődikés hol végződik a stanza.
Miután begépelted ezt, tartsd a Control gombotlenyomva és üss Xet, megkérdezi, hogy mentsee.Mondj igent.
Grub: a rendszerbetöltő javítása
4
Ez elég lesz arra, hogy betölts, de kicsiteligazíthatod, ha már elégedett vagy a tartalmával.Valójában csak ezek a háromsorosok lehetnek amenu.lstben.
Nem próbáltam megjavítani a fájlt. Ehelyett beírtama saját utasításaimat, amikről tudtam, hogy jók amenu.lst beállító fájlba és így én irányítok. A gruberedeti utasításait is érintetlenül hagytam. Később,ha már biztos vagyok abban, hogy a rendszeremképes betöltődni, visszatérhetek és szerkeszthetema fájlt, de az eredeti tartalmat még mindigmegőriztem.
Mit jelent mindez
A menu.lst elején a négy sor a következő feladatokathajtja végre.
A Timeout=10 beállítja az időt másodpercekben,ameddig a grub vár az alapbeállítás szerintimenüelem betöltésével. Ha nincs meghatározva,akkor az az első lesz. Az idő lejárta előttmegnyomott bármilyen billentyű felfüggeszti avisszaszámlálást.
A color white/blue yellow/blue a szöveges menüszíneit állítja be (amit akkor látsz, amikor a grafikusmenü megjelenítése idején lenyomod az <ESC> billentyűt. Néha szükség van erre). Az első páros beállítja az előtér és a háttér színét, a második párospedig a kiválasztott sor kiemelésére vonatkozik.
A gfxmenu (hd0,0)/boot/gfxmenu megmondja agrubnak, hogy hol találja a grafikus menüt.
A default 0 megadja, hogy alapbeállítás szerint hanyadik menüelemet töltse be, a számolás 0tól indul.
A sima „puritán” stanza elemzését kezdhetjük a„kernel” sorához hozzáadott dolgokkal.
A splash=silent vga=788 lehetővé teszi a telepítettgrafikus témának a képernyőn túlnyúló szöveg elrejtését. A legtöbb kijelzőnek a 788as szám megfelelő.
Amennyiben hibernálást is szeretnél a gépeden, akkor meg kell mondani a grubnak, hogy hol találja azelőző munkamenet helyreállító információit. Ezek aswap partícióra kerülnek, így a sikeres hibernációérdekében ennek a partíciónak a mérete legyen egykicsit nagyobb a telepített memóriánál. Ha a swappartíciód a /dev/sdb1, akkor add aresume=/dev/sdb1 részt a kernel sorához. A partíció ebben a formában megadható, mert a grub, mireideér, már érti a meghajtók jelöléseit.
A PCLinuxOS alap telepítésében három stanza van
Az első teljes grafikus bootot ad a bejelentkezőképernyőig.
A következő neve „linuxnonfb”, vagy hasonló éslehetővé tesz grafikus képernyőkép nélküli betöltést,hogy láthasd a rendszerüzeneteket a betöltés során.
Ez hibaelhárításkor hasznos. A szöveg görgetésétszüneteltetheted a billentyűzeten a „Scroll Lock”gomb lenyomásával.
Az utolsót „failsafe”nek nevezik, és korlátozott, egy
felhasználós módban lép be, ahol a különfélebeállításokat végezheted el, mint a fájlrendszerellenőrzése és a rootjelszó helyreállítása. Haminden rendben van, akkor „init 5” begépelésévelvisszatérhetsz a bejelentkező képernyőhöz.
Ezek az üzemmódok úgy érhetők el, hogy a kernelsorában, valahová a kernel és a root partíciómeghatározása közé beszúrod a következőkegyikét:
BOOT_IMAGE=linuxBOOT_IMAGE=linuxnonfbBOOT_IMAGE=failsafe
Amikor tudod, hogy az új menü eleme(i)d rendbenbetölti(k) a rendszert, akkor a régi(eke)t törölheted,de készíts a fájlról egy másolatot valahová, aholbármikor elérheted. Ha bármelyik sort „#”tel nyitod,akkor az az elem nem jelenik meg a menüben. A „#”tel kezdődő sorokat megjegyzésként kezeli és nemhajtja végre.
A rendszerbetöltő újratelepítése
Ha a grub maga sérült meg, akkor viszonylagegyszerű alapállapotba helyezni. Mint korábban is,nyiss egy terminált, használd a sut, hogy rootjogotnyerj és indítsd a grub parancshéját a következővel:
grub <Enter>
Használd a grub „find” (keresés) parancsát a rootottartalmazó partíció előkerítésére.
Grub: a rendszerbetöltő javítása
5
grub> find /boot/grub/stage2 <Enter>(hd0,0) ← Ez a grub kimenete.
Ha több van, akkor válaszd ki azt a partíciót, ahol ajavított menu.lstd van. Közöld a grubbal akövetkező begépelésével
grub> root (hd0,0) <enter>
Azt itt kiválasztott partíciót használja.
Filesystem type is ext2fs, partitiontype 0x83
Most közöld a grubbal, hogy a stage1es fájlt hováhelyezze. Ez az a meghajtó, amiről az alaplapi BIOSbootolni próbál majd. Vedd észre, hogy partíciótnem kell megjelölni, mivel meghajtót határozunkmeg.
grub> setup (hd0) <enter>Checking if "/boot/grub/stage1" exists… yesChecking if "/boot/grub/stage2" exists… yesChecking if "/boot/grub/e2fs_stage1_5"exists … yesRunning "embed/boot/grub/e2fs_stage1_5 (hd0)" … 17sectors are embedded.succeededRunning "install /boot/grub/stage1(hd0) (hd0)1+17p(hd0,0)/boot/grub/stage2/boot/grub/menu.lst" … succeeded
Done.
Ezzel készen is volnánk. Írd be, hogy quit
<Enter>, a grub elhagyásához.
Multibootos operációs rendszerek
Ha több közül akarod kiválasztani a betöltendőoperációs rendszert, akkor azt a következő módonérheted el a legegyszerűbben.
A telepítési folyamat végén megkérdezi, hogy agrubot hová telepítse, az alapbeállítás a telepítésrehasznált meghajtó MBRje lenne. Válaszd helyette atelepítés partícióját. Ezután kéri a bootmeghajtókijelölését. Ez legyen az a root, amit a grubnál,terminálból kézzel állítottunk be.
Így most két menu.lst fájlod lesz, egyik az újtelepítés /boot/grub könyvtárában és az eredeti fájl.Én most egy ZenMini telepítéshez az /sda5öthasználom, amit a grub (hd0,4)ként ismer. Add akövetkező sorokat az eredeti menu.lst fájlhoz
title zenminiroot (hd0,4)configfile /boot/grub/menu.lst
Amikor ezt a menüelemet választom, akkor egy újképernyő válik láthatóvá, ahol az új telepítésemmenüje és grafikája fogad. Az új telepítésemmenu.lstje megegyezhet az alap menu.lsttel, azzala különbséggel, hogy a (hd0,0) helyettmindenhol(hd0,4) lesz, ami nagyban megkönnyíti arendszer karbantartását. A zen menu.lstjében egy
stanza az alábbi módon nézhet ki:
title zenkernel (hd0,4)/boot/mykernelroot=LABEL=kde4initrd (hd0,4)/boot/myinitrd
Ez pedig az alap menu.lst részlete:
title lxderoot (hd0,5)configfile /boot/grub/menu.lst
title e17root (hd0,6)configfile /boot/grub/menu.lst
title Phoenixroot (hd0,7)configfile /boot/grub/menu.lst
Én ezt így sokkal könnyebben követhetőnek találom.
Windows hozzáadása a menühöz
Egy Windowshoz hasonló operációs rendszerbetöltése, amelyik nem használ grubot, de van sajátrendszerbetöltője, hasonlóképpen történhet. Hozzákell adnod egy ilyen stanzat a menu.lsthez:
title Windowsrootnoverify (hd0,2)makeactivechainloader +1
Grub: a rendszerbetöltő javítása
6
Megjegyzés: Váltás van a (hd0,2)re, ahová awindows települt.
A rootnoverify mint egy rootparancs működik, tájékoztatva a grubot a betöltő kódja második részénekhelyéről, de nem kísérli meg ekkorl felcsatolni a partíciót, mivel a grubnak problémát okozhatna.
A makeactive a rootpartíciót aktívvá teszi.
A chainloader +1 megmondja a grubnak, hogy amásodik szektorban keresse a boot kódot (az elsőmindig a fájlrendszernek van fenntartva).
A grub parancs használata rendszerbetöltéskor
Ha a betöltés nem sikerül, akkor még mindig működésre bírhatod a rendszert a grub parancshéjánkeresztül. Amikor megjelenik a grafikus menü, nyomj<Esc>et és egy jóváhagyó párbeszédet követőenszöveges módú menühöz jutsz.
Lehet, hogy gépelési hibát követtél el a beállító fájlodban, vagy a szövegszerkesztőd a túl hosszú sortkettévágta és így a grub nem vesz tudomást róla. Ittszerkesztheted a sort. A pozicionáló billentyűkkelválaszd a menübejegyzést, amelyik nem töltődik beés nyomj „E”t, majd <Enter>t. Az „E” ismételtlenyomásával a kiválasztott sor a grubhéjparancssorába kerül, ahol szerkeszthető. A helyőrzőa sor végén lesz, de mozgathatod a nyilakkal, a„Home” és „End” gombokkal. A változások elfogadásához nyomj <Enter>t, vagy <Esc>et, hogymentés nélkül visszajuss az előző képernyőhöz.Nyomj „D”t a kijelölt soron a törléséhez, amit akkor
kell tenned, ha a szerkesztőd a sorokat kettévágtaés lett egy használhatatlan fél sorod.
Nyomj „B”t, hogy próbálja a módosított sorral betölteni. A változások csak a memóriába kerülnek ésnem a menulstbe. Ha valóban az volt a probléma,akkor a sikeres betöltés után a fájlt módosítani kell.
Ha nincs hiba, akkor sincs minden veszve, nyomj„C”t, hogy, a boot loader újratelepítéséhez használtkörnyezethez hasonló parancssorhoz juss.
A grub> find /boot/grub/stage2 <Enter>
megkeresi az összes telepített meghajtót, amelyik agrub rootjaként szóba jöhet. Használd a rootparancsot, hogy a grubnak rámutass a partícióra.
grub> root (hd0,0) <Enter>
A partíción a kernel előkerítéséhez, aminek a /bootkönyvtárban kell lennie, használhatjuk a grubparancskiegészítő lehetőségét. A kernel valamivmlinuz … stb. lesz.
grub> kernel /boot/vm <Tab>
A <Tab> billentyű lenyomása mondja meg akernelnek, hogy egészítse ki annyira, amennyirelehet és listázza ki az opciókat.
grub> kernel /boot/vmlinuz
A lehetséges fájlok: vmlinuz vmlinuz2.6.32.11pclos2
Tudjuk, hogy a vmlinuz egy hivatkozás, tehát amásik fájl lesz a tényleges kernel, amit a hivatkozáslehetséges sérülése miatt használni fogunk. Nemkell a teljes nevet begépelnünk, csak a kötőjelet és<Tab>ot, a többit a grub kitölti. Ezzel a gépelésihibák kiküszöbölhetőek.
grub> kernel /boot/vmlinuz <Tab>grub> kernel /boot/vmlinuz2.6.32.11pclos2[LinuxbzImage, setup=0x3a00,size=0x1f4400]
Úgy tűnik most már működik, tehát ugyanezt azinitrdre is megcsinálhatjuk.
grub> /boot/init <Tab>grub> /boot/initrd
Lehetséges fájlok: initrd2.6.32.11pclos2.img initrd.img
grub> /boot/initrd <Tab>grub> initrd /boot/initrd2.6.32.11pclos2.img[Linuxinitrd @ 0x1f9a3000, 0x63c8e2bytes]
A grub most már rendelkezik az szükséges információkkal, megpróbálhatjuk elindítani a rendszert.
grub> boot <Enter>
Az összes fenti grubműveletet tényleges telepítésbőlvettem, tehát tudom, hogy működik. A legbiztonsá
Grub: a rendszerbetöltő javítása
7
gosabban e technikákat Virtual Box telepítésen lehetgyakorolni. Nagyon könnyen telepíthető, a magazin2008. októberi számban találhatsz róla leírást a jelenlegi szerkesztő, parnote tollából. A cikkbenWindows telepítéséről van szó, de az elvekPCLinuxOS esetében is azonosak.
Grub: a rendszerbetöltő javítása