102.2 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
102 A Linux telepítése és a csomagkezelés |
Fejezet: |
102.2 Boot manager telepítése |
Lecke: |
1/1 |
Bevezetés
A számítógép bekapcsolásakor az első szoftver, amely elindul, a bootloader. Ez egy olyan kódrészlet, amelynek egyetlen célja, hogy betöltse az operációs rendszer kernelét, és átadja neki az irányítást. A kernel betölti a szükséges illesztőprogramokat, inicializálja a hardvert, majd betölti az operációs rendszer többi részét.
A legtöbb Linux-disztribúcióban használt bootloader a GRUB. A Linux kernelt vagy más operációs rendszereket, például a Windowst is képes betölteni, és több kernelképet és paramétert is képes külön menüpontokként kezelni. A kernel kiválasztása a rendszerindításkor billentyűzetvezérelt felületen keresztül történik, és van egy parancssori felület a rendszerindítási opciók és paraméterek szerkesztésére.
A legtöbb Linux disztribúció automatikusan telepíti és konfigurálja a GRUB-ot (valójában a GRUB 2-t), így egy átlagos felhasználónak nem kell erre gondolnia. Rendszergazdaként azonban létfontosságú tudni, hogyan lehet irányítani a rendszerindítási folyamatot, hogy például egy sikertelen kernelfrissítés után helyreállíthassuk a rendszert egy hibás rendszerindításból.
Ebben a leckében a GRUB telepítésével, konfigurálásával és a GRUB-bal való interakcióval fogunk foglalkozni.
GRUB Legacy vs. GRUB 2
A GRUB (Grand Unified Bootloader) eredeti verzióját, amely ma GRUB Legacy néven ismert, 1995-ben fejlesztették ki a GNU Hurd projekt részeként, és később számos Linux-disztribúció alapértelmezett rendszerbetöltőjeként használták, felváltva a korábbi alternatívákat, például a LILO-t.
A GRUB 2 a GRUB teljes átírása, amelynek célja, hogy tisztább, biztonságosabb, robusztusabb és erősebb legyen. A GRUB Legacyvel szembeni számos előnye között szerepel a sokkal rugalmasabb konfigurációs fájl (sokkal több paranccsal és feltételes utasítással, hasonlóan egy szkriptnyelvhez), a modulárisabb felépítés és a jobb lokalizáció/internacionalizálás.
Támogatja továbbá a témákat és a grafikus indítási menüket, a LiveCD ISO-k betöltését közvetlenül a merevlemezről, jobban támogatja a nem x86-os architektúrákat, univerzálisan támogatja az UUID-ket (megkönnyítve a lemezek és partíciók azonosítását) és még sok minden mást.
A GRUB Legacy már nem áll aktív fejlesztés alatt (az utolsó kiadás a 0.97-es volt 2005-ben), és ma már a legtöbb nagyobb Linux disztribúció a GRUB 2-t telepíti alapértelmezett bootloaderként. Azonban még mindig találhatunk GRUB Legacy-t használó rendszereket, ezért fontos tudni, hogyan kell használni, és miben különbözik a GRUB 2-től.
Hol van a Bootloader?
Az IBM PC-kompatibilis rendszerek merevlemezeit hagyományosan az 1982-ben az IBM PC-DOS (MS-DOS) 2.0-hoz készített MBR particionálási sémával particionálták.
Ebben a sémában a lemez első 512 bájtos szektorát Master Boot Record-nak nevezik, és ez tartalmazza a lemezen lévő partíciókat leíró táblázatot (a partíciós táblát), valamint a bootloadernek nevezett bootstrap kódot.
A számítógép bekapcsolásakor ez a (méretkorlátozások miatt) nagyon minimális bootloader kód betöltődik, végrehajtódik és átadja a vezérlést a lemezen lévő másodlagos bootloadernek, amely általában az MBR és az első partíció közötti 32 KB-os területen található, és ami betölti az operációs rendszer(ek)et.
MBR-partícionált lemezen a GRUB boot kódja az MBR-re települ. Ez betölti és átadja a vezérlést az MBR és az első partíció közé telepített “core” lemezképnek. Ettől a ponttól kezdve a GRUB képes a többi szükséges erőforrást (menüdefiníciók, konfigurációs fájlok és extra modulok) a lemezről betölteni.
Az MBR azonban korlátozza a partíciók számát (eredetileg maximum 4 elsődleges partíció, később maximum 3 elsődleges partíció, 1 kiterjesztett partícióval, amely logikai partíciókra van felosztva) és a lemezek maximális mérete 2 TB. E korlátozások leküzdésére egy új particionálási séma, a GPT (GUID Partition Table) jött létre, amely az UEFI (Unified Extensible Firmware Interface) szabvány része.
A GPT-particionált lemezek hagyományos PC BIOS-szal vagy UEFI firmware-rel rendelkező számítógépeken egyaránt használhatók. BIOS-szal rendelkező gépeken a GRUB második része egy speciális BIOS bootpartícióban tárolódik.
Az UEFI firmware-rel rendelkező rendszereken a GRUB-ot a firmware a grubia32.efi
(32 bites rendszerek esetén) vagy a grubx64.efi
(64 bites rendszerek esetén) fájlokból tölti be az ESP (EFI System Partition) nevű partícióról.
A /boot
partíció
Linuxon a rendszerindításhoz szükséges fájlokat általában egy boot partíción tárolják, amelyet a root fájlrendszer alá csatolnak, és a köznyelvben /boot
néven emlegetnek.
A boot partícióra nincs szükség a jelenlegi rendszereken, mivel az olyan bootloaderek, mint a GRUB, általában tudják csatlakoztatni a gyökér fájlrendszert és keresik a szükséges fájlokat a /boot
könyvtárban, de ez azért egy jó gyakorlat, mert elkülöníti a boot folyamathoz szükséges fájlokat a fájlrendszer többi részétől.
Ez a partíció általában az első a lemezen. Ennek az az oka, hogy az eredeti IBM PC BIOS a lemezeket Cilinderek (Cylinders), Fejek (Heads) és Szektorok (Sectors) (CHS) használatával címezte, maximum 1024 cilinderrel, 256 fejjel és 63 szektorral, ami 528 MB maximális lemezméretet eredményezett (504 MB MS-DOS alatt). Ez azt jelenti, hogy minden, ami ezen a határon túl van, nem lenne elérhető, hacsak nem használunk más lemezcímzési sémát (például LBA, Logical Block Addressing).
A maximális kompatibilitás érdekében a /boot
partíció általában a lemez elején található és az 1024-es cilinder (528 MB) előtt ér véget, így biztosítva, hogy a gép mindig be tudja tölteni a kernelt. Ennek a partíciónak az ajánlott mérete egy mai gépen 300 MB.
További okok a külön /boot
partíció létrehozására a titkosítás és a tömörítés, mivel néhány módszert a GRUB 2 még nem támogat, vagy ha a rendszer gyökérpartícióját (/
) nem támogatott fájlrendszerrel kell formázni.
A Boot partíció tartalma
A /boot
partíció tartalma a rendszer architektúrájától vagy a használt bootloadertől függően változhat, de egy x86-alapú rendszeren általában az alábbi fájlokat találhatjuk meg. Ezek többsége -VERSION
utótaggal van elnevezve, ahol a -VERSION
a megfelelő Linux kernel verziója. Így például a Linux kernel 4.15.0-65-generic
verziójához tartozó konfigurációs fájl neve config-4.15.0-65-generic
.
- Config fájl
-
Ez az általában
config-VERSION
nevű fájl (lsd. a fenti példát) a Linux kernel konfigurációs paramétereit tárolja. Ez a fájl automatikusan létrejön, amikor egy új kernelt fordítanak vagy telepítenek, és a felhasználónak nem szabad közvetlenül módosítania. - System map
-
Ez a fájl egy keresőtábla, amely a szimbólumok (például változók vagy függvények) neveit a memóriában lévő megfelelő pozíciójukhoz rendeli. Ez hasznos a kernel panic (kernelpánik) néven ismert rendszerhiba elhárításakor, mivel lehetővé teszi a felhasználó számára, hogy megtudja, melyik változót vagy függvényt hívták meg a hiba bekövetkezésekor. A config fájlhoz hasonlóan a neve általában
System.map-VERSION
(pl.System.map-4.15.0-65-generic
). - Linux kernel
-
Ez az operációs rendszer tulajdonképpeni kernele. A neve általában
vmlinux-VERSION
(pl.vmlinux-4.15.0-65-generic
). Avmlinux
helyett avmlinuz
név is előfordulhat, az
a végén azt jelenti, hogy a fájl tömörítve van. - Initial RAM lemez
-
Ez általában az
initrd.img-VERSION
nevet viseli, és egy RAM lemezre betöltött minimális root fájlrendszert tartalmaz, amely tartalmazza a segédprogramokat és a kernelmodulokat, amelyek szükségesek ahhoz, hogy a kernel fel tudja csatolni a valódi root fájlrendszert. - Bootloaderrel kapcsolatos fájlok
-
Ezek a GRUB konfigurációs fájl (GRUB 2 esetén a
/boot/grub/grub.cfg
, illetve GRUB Legacy esetén a/boot/grub/menu.lst
), modulok (a/boot/grub/i386-pc
-ben), fordítási fájlok (a/boot/grub/locale
-ben) és betűtípusok (a/boot/grub/fonts
-ben).
GRUB 2
A GRUB 2 telepítése
A GRUB 2 a grub-install
segédprogrammal telepíthető. Ha nem-bootoló rendszerrel rendelkezünk, akkor egy Live CD vagy rescue lemez segítségével kell bootolni. Meg kell találnunk, hogy melyik a rendszer boot partíciója, csatlakoztatni kell azt, majd futtatni a segédprogramot.
Note
|
Az alábbi parancsok azt feltételezik, hogy root felhasználóként vagyunk bejelentkezve. Ha nem, akkor először futtassuk a |
A rendszer első lemeze általában a boot eszköz, és tudnunk kell, hogy van-e rajta boot partíció. Ezt az fdisk
segédprogrammal lehet ellenőrizni. A gép első lemezén lévő összes partíciót a következővel tudjuk felsorolni:
# fdisk -l /dev/sda Disk /dev/sda: 111,8 GiB, 120034123776 bytes, 234441648 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x97f8fef5 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 2000895 1998848 976M 83 Linux /dev/sda2 2002942 234440703 232437762 110,9G 5 Extended /dev/sda5 2002944 18008063 16005120 7,6G 82 Linux swap / Solaris /dev/sda6 18010112 234440703 216430592 103,2G 83 Linux
A boot partíciót a boot oszlop alatti *
jelöli. A fenti példában ez a /dev/sda1
.
Most hozzunk létre egy ideiglenes mappát az /mnt
alatt, és csatlakoztassuk alá a partíciót:
# mkdir /mnt/tmp # mount /dev/sda1 /mnt/tmp
Ezután futtassuk a grub-installt
, a boot eszközre (nem a partícióra) és a mappára mutatva, ahová a bootpartíciót csatlakoztattuk. Ha a rendszernek van dedikált boot partíciója, a parancs a következő:
# grub-install --boot-directory=/mnt/tmp /dev/sda
Ha olyan rendszerre telepítünk, amely nem rendelkezik boot partícióval, hanem csak egy /boot
mappával a gyökér fájlrendszeren, akkor a grub-install
-t kell használnunk. A parancs tehát a következő:
# grub-install --boot-directory=/boot /dev/sda
A GRUB 2 konfigurálása
A GRUB 2 alapértelmezett konfigurációs fájlja a /boot/grub/grub.cfg
. Ez a fájl automatikusan generálódik, a kézi szerkesztése nem ajánlott. A GRUB konfiguráció megváltoztatásához szerkeszteni kell az /etc/default/grub
fájlt, majd az update-grub
segédprogramot kell futtatni a megfelelő fájl létrehozásához.
Note
|
Az |
Az /etc/default/grub
fájlban van néhány olyan opció, amely a GRUB 2 viselkedését szabályozza, mint például az alapértelmezetten indítandó kernel, időkorlát, extra parancssori paraméterek stb. A legfontosabbak a következők:
Az alapértelmezett menüpont a rendszerindításhoz. Ez lehet egy numerikus érték (mint 0
, 1
, stb.), egy menüpont neve (mint debian
) vagy saved
, amit a GRUB_SAVEDEFAULT=
-tal együtt használunk, amiről lentebb lesz szó. Ne feledjük, hogy a menübejegyzések nullával kezdődnek, tehát az első menübejegyzés 0
, a második 1
, stb.
GRUB_SAVEDEFAULT=
-
Ha ez az opció
true
-ra van állítva, és aGRUB_DEFAULT=
saved
-re van állítva, akkor az alapértelmezett boot opció mindig az lesz, amit utoljára választottak ki a boot menüben. GRUB_TIMEOUT=
-
Az alapértelmezett menüpont kiválasztása előtti időkorlát másodpercben. Ha
0
-ra van állítva, a rendszer az alapértelmezett bejegyzést indítja el anélkül, hogy megjelenítené a menüt. Ha-1
-re van állítva, a rendszer várni fog, amíg a felhasználó kiválaszt egy opciót, függetlenül attól, hogy mennyi ideig tart. GRUB_CMDLINE_LINUX=
-
Ez felsorolja azokat a parancssori opciókat, amelyek a Linux kernel bejegyzéseihez adódnak hozzá.
GRUB_CMDLINE_LINUX_DEFAULT=
-
Alapértelmezés szerint minden Linux kernelhez két menübejegyzés készül, egy az alapértelmezett beállításokkal és egy a helyreállításhoz. Ezzel az opcióval extra paramétereket adhatunk hozzá, amelyek csak az alapértelmezett bejegyzéshez kerülnek hozzá.
GRUB_ENABLE_CRYPTODISK=
-
Ha
y
-ra van állítva, akkor az olyan parancsok, mint agrub-mkconfig
,update-grub
ésgrub-install
keresni fogják a titkosított lemezeket, és hozzáadják a bootolás során a hozzáférésükhöz szükséges parancsokat. Ez kikapcsolja az automatikus bootolást (GRUB_TIMEOUT=
bármilyen,-1
-től eltérő értékkel), mivel a lemezek hozzáférése előtt egy jelszóra van szükség a lemezek visszafejtéséhez.
A menübejegyzések menedzselése
Az update-grub
futtatásakor a GRUB 2 megvizsgálja a gépen lévő kerneleket és operációs rendszereket és létrehozza a megfelelő menübejegyzéseket a /boot/grub/grub.cfg
fájlban. Az új bejegyzéseket manuálisan is hozzá lehet adni az /etc/grub.d
könyvtárban található szkriptfájlokhoz.
Ezeknek a fájloknak futtathatónak kell lenniük, és az update-grub
numerikus sorrendben dolgozza fel őket. Ezért a 05_debian_theme
a 10_linux
előtt kerül feldolgozásra, és így tovább. Az egyéni menübejegyzések általában a 40_custom
fájlba kerülnek.
A menübejegyzés alap szintaxisa az alábbiakban látható:
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Az első sor mindig menuentry
-vel kezdődik és {
-val végződik. Az idézőjelek közötti szöveg jelenik meg a GRUB 2 rendszerindító menüjének címkéjeként.
A set root
paraméter meghatározza azt a lemezt és partíciót, ahol az operációs rendszer gyökérfájlrendszere található. Vegyük figyelembe, hogy a GRUB 2 esetében a lemezek számozása nullától kezdődik, így a hd0
az első lemez (sda
Linux alatt), a hd1
a második, és így tovább. A partíciók számozását viszont egytől indítjuk. A fenti példában a gyökérfájlrendszer az első lemezen (hd0
), az első partíción (,1
), vagyis az sda1
-en található.
Az eszköz és a partíció közvetlen megadása helyett a GRUB 2 kereshet egy adott címkével vagy UUID-vel (Universally Unique Identifier) ellátott fájlrendszert is. Ehhez használjuk a search --set=root
paramétert, amelyet a --label
paraméter és a keresendő fájlrendszer címkéje követ, vagy a --fs-uuid
paramétert, amelyet a fájlrendszer UUID-je követ.
A fájlrendszer UUID-jét az alábbi paranccsal találhatjuk meg:
$ ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 10 nov 4 08:40 3e0b34e2-949c-43f2-90b0-25454ac1595d -> ../../sda5 lrwxrwxrwx 1 root root 10 nov 4 08:40 428e35ee-5ad5-4dcb-adca-539aba6c2d84 -> ../../sda6 lrwxrwxrwx 1 root root 10 nov 5 19:10 56C11DCC5D2E1334 -> ../../sdb1 lrwxrwxrwx 1 root root 10 nov 4 08:40 ae71b214-0aec-48e8-80b2-090b6986b625 -> ../../sda1
A fenti példában a /dev/sda1
UUID-je ae71b214-0aec-48e8-80b2-090b6986b625
. Ha a GRUB 2 gyökéreszközeként szeretnénk beállítani, a parancs a következő: search --set=root --fs-uuid ae71b214-0aec-48e8-80b2-090b6986b625
.
A search
parancs használatakor szokás hozzáadni a --no-floppy
paramétert, hogy a GRUB ne pazarolja az időt a floppy lemezeken való keresésre.
A linux
sor azt jelzi, hogy hol található az operációs rendszer kernele (ebben az esetben a vmlinuz
fájl a fájlrendszer gyökerében). Ezt követően parancssori paramétereket adhatunk át a kernelnek.
A fenti példában megadtuk a root partíciót (root=/dev/sda1
) és átadtunk három kernel paramétert: a root partíciót csak olvashatóan kell csatlakoztatni (ro
), a legtöbb naplóüzenetet le kell tiltani (quiet
) és egy splash képernyőt kell megjeleníteni (splash
).
Az initrd
sor jelzi, hogy hol található az initial RAM lemez. A fenti példában a fájl az initrd.img
, amely a fájlrendszer gyökerében található.
Note
|
A legtöbb Linux-disztribúció nem a gyökérfájlrendszer gyökérmappájába helyezi a kernelt és az initrd-t. Ehelyett ezek a |
A menübejegyzés utolsó sora csak a }
karaktert tartalmazhatja.
A GRUB 2 használata
A GRUB 2-vel indított rendszer indításakor egy opciókból álló menü jelenik meg. A kurzorbillentyűkkel válasszunk ki egy opciót, majd Enter a kiválasztott bejegyzés megerősítéséhez és a rendszerindításhoz.
Tip
|
Ha csak egy visszaszámlálót látunk, de nem egy menüt, nyomjuk meg a Shift billentyűt a menü megjelenítéséhez. |
Egy opció szerkesztéséhez jelöljük ki azt a kurzorbillentyűkkel, majd nyomjuk meg a E billentyűt. Ekkor megjelenik egy szerkesztőablak az adott opcióhoz tartozó /boot/grub/grub.cfg'-ben meghatározott `menuentry
tartalmával.
Egy opció szerkesztése után nyomjuk meg a a Ctrl+X vagy a F10 billentyűt a rendszerindításhoz, vagy a Esc billentyűt a menübe való visszatéréshez.
A GRUB 2 shellbe való belépéshez nyomjuk meg a C billentyűt a menüképernyőn (vagy a szerkesztőablakban a Ctrl+C). Egy ilyen command prompt fog megjelenni: grub >
Írjuk be a help
szót az összes elérhető parancs listájának megtekintéséhez, vagy nyomjuk meg a Esc billentyűt a shellből való kilépéshez és a menüképernyőre való visszatéréshez.
Note
|
Ne feledjük, hogy ez a menü nem jelenik meg, ha az |
Bootolás a GRUB 2 Shellből
A GRUB 2 shell segítségével indíthatjuk el a rendszert, ha egy menüpont hibás beállítása miatt nem indulna el.
Az első dolog, amit meg kell tennünk, hogy kiderítjük, hol van a boot partíció. Ezt az ls
paranccsal tehetjük meg, amely megmutatja a GRUB 2 által talált partíciók és lemezek listáját.
grub> ls (proc) (hd0) (hd0,msdos1)
A fenti példában egyszerűek a dolgok. Csak egy lemez van, a (hd0)
, amelyen csak egy partíció van: (hd0,msdos1)
.
A felsorolt lemezek és partíciók természetesen eltérőek lesznek a rendszertől függően. Példánkban a hd0
első partíciójának neve msdos1
, mivel a lemez MBR partícionálási sémával lett particionálva. Ha a lemez GPT partícionálással lett volna particionálva, a neve gpt1
lenne.
A Linux indításához szükségünk van egy kernelre és egy initial RAM lemezre (initrd). Ellenőrizzük a (hd0,msdos1)
tartalmát:
grub> ls (hd0,msdos1)/ lost+found/ swapfile etc/ media/ bin/ boot/ dev/ home/ lib/ lib64/ mnt/ opt/ proc/ root/ run/ sbin/ srv/ sys/ tmp/ usr/ var/ initrd.img initrd.img.old vmlinuz cdrom/
Az -l
paramétert hozzáadhatjuk az ls
-hez, hogy hosszú listát kapjunk, hasonlóan ahhoz, mint a Linux terminál esetén. A Tab használatával automatikusan kitölthetjük a lemez-, partíció- és fájlneveket.
Vegyük észre, hogy van egy kernel (vmlinuz
) és egy initrd (initrd.img
) image fájlunk a gyökérkönyvtárban. Ha nem, akkor a /boot
tartalmát a list (hd0,msdos1)/boot/
segítségével ellenőrizhetjük.
Most nézzük a boot partíciót:
grub> set root=(hd0,msdos1)
Töltse be a Linux kernelt a linux
paranccsal, majd adjuk meg a kernel elérési útvonalát és a root=
opciót, hogy megmondjuk a kernelnek, hol található az operációs rendszer gyökérfájlrendszere.
grub> linux /vmlinuz root=/dev/sda1
Töltsük be az initial RAM-lemezt az initrd
paranccsal, amelyet az initrd.img
fájl teljes elérési útvonala követ:
grub> initrd /initrd.img
Most indítsuk el a rendszert a boot
-tal.
Bootolás a Rescue Shellből
Indítási hiba (boot failure) esetén a GRUB 2 betölthet egy rescue shellt, a korábban említett shell egyszerűsített változatát. Ezt a command promptból ismerhetjük fel, mely a grub rescue>
formában jelenik meg.
A rendszer ebből a shellből történő indítása szinte teljesen megegyezik az előzőekben bemutatottakkal. Azonban be kell töltenünk néhány GRUB 2 modult, hogy működjön.
Miután kiderítettük, hogy melyik partíció a boot partíció (az ls
paranccsal, ahogyan azt korábban bemutattuk), használjuk a set prefix=
parancsot, majd a GRUB 2 fájlokat tartalmazó mappa teljes elérési útvonalát. Általában /boot/grub
. A mi példánkban:
grub rescue> set prefix=(hd0,msdos1)/boot/grub
Most töltsük be a normal
és linux
modulokat az insmod
paranccsal:
grub rescue> insmod normal grub rescue> insmod linux
Ezután állítsuk be a boot partíciót a set root=
paranccsal, ahogyan azt korábban már megtettük, töltsük be a linux kernelt (linux
), az initial RAM lemezt (initrd
) és próbáljunk meg bootolni a boot
programmal.
GRUB Legacy
A GRUB Legacy telepítése egy működő rendszerből
A GRUB Legacy lemezre történő telepítéséhez egy futó rendszerből a grub-install
segédprogramot fogjuk használni. Az alapparancs a grub-install DEVICE
, ahol a DEVICE
az a lemez, ahová a GRUB Legacy-t telepíteni szeretnénk. Egy példa erre a /dev/sda
.
# grub-install /dev/sda
Vegyük figyelembe, hogy meg kell adnunk azt az eszközt, ahová a GRUB Legacy telepítve lesz, például /dev/sda/
, nem pedig a partíciót, mint a /dev/sda1
.
Alapértelmezés szerint a GRUB a szükséges fájlokat a megadott eszközön lévő /boot
mappába másolja. Ha más mappába szeretnénk másolni őket, használja a --boot-directory=
paramétert, amelyet a teljes elérési útvonal követ, ahová a fájlokat másolni kell.
A GRUB Legacy telepítése a GRUB Shellből
Ha valamilyen okból nem tudjuk elindítani a rendszert, és újra kell telepítenünk a GRUB Legacy-t, akkor ezt a GRUB Legacy bootlemezen lévő GRUB shellből tehetjük meg.
A GRUB shellből (nyomjuk meg a c
-t a boot menüben, hogy elérjük a grub>
promptot), az első lépés a boot eszköz beállítása, amely a /boot
mappát tartalmazza. Például, ha ez a mappa az első lemez első partícióján található, a parancs a következő:
grub> root (hd0,0)
Ha nem tudjuk, hogy melyik eszközön található a /boot
mappa, akkor a GRUB megkeresi nekünk a find
parancs segítségével, az alábbi módon:
grub> find /boot/grub/stage1 (hd0,0)
Ezután állítsuk be a boot partíciót a fentiek szerint, majd a setup
paranccsal telepítsük a GRUB Legacy-t az MBR-re, és másoljuk a szükséges fájlokat a lemezre:
grub> setup (hd0)
Ha kész, indítsuk újra a rendszert, aminek már normális módon kell bootolnia.
A GRUB Legacy menübejegyzéseinek és beállításainak konfigurálása
A GRUB Legacy menü bejegyzéseit és beállításait a /boot/grub/menu.lst
fájl tárolja. Ez egy egyszerű szöveges fájl a parancsok és paraméterek listájával, amely közvetlenül szerkeszthető a választott szövegszerkesztővel.
A #
-val kezdődő sorok megjegyzésnek számítanak, az üres sorokat pedig figyelmen kívül hagyásra kerülnek.
Egy menübejegyzés legalább három parancsot tartalmaz. Az első, a title
, az operációs rendszer címét állítja be a menü képernyőjén. A második, a root
, megmondja a GRUB Legacy-nak, hogy melyik eszközről vagy partícióról indítson.
A harmadik bejegyzés, a kernel
, megadja a kernel image teljes elérési útvonalát, amelyet be kell tölteni, amikor a megfelelő bejegyzés kiválasztásra kerül. Vegyük figyelembe, hogy ez az útvonal a root
paraméterben megadott eszközhöz képest relatív.
Egy egyszerű példa:
# Ez a sor egy komment title Linux disztribúcióm root (hd0,0) kernel /vmlinuz root=/dev/hda1
A GRUB 2-vel ellentétben a GRUB Legacyben mind a lemezek, mind a partíciók számozása nullától kezdődik. Tehát a root (hd0,0)
parancs a boot partíciót az első lemez (hd0
) első partíciójának (0
) fogja beállítani.
A root
utasítás elhagyható, ha a kernel
parancsban az elérési út előtt adjuk meg a rendszerindító eszközt. A szintaxis ugyanaz, tehát:
kernel (hd0,0)/vmlinuz root=dev/hda1
megfelel ennek:
root (hd0,0) kernel /vmlinuz root=/dev/hda1
Mindkettő az első lemez első partíciójának (hd0,0
) gyökérmappájából (/
) tölti be a vmlinuz
fájlt.
A root=/dev/hda1
paraméter a kernel
parancs után megmondja a Linux kernelnek, hogy melyik partíciót használja gyökér fájlrendszerként. Ez egy Linux kernel paraméter, nem pedig egy GRUB Legacy parancs.
Note
|
A kernelparaméterekről bővebben a https://www.kernel.org/doc/html/v4.14/admin-guide/kernel-parameters.html oldalon olvashatunk. |
Előfordulhat, hogy meg kell adnunk az operációs rendszer kezdeti RAM lemezképének helyét az initrd
paraméterrel. A fájl teljes elérési útját meg lehet adni, mint a kernel
paraméterben, és az elérési út előtt megadhatunk egy eszközt vagy partíciót is, pl.:
# Ez a sor egy komment title Linux disztribúcióm root (hd0,0) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
A GRUB Legacy moduláris felépítésű, ahol a modulok (általában a /boot/grub/i386-pc
-ban tárolt .mod
fájlok) betölthetők, hogy extra funkciókat adjanak hozzá, mint például a szokatlan hardverek, fájlrendszerek vagy új tömörítési algoritmusok támogatása.
A modulok betöltése a module
paranccsal történik, amelyet a megfelelő .mod
fájl teljes elérési útvonala követ. Ne feledjük, hogy a kernelekhez és az initrd imagekhez hasonlóan ez az elérési út a root
parancsban megadott eszközhöz képest relatív.
Az alábbi példa betölti a 915resolution
modult, amely a framebuffer felbontásának helyes beállításához szükséges az Intel 800-as vagy 900-as sorozatú videó chipsetekkel rendelkező rendszereken.
module /boot/grub/i386-pc/915resolution.mod
Más operációs rendszerek láncbetöltése
A GRUB Legacy használható a nem támogatott operációs rendszerek, például a Windows betöltésére a chainloading (láncbetöltés) nevű folyamat segítségével. Először a GRUB Legacy töltődik be, majd a megfelelő opció kiválasztásakor a kívánt rendszer bootloadere töltődik be.
Egy tipikus bejegyzés a Windows láncbetöltéséhez az alábbi módon néz ki:
# Windows betöltése title Windows XP root (hd0,1) makeactive chainload +1 boot
Menjünk végig az egyes paramétereken. Mint korábban, a root (hd0,1)
megadja azt az eszközt és partíciót, ahol a betölteni kívánt operációs rendszer bootloadere található. Ebben a példában az első lemez második partícióját.
makeactive
-
egy olyan flaget állít be, amely jelzi, hogy ez egy aktív partíció. Ez csak a DOS elsődleges partícióinál működik.
chainload +1
-
a GRUB-nak azt mondja, hogy töltse be a bootpartíció első szektorát. Általában itt találhatóak a bootloaderek.
boot
-
lefuttatja a bootloadert és betölti a megfelelő operációs rendszert.
Gyakorló feladatok
-
Mi a GRUB 2 konfigurációs fájljának alapértelmezett útvonala?
-
Milyen lépések szükségesek a GRUB 2 beállításainak módosításához?
-
Melyik fájlhoz kell hozzáadni az egyéni GRUB 2 menübejegyzéseket?
-
Hol tárolódnak a GRUB Legacy menübejegyzései?
-
Hogyan léphetünk be a GRUB 2 vagy GRUB Legacy menüből a GRUB Shell-be?
Gondolkodtató feladatok
-
Képzeljük el, hogy a felhasználó úgy konfigurálja a GRUB Legacy-t, hogy az első lemez második partíciójáról bootoljon. A következő egyéni menübejegyzést látjuk:
title Az Linux Disztróm root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Azonban a rendszer nem fog bootolni. Mi a hiba?
-
Képzeljük el, hogy van egy
/dev/sda
néven azonosított lemezünk több partícióval. Melyik paranccsal lehet kideríteni, hogy melyik a boot partíció a rendszeren? -
Melyik parancs használható egy partíció UUID-jének kiderítésére?
-
Képzeljük el az alábbi GRUB 2 bejegyzést
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Módosítsuk úgy, hogy a rendszer a
5dda0af3-c995-481a-a6f3-46dcd3b6998d
UUID-vel rendelkező lemezről bootoljon -
Hogyan lehet beállítani, hogy a GRUB 2 10 másodpercet várjon az alapértelmezett menüpont indítása előtt?
-
Milyen parancsokkal lehet a GRUB Legacy shellből telepíteni a GRUB-ot a második lemez első partíciójára?
Összefoglalás
Ebben a leckében megtanultuk
-
Mi az a bootloader.
-
A GRUB Legacy és a GRUB 2 közötti különbségek.
-
Mi az a boot partíció, és mi a tartalma.
-
Hogyan telepíthető a GRUB Legacy és a GRUB 2.
-
Hogyan kell konfigurálni a GRUB Legacy-t és a GRUB 2-t.
-
Hogyan adhatunk hozzá egyéni menübejegyzéseket a GRUB Legacy és a GRUB 2 rendszerhez.
-
Hogyan léphetünk kapcsolatba a GRUB Legacy és a GRUB 2 menüképernyőjével és konzoljával.
-
Hogyan indíthatunk rendszert a GRUB Legacy vagy GRUB 2 shellből vagy rescue shellből.
A következő parancsokról volt szó ebben a leckében:
-
grub-install
-
update-grub
-
grub-mkconfig
Válaszok a gyakorló feladatokra
-
Mi a GRUB 2 konfigurációs fájljának alapértelmezett útvonala?
/boot/grub/grub.cfg
-
Milyen lépések szükségesek a GRUB 2 beállításainak módosításához?
Változtassuk meg az
/etc/default/grub
fájlt, majd frissítsük a konfigurációt azupdate-grub
paranccsal. -
Melyik fájlhoz kell hozzáadni az egyéni GRUB 2 menübejegyzéseket?
/etc/grub.d/40_custom
-
Hol tárolódnak a GRUB Legacy menübejegyzései?
/boot/grub/menu.lst
-
Hogyan léphetünk be a GRUB 2 vagy GRUB Legacy menüből a GRUB Shell-be?
A
c
lenyomásával a menü képernyőn.
Válaszok a gondolkodtató feladatokra
-
Képzeljük el, hogy a felhasználó úgy konfigurálja a GRUB Legacy-t, hogy az első lemez második partíciójáról bootoljon. A következő egyéni menübejegyzést látjuk:
title A Linux Disztróm root (hd0,2) kernel /vmlinuz root=/dev/hda1 initrd /initrd.img
Azonban a rendszer nem fog bootolni. Mi a hiba?
A boot partíció a hibás. Ne feledjük, hogy a GRUB 2-vel ellentétben a GRUB Legacy a nullától számolja a partíciókat. Tehát az első lemez második partíciójára a helyes parancs a
root (hd0,1)
. -
Képzeljük el, hogy van egy
/dev/sda
néven azonosított lemezünk több partícióval. Melyik paranccsal lehet kideríteni, hogy melyik a boot partíció a rendszeren?Használjuk az
fdisk -l /dev/sda
parancsot. A boot partíciót csillaggal (*
) fogja jelölni a listában. -
Melyik parancs használható egy partíció UUID-jének kiderítésére?
Használjuk a
ls -la /dev/disk/by-uuid/
parancsot és keressük meg azt az UUID-t, ami a partícióra mutat. -
Képzeljük el az alábbi GRUB 2 bejegyzést
menuentry "Default OS" { set root=(hd0,1) linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
Módosítsuk úgy, hogy a rendszer a
5dda0af3-c995-481a-a6f3-46dcd3b6998d
UUID-vel rendelkező lemezről bootoljon!Meg kell változtatni a
set root
utasítást. A lemez és a partíció megadása helyett adjuk meg a GRUB-nak, hogy keresse meg a kívánt UUID-vel rendelkező partíciót.menuentry "Default OS" { search --set=root --fs-uuid 5dda0af3-c995-481a-a6f3-46dcd3b6998d linux /vmlinuz root=/dev/sda1 ro quiet splash initrd /initrd.img }
-
Hogyan lehet beállítani, hogy a GRUB 2 10 másodpercet várjon az alapértelmezett menüpont indítása előtt?
Adjuk hozzá a
GRUB_TIMEOUT=10
paramétert az/etc/default/grub
-hoz. -
Milyen parancsokkal lehet a GRUB Legacy shellből telepíteni a GRUB-ot a második lemez első partíciójára?
grub> root (hd1,0) grub> setup (hd1)