Grub: Grub: rendszerbetöltö rendszerbetöltö jvítás jvítás PCLinuxOS Mgzine 2011. jnuár Írt Pete Kelly (critter) Későre jár és holnp sűrű npod lesz. Mented tehát munkádt és kikpcsolod komputert. Másnp bekpcsolod gépet és megáll szíved, mikor ezt z üzenetet látod: kernel pnic, vgy grub error és számítógép nem indul. Most mi legyen? Nos, jó hír z, hogy kpott üzenet jelzi, hib nem egyéb, mint szoftver problém és egy beállító fájlt kell kijvítni, vgy boot betöltő progrmját kell újr telepíteni. Ezt nem nehéz megcsinálni, de jó, h érted is, hogy mit krsz elérni. Tehát, mindenek előtt szükségünk vn némi háttér információr. Igyekszem egyszerűen foglmzni. A betöltési (boot) folymt Amikor feszültség lá helyezed komputert, processzornk meg kell mondni, hogy mit csináljon. Az lplpnk vn egy listáj meghjtókról, mikről komputer képes betölteni Tudj zt is, hogy milyen sorrendben kell próbálkozni, és így processzort list első meghjtójár irányítj. A processzor meghjtó tároló területének elejére megy további információkért. Ez tároló terület kisebb, szektornk nevezett részekre oszlik, és processzor meghjtó első szektorár néz, mit Mster Boot Record nk, vgy MBR nek hívnk. Az összes prtíció első szektor szintén fogllt, és boot szektornk nevezik. Itt nincs elegendő hely processzor számár szükséges összes információ tárolásár, tehát muttj processzornk, hogy hol tlálj kódot, mi boot betöltési folymtánk befejezéséhez szükséges, így processzor folytthtj teljes rendszerbetöltést. A PCLinuxOS áltl hsznált boot betöltő progrmot grub nk (GRnd Unified Bootloder) hívják és z MBR ben tárolt kódot, pedig grub stge 1 nek. A memóriáb betöltendő utolsó kódrészlete pedig grub stge 2. A stge 2 indítj kernelt és állít fel egy ideiglenes fájlrendszert memóriábn, mi kernel számár, sikeres rendszerindításhoz szükséges modulokhoz és meghjtókhoz hsonló dolgokt trtlmz. Ehhez egy initil rm disk ként, vgy initrd.img ként ismert rendszerképet hsznál. Sjnos itt vn problémánk. Vn egyszer stge2, mi tudj, hogy rendszer hol tárolj kernelt és z initrd t, ugynkkor stge1 semmit sem tud fájlrendszerről. Lépjünk stge1_5 be. Ezekből több is vn és mindegyik rendszerfüggően kp nevet, mint e2fs_stge1_5és reiserfs_stge1_5. A stge1_5 kód ezekben fájlokbn jelenti kpcsot kettő között, de stge1 nek képesnek kell lennie rr, hogy megtlálj. Szerencsére, meghjtó prtíciói elhelyezési módjánk köszönhetően mindig vn néhány szbd szektor z első, lefogllt után, és ez z, hová kiegészítő kód kerül. A stge1 tudj, hogy mindig meg kell néznie root prtíció második szektorát és z ott tlálhtó kód végrehjtás után grub képes lesz megtlálni dolgokt fájlrendszerben. Amikor szükséges betöltési feldtokt elvégezve, kernel már képes lesz fiziki fájlrendszer kezelésére, vezérlés átkerül kernelhez. Ngy vonlkbn így működik PCLinuxOS nél. Ennél sokkl többet lehetne grub rendszeréről mesélni, és nem ez z egyetlen módj rendszer betöltésének. Helyreállítás A következők PCLinuxOS disztribúcióir érvénye sek és nekem mindig bevált, zonbn más rend szerek esetén lehet, hogy kiigzítást igényelnek. Ubuntu és z összes Ubuntu lpú változt grub2 öt hsznál, hol ez biztosn nem működik. A fentiekből következik, hogy grub nk három dolgot kell megmondni, hogy betölthesse z operációs rendszert: Hol kernel? Hol z initrd? Melyik meghjtó, vgy prtíció hordozz grub stge1_5 öt és stge2 öt? Ezt z információt grub áltlábn konfigurációs fájljától kpj, mi PCLinuxOS esetében 1
/boot/grub/menu.lst. Néhány rendszer ezt grub.conf nk hívj. H fájl információi hibásk kkor hiányzó kernel, vgy initrd grub error t (hib) d, és rossz fájlrendszer leírás kernel pánik üzenetet d. Az információk boot prncssorábn is megdh tók, bár ezt egy kicsit tovább trt összehozni. A helyreállításához indíts telepítés LiveCD jéről, mi memóriábn futó operációs rendszert d, és itt meghjtód bármelyik hibás fájlját kijvíthtod. su <Enter> Kéri rendszergzd (root) jelszvát. Most rend szergzdi jogosítványokt kptál, ezért különösen od kell figyelni rr, hogy mit írsz prncssorb. Írd be: grub <Enter> Kpsz egy ellenőrző üzenetet és belépsz grub prncshéjáb, hol prncsokt dhtsz ki, sőt grub teljes rezidens részét újr is telepítheted: GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Miniml BASH like line editing is supported. For the first word, TAB lists possible commnd completions. Anywhere else TAB lists the possible completions of device/filenme. ] grub> A prncssorb írd be következőket: find /boot/grub/stge2 <Enter> Az információk előkerítése Először is tudni kell, hogy PCLinuxOS melyik meg hjtór és prtíciór lett telepítve, és ebben grub segíthet. LiveCD ről indítv nyiss egy terminált és szerezz rendszergzd jogokt következők begépelésével: Kpsz egy listát zokról prtíciókról, mik grub stge2 t trtlmznk. A legtöbb ember esetében ez csk egy prtíció lesz, de h több Linux ot is indíthtnál, kkor mindegyik szerepelni fog. A prtíciók ilyen (hd0,0), vgy hsonló formábn jelennek meg, mivel grub nem ismer hd1 et, vgy sd1 et. Egyszerűen meghjtóként látj őket. A grub nullától és nem egytől kezdi számolást. Az első szám meghjtó, második prtíció sorszám. Írd be, hogy quit <Enter> grub elhgyásához. Most már tudjuk, rendszerünket trtlmzó meghjtó és prtíció sorszámát, cstolhtjuk és körülnézhetünk. Abból indulok ki, hogy ez prtíció (hd0,0), z első lemez első prtíciój. Még mindig terminálbn root ként írd be: mkdir / <Enter> mount /dev/sd1 / <Enter> H meghjtód IDE, kkor z sd t cseréld hd r. H nem tudod, kkor fdisk l <Enter> t beírv megkpod felismert meghjtók listáját. A meghjtó most már z / lá cstolásr került és így kernelnek és z intrd nek z //boot bn kell lennie. A kernel és z initrd neve elég hosszú, összetett, tehát egyszerűbb hivtkozásokt készíteni hozzájuk. A kernel neve vmlinuz zl kezdődik, z initrd é pedig initrd vel. A megjelenítésükhöz gépeld be z lábbikt és jegyezd fel neveket. ls //boot/vmlinuz* <enter> ls //boot/initrd* <enter> Az @ tel végződő név hivtkozás, hsználhtod grub od beállító fájljábn. és 2 ezt
A prtíció címkézése Most kptm két hivtkozást, vmlinuz és initrd néven. Azt is tudom, hogy betöltés eszköze (hd0,0), de könnyebbnek trtom címkék hsználtát. H tehát zt gépelem, hogy tune2fs L kde4 /dev/sd1, ez kde4 címkét d prtíciómnk. Hsonló módon címkét dok minden meghjtómnk. H jobb szereted grfikus felületet, hsználtod PCLinuxOS Vezérlőközpontját, ott Helyi lemezek Lemezprtíciók kezelése Átváltás szkértői módb résznél. A beállító fájl Most megvizsgálhtod és kijvíthtod menu.lst t. Én nno prncssori szövegszerkesztőt hsználom, mivel ngyon könnyű fájlokt szerkeszteni, de te bármilyen olyn szövegszerkesztőt hsználhtsz, mi sim, formázás nélküli szöveget ment. Nyisd meg telepített rendszer menu.lst fájlját: nno //boot/grub/menu.lst <Enter> Az eredeti fájl így néz ki: timeout 10 color white/blue yellow/blue gfxmenu (hd0,0)/boot/gfxmenu defult 0 title linux kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux root=uuid=442bec9e f143 4cc2 866c d6592fbc69 resume=uuid=fcc 054d 424b 83c 093f1b2743d splsh=silent vg=788 initrd (hd0,0)/boot/initrd.img title linux nonfb kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=linux nonfb root=uuid=442bec9e f143 4cc2 866c d6592fbc69 resume=uuid=fcc 054d 424b 83c 093f1b2743d initrd (hd0,0)/boot/initrd.img title filsfe kernel (hd0,0)/boot/vmlinuz BOOT_IMAGE=filsfe root=uuid=442bec9e f143 4cc2 866c d6592fbc69 filsfe initrd (hd0,0)/boot/initrd.img Új menüelem hozzádás Nem nnyir bonyolult, mint milyennek látszik. Az első négy sor menüt állítj be, míg háromsoros blokkok egy egy stnz nk (szksz) hívott bejegyzést tkrnk. A fenti stnz k mindegyike három sorból áll, még h mgzin vlószínűleg szét is tördeli zokt. A menu.lst formátum lényeges. title kde4 kernel (hd0,0)/boot/mykernel root=label=kde4 initrd (hd0,0)/boot/myinitrd A három sor title, kernel és initrd kezdetű. Mindegyik pontosn egy sor hosszúságú kell legyen, még h kernel sor gykrn elég hosszúr nyúlik is. Egyéb sorok is lehetnek stnz bn, de ezeknek is egysorosnk kell lenniük. Új stnz t (menüelemet) fogok hozzádni z elejére, pontosbbn zon sorok közé, mik defults 0 és title linux felirtot jelenítik meg: Minden stnz előtt és után legyen egy egy üres sor, különben grub nem tudj, hogy hol kezdődik és hol végződik stnz. Miután begépelted ezt, trtsd Control gombot lenyomv és üss X et, megkérdezi, hogy mentse e. Mondj igent. 3
Ez elég lesz rr, hogy betölts, de kicsit eligzíthtod, h már elégedett vgy trtlmávl. Vlójábn csk ezek háromsorosok lehetnek menu.lst ben. Nem próbáltm megjvítni fájlt. Ehelyett beírtm sját utsításimt, mikről tudtm, hogy jók menu.lst beállító fájlb és így én irányítok. A grub eredeti utsításit is érintetlenül hgytm. Később, h már biztos vgyok bbn, hogy rendszerem képes betöltődni, vissztérhetek és szerkeszthetem fájlt, de z eredeti trtlmt még mindig megőriztem. Mit jelent mindez A menu.lst elején négy sor következő feldtokt hjtj végre. A Timeout=10 beállítj z időt másodpercekben, meddig grub vár z lpbeállítás szerinti menüelem betöltésével. H nincs meghtározv, kkor z z első lesz. Az idő lejárt előtt megnyomott bármilyen billentyű felfüggeszti visszszámlálást. A color white/blue yellow/blue szöveges menü színeit állítj be (mit kkor látsz, mikor grfikus menü megjelenítése idején lenyomod z <ESC> bil lentyűt. Néh szükség vn erre). Az első páros beál lítj z előtér és háttér színét, második páros pedig kiválsztott sor kiemelésére vontkozik. A gfxmenu (hd0,0)/boot/gfxmenu megmondj grub nk, hogy hol tlálj grfikus menüt. A defult 0 megdj, hogy lpbeállítás szerint h nydik menüelemet töltse be, számolás 0 tól indul. A sim puritán stnz elemzését kezdhetjük kernel sorához hozzádott dolgokkl. A splsh=silent vg=788 lehetővé teszi telepített grfikus témánk képernyőn túlnyúló szöveg elrej tését. A legtöbb kijelzőnek 788 s szám megfelelő. Amennyiben hibernálást is szeretnél gépeden, k kor meg kell mondni grub nk, hogy hol tlálj z előző munkmenet helyreállító információit. Ezek swp prtíciór kerülnek, így sikeres hibernáció érdekében ennek prtíciónk mérete legyen egy kicsit ngyobb telepített memóriánál. H swp prtíciód /dev/sdb1, kkor dd resume=/dev/sdb1 részt kernel sorához. A prtí ció ebben formábn megdhtó, mert grub, mire ideér, már érti meghjtók jelöléseit. A PCLinuxOS lp telepítésében három stnz vn Az első teljes grfikus boot ot d bejelentkező képernyőig. A következő neve linux nonfb, vgy hsonló és lehetővé tesz grfikus képernyőkép nélküli betöltést, hogy láthsd rendszerüzeneteket betöltés során. Ez hibelhárításkor hsznos. A szöveg görgetését szüneteltetheted billentyűzeten Scroll Lock gomb lenyomásávl. felhsználós módbn lép be, hol különféle beállításokt végezheted el, mint fájlrendszer ellenőrzése és root jelszó helyreállítás. H minden rendben vn, kkor init 5 begépelésével vissztérhetsz bejelentkező képernyőhöz. Ezek z üzemmódok úgy érhetők el, hogy kernel sorábn, vlhová kernel és root prtíció meghtározás közé beszúrod következők egyikét: BOOT_IMAGE=linux BOOT_IMAGE=linux nonfb BOOT_IMAGE=filsfe Amikor tudod, hogy z új menü eleme(i)d rendben betölti(k) rendszert, kkor régi(eke)t törölheted, de készíts fájlról egy másoltot vlhová, hol bármikor elérheted. H bármelyik sort # tel nyitod, kkor z z elem nem jelenik meg menüben. A # tel kezdődő sorokt megjegyzésként kezeli és nem hjtj végre. A rendszerbetöltő újrtelepítése H grub mg sérült meg, kkor viszonylg egyszerű lpállpotb helyezni. Mint korábbn is, nyiss egy terminált, hsználd su t, hogy rootjogot nyerj és indítsd grub prncshéját következővel: grub <Enter> Hsználd grub find (keresés) prncsát root ot trtlmzó prtíció előkerítésére. Az utolsót filsfe nek nevezik, és korlátozott, egy 4
grub> find /boot/grub/stge2 <Enter> (hd0,0) Ez grub kimenete. H több vn, kkor válszd ki zt prtíciót, hol jvított menu.lst d vn. Közöld grub bl következő begépelésével grub> root (hd0,0) <enter> Azt itt kiválsztott prtíciót hsználj. Filesystem type is ext2fs, prtition type 0x83 Most közöld grub bl, hogy stge1 es fájlt hová helyezze. Ez z meghjtó, miről z lplpi BIOS boot olni próbál mjd. Vedd észre, hogy prtíciót nem kell megjelölni, mivel meghjtót htározunk meg. grub> setup (hd0) <enter> Checking if "/boot/grub/stge1" exists yes Checking if "/boot/grub/stge2" exists yes Checking if "/boot/grub/e2fs_stge1_5" exists yes Running "embed /boot/grub/e2fs_stge1_5 (hd0)" 17 sectors re embedded. succeeded Running "instll /boot/grub/stge1 (hd0) (hd0)1+17 p(hd0,0)/boot/grub/stge2 /boot/grub/menu.lst" succeeded Done. stnz z lábbi módon nézhet ki: Ezzel készen is volnánk. Írd be, hogy quit <Enter>, grub elhgyásához. title zen kernel (hd0,4)/boot/mykernel root=label=kde4 initrd (hd0,4)/boot/myinitrd Multi boot os operációs rendszerek H több közül krod kiválsztni betöltendő operációs rendszert, kkor zt következő módon érheted el legegyszerűbben. A telepítési folymt végén megkérdezi, hogy grub ot hová telepítse, z lpbeállítás telepítésre hsznált meghjtó MBR je lenne. Válszd helyette telepítés prtícióját. Ezután kéri boot meghjtó kijelölését. Ez legyen z root, mit grub nál, terminálból kézzel állítottunk be. Így most két menu.lst fájlod lesz, egyik z új telepítés /boot/grub könyvtárábn és z eredeti fájl. Én most egy Zen Mini telepítéshez z /sd5 öt hsználom, mit grub (hd0,4) ként ismer. Add következő sorokt z eredeti menu.lst fájlhoz title zen mini root (hd0,4) Amikor ezt menüelemet válsztom, kkor egy új képernyő válik láthtóvá, hol z új telepítésem menüje és grfikáj fogd. Az új telepítésem menu.lst je megegyezhet z lp menu.lst tel, zzl különbséggel, hogy (hd0,0) helyett mindenhol(hd0,4) lesz, mi ngybn megkönnyíti rendszer krbntrtását. A zen menu.lst jében egy Ez pedig z lp menu.lst részlete: title lxde root (hd0,5) title e17 root (hd0,6) title Phoenix root (hd0,7) Én ezt így sokkl könnyebben követhetőnek tlálom. Windows hozzádás menühöz Egy Windows hoz hsonló operációs rendszer betöltése, melyik nem hsznál grub ot, de vn sját rendszerbetöltője, hsonlóképpen történhet. Hozzá kell dnod egy ilyen stnz t menu.lst hez: title Windows rootnoverify (hd0,2) mkective chinloder +1 5
Megjegyzés: Váltás vn (hd0,2) re, hová windows települt. kell tenned, h szerkesztőd sorokt kettévágt és lett egy hsználhttln fél sorod. A rootnoverify mint egy rootprncs működik, tájé kozttv grub ot betöltő kódj második részének helyéről, de nem kísérli meg ekkorl felcstolni pr tíciót, mivel grub nk problémát okozhtn. Nyomj B t, hogy próbálj módosított sorrl betöl teni. A változások csk memóriáb kerülnek és nem menu lst be. H vlóbn z volt problém, kkor sikeres betöltés után fájlt módosítni kell. A mkective rootprtíciót ktívvá teszi. H nincs hib, kkor sincs minden veszve, nyomj C t, hogy, boot loder újrtelepítéséhez hsznált környezethez hsonló prncssorhoz juss. A chinloder +1 megmondj grub nk, hogy második szektorbn keresse boot kódot (z első mindig fájlrendszernek vn fenntrtv). A grub prncs hsznált rendszerbetöltéskor H betöltés nem sikerül, kkor még mindig műkö désre bírhtod rendszert grub prncshéján keresztül. Amikor megjelenik grfikus menü, nyomj <Esc> et és egy jóváhgyó párbeszédet követően szöveges módú menühöz jutsz. Lehet, hogy gépelési hibát követtél el beállító fáj lodbn, vgy szövegszerkesztőd túl hosszú sort kettévágt és így grub nem vesz tudomást ról. Itt szerkesztheted sort. A pozicionáló billentyűkkel válszd menübejegyzést, melyik nem töltődik be és nyomj E t, mjd <Enter> t. Az E ismételt lenyomásávl kiválsztott sor grub héj prncssoráb kerül, hol szerkeszthető. A helyőrző sor végén lesz, de mozgthtod nyilkkl, Home és End gombokkl. A változások elfo gdásához nyomj <Enter> t, vgy <Esc> et, hogy mentés nélkül visszjuss z előző képernyőhöz. Nyomj D t kijelölt soron törléséhez, mit kkor A grub> find /boot/grub/stge2 <Enter> megkeresi z összes telepített meghjtót, melyik grub root jként szób jöhet. Hsználd root prncsot, hogy grub nk rámutss prtíciór. grub> root (hd0,0) <Enter> A prtíción kernel előkerítéséhez, minek /boot könyvtárbn kell lennie, hsználhtjuk grub prncskiegészítő lehetőségét. A kernel vlmi vmlinuz stb. lesz. grub> kernel /boot/vm <Tb> A <Tb> billentyű lenyomás mondj meg kernelnek, hogy egészítse ki nnyir, mennyire lehet és listázz ki z opciókt. grub> kernel /boot/vmlinuz A lehetséges fájlok: 2.6.32.11 pclos2 vmlinuz Tudjuk, hogy vmlinuz egy hivtkozás, tehát másik fájl lesz tényleges kernel, mit hivtkozás lehetséges sérülése mitt hsználni fogunk. Nem kell teljes nevet begépelnünk, csk kötőjelet és <Tb> ot, többit grub kitölti. Ezzel gépelési hibák kiküszöbölhetőek. grub> kernel /boot/vmlinuz <Tb> grub> kernel /boot/vmlinuz 2.6.32.11 pclos2 [Linux bzimge, setup=0x300, size=0x1f4400] Úgy tűnik most már működik, tehát ugynezt z initrd re is megcsinálhtjuk. grub> /boot/init <Tb> grub> /boot/initrd Lehetséges fájlok: initrd 2.6.32.11 pclos2.img initrd.img grub> /boot/initrd <Tb> grub> initrd /boot/initrd 2.6.32.11 pclos2.img [Linux initrd @ 0x1f93000, 0x63c8e2 bytes] A grub most már rendelkezik z szükséges infor mációkkl, megpróbálhtjuk elindítni rendszert. grub> boot <Enter> vmlinuz Az összes fenti grubműveletet tényleges telepítésből vettem, tehát tudom, hogy működik. A legbiztonsá 6
gosbbn e technikákt Virtul Box telepítésen lehet gykorolni. Ngyon könnyen telepíthető, mgzin 2008. októberi számbn tlálhtsz ról leírást je lenlegi szerkesztő, prnote tollából. A cikkben Windows telepítéséről vn szó, de z elvek PCLinuxOS esetében is zonosk. 7