Lilo en Grub: Bootmanagers en Linux loaders

>> Index <<



The Linux BootPrompt HOWTO van Paul Gortmaker (v1.3, Sept 4, 2001) geeft de bootopties aan van Linux. Wat opvalt is dat HOWTO al een paar jaar niet bijgewerkt is. Raadpleeg voor de kernel opties van nieuwe ontwikkelingen als ACPI en dual core processoors andere bronnen.

Lilo als Linux loader

Lilo (van linux loader) zorgt ervoor dat de kernel in het geheugen geladen wordt. Het is een piepklein programma dat met het installatieprogramma /sbin/lilo in de bootsector van de bootpartitie (de partitie met de root of beter deboot directory), op een bootdiskette of in de master boot record (MBR) van de harde schijf wordt geïnstalleerd. Dit gebeurt aan de hand van de informatie uit het configuratiebestand /etc/lilo.conf.

Het instellen van /etc/lilo.conf wordt meestal door het Linux installatie programma gedaan. Bijna altijd gaan die programma's er van uit dat Lilo in de MBR wordt geïnstalleerd.

De locatie van lilo in de MBR is geen probleem als u allèèn linux gebruikt, maar bedenk wel dat iedere Windows installatie de extra lilo informatie in de MBR wist. De partitie locaties laat Windows nog intact, maar alle meta-informatie gaat verloren. En dit zonder dat Microsoft er iets wezenlijks aan toevoegt, voor Windows of voor anderen.

Iedere multibooter moet daarom over een extra Linux kernel loader beschikken op een bootflop, een bootable USB schijf of bijv. een normaal alleen voor data gebruikte door het BIOS bootbare (binnen de 1024e cylinder) datapartitie. En - dat is het vervelende van lilo- die u moet u na ieder kernel update opnieuw aanmaken. Want een update plaats de kernel op een andere plaats.

Lilo kan alleen de kernel laden als het de exacte fysieke locatie van de kernel op de harde schijf beschikbaar is, dus in termen van CHS adressering: cylinder, header, sector. Want pas na het laden van de kernel worden de stuurbestanden van het bestandssysteem actief. Die maken immers deel uit van de kernel.

Lilo moet u onder Linux configureren en installeren. Het installatieprogramma /sbin/lilo vertaalt het door u opgeven pad naar de kernel in het exacte CHS adres. De exacte bootinformatie wordt in de root van de bootpartitie, op een bootdiskette of in de MBR geschreven.

Een nieuwe kernel kan daarom alleen geladen worden nadat u het lilo installatieprogramma /sbin/lilo met de juiste instellingen in /etc/lilo/conf gedraaid hebt. Hebt u dit een keer verzuimd (en de boot komt niet verder dan een "li"), dan rest u niets dan een Linux bootdiskette (of loadlin) te draaien en alsnog de opdracht lilo te geven.

Als de fysieke locatie van de kernel verplaatst is door een programma als PartionMagic, geldt dezelfde procedure.

# LILO configuratiebestand /etc/lilo.conf

Alle opmerkingen in een configuratiebestand beginnen met een # (hekje)

# Start LILO global Section


boot=/dev/hda11

De locatie van de bootpartitie (bij mij /boot). Deze moet binnen de 1024e cylinder liggen op hd (of sd) 1 of 2.

# compact

Een met een hekje "geremde" bootoptie

# faster, but won't work on all systems.


vga=normal

vga scherm (tekstmodus)

read-only

De kernel wordt read-only geboot

prompt

Er verschijnt een met de Shift-Alt toets te activeren lilo boot prompt1.

timeout=2

De tijd (in seconden) die verstrijkt voordat het systeem doorstart.

# End LILO global Section


image = /boot/bzImage

Naam en locatie van de kernel

root = /dev/hda13

De locatie van de rootpartitie (/)

label = Linux

De naam Linux verschijnt in beeld

Lilo als bootmanager

Lilo kan daarnaast als bootmanager dienst doen. Dan kunt u met Lilo ook andere besturingssystemen dan Linux starten. Ook dat is in /etc/lilo.conf in te stellen.

Maar Lilo werkt alleen als bootmanager als hij in de Master Boot Record (MBR) van de eerste harde schijf geinstalleerd is. Of- en dat is in het begin wel zo veilig - op een bootdiskette staat. Als Lilo in een bootsector van de rootpartitie van een niet actieve partitie wordt geinstalleerd, hebt u een primaire bootmanager nodig om Linux te activeren. Dat kan bijv. de IBM bootmanager zijn, maar ook een tweede lilo (in de MBR of op diskette) als u meerdere Linux installaties gebruikt.

Met Shift-Alt of Shift-Ctrl tijdens het verschijnen van het woordje lilo activeert u de lilo bootprompt.

Deze /etc/lilo.conf werd gegenereerd door Mandrake:

boot=/dev/hdb7

Linux boot van het derde logische station op de tweede harde IDE schijf.

map=/boot/map


install=/boot/boot.b


prompt


timeout=50


image=/boot/vmlinuz-2.2.13-7mdk

De lokatie van de kernel-image

label=linux

Linux

root=/dev/hdb7

boot van /dev/hdb7

read-only


other=/dev/hda3

Het andere OS boot van /dev/hda3

label=dos

als DOS

table=/dev/hda

en gebruikt de partitietabel van de eerste harde schijf.

Lilo installeren

Draai na een grondige controle van /etc/lilo.conf als root het installatieprogramma /sbin/lilo:

sjoerd@visser:~ > su

Password:

root@visser:/home/sjoerd > lilo

Added Linux *

root@visser:/home/sjoerd >

Na een reboot zal de nieuwe kernel geladen moeten worden.

Foutmeldingen van lilo

Er kan echter veel misgaan:

LI

Lilo kan de bootpartitie niet vinden. De in boot= opgegeven bootpartitie klopt niet.

Remedie: configureer Lilo opnieuw. Met een bootflop of loadlin laadt u Linux en past u /etc/lilo.conf aan. Daarna draait u lilo opnieuw. Pas daarna rebooten (op de meeste distro's is voor "reboot -n" een CAD genoeg.

Loading Linux


Blijft het systeem hangen, dan moet u via reddingsdiskettes de oude kernel weer reactiveren. Een prettige optie is loadlin vanuit DOS te gebruiken. In alle gevallen past u lilo.conf aan zodat de oude kernel bij de boot gebruikt wordt en draait u opnieuw lilo.

De Grub bootmanager

Het grote voordeel van de Grub bootmanager is dat deze niet - zoal bij lilo - na ieder kernelupdate hoeft te worden vernieuwd. Net als lilo kan grub zowel in de master boot record, de rootpartitie of in een aparte bootpartitie worden geinstalleerd. De grub hulp en configuratiebestanden bevinden zich weliswaar typisch in /boot/grub, maar in eerste instantie - dus wanneer de kernel nog niet geladen is, moet het BIOS de kernel vinden. En daarvoor leest het BIOS de informatie die het grub installatieprogramma in een boot record geplaatst heeft af.

Onder SuSE wordt grub met Yast2 ingesteld, maar ik heb gemerkt dat dat niet altijd goed gaat. Vooral niet als er twee Linux versies op dezelfde computer aanwezig zijn en u via "Bladeren" uw kernel instelt.

Wat eerder grub.conf was is hier /boot/grub/menu.lst. Commentaarregels worden voorafgegaan door een #.

# Modified by YaST2. Last modification on zo dec 17 19:02:41 CET 2006

color white/blue black/light-gray
default 0
timeout 8
gfxmenu (hd0,4)/boot/message

###Don't change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10.0
    root (hd0,4)
    kernel /boot/vmlinuz root=/dev/hda5 selinux=0    x11i=vesa resume=/dev/hda8  splash=silent showopts
    initrd /boot/initrd

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Veilige modus -- SUSE LINUX 10.0
    root (hd0,4)
    kernel /boot/vmlinuz root=/dev/hda5 showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off  3
    initrd /boot/initrd

###Don't change this comment - YaST2 identifier: Original name: OS/2 Boot Manager (/dev/hdd1)###

title OS/2 Boot Manager
    chainloader (hd0,0)+1

###Don't change this comment - YaST2 identifier: Original name: floppy###
title Diskette
    chainloader (fd0)+1

###Don't change this comment - YaST2 identifier: Original name: linux###
title SUSE LINUX 10 (reserve)
    root (hd1,0)
    kernel /vmlinuz root=/dev/hdd5 selinux=0    x11i=vesa resume=/dev/hdd8  splash=silent showopts
    initrd /initrd

###Don't change this comment - YaST2 identifier: Original name: failsafe###
title Veilige modus -- Reserve
    root (hd1,0)
    kernel /vmlinuz root=/dev/hdd5 showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off  3
    initrd /initrd

Er staan twee Linux installaties. Een op de eerste vaste schijf (hda) met zowel /boot als / op hda5. De tweede Linux installatie staat op hdd (2 IDE schijf de 2e controller), met hdd1 (1e prim partitie) gemount als als /boot en de rootpartitie op hdd4.

De configuratie begint met algemene instellingen: Er worden kleuren ingesteld, de eerst verschijnende ingang ("title") wordt met "default 0" als standaard ingesteld, die na een time-out van 15 seconden zal opstarten. Als achtergrond wordt het bestand /boot/message gepresenteerd van de root en tevens boot partitie. Het message bestand bevat de grafische achtergrond van het bootmenu.

# Algemene instellingen. 

color white/blue black/light-gray
default 0
timeout 15
gfxmenu (hd0,4)/boot/message

Geen van deze instellingen is essentieel.

Belangrijker zijn de instellingen waarmee de kernel geladen wordt.

title SUSE LINUX 10.0
    root (hd0,4)
    kernel /boot/vmlinuz root=/dev/hda5 selinux=0 x11i=vesa resume=/dev/hda8 splash=silent showopts
    initrd /boot/initrd

In de eerste regel volgt op title de naam van de configuratie (SUSE LINUX 10.0). Een naam (title) opgeven is essentieel. Yast noemt dit de Sectienaam.

De tweede regel geeft de lokatie aan van de door de kernel te mounten rootpartitie: root (hd0,4). Suse noemt dit het rootapparaat. De map / bevindt zich hier op de vijfde partitie (grub begint te tellen vanaf 0) van de eerste schijf oftewel hda5. Dit is tevens het eerste logische station. De primaire stations heten resp. hda1, hda2 en hda3 en de uitgebreide partitie als geheel heet hda4). Hier telt men dus weer vanaf 1 (verwarrend dus).

Op deze rootpartitie zit tevens de te laden kernel . U moet hier het volledige pad opgeven: /boot/vmlinuz. Daarna wordt met root=/dev/hda1 aangegeven dat de kernel /dev/hda5 als rootpartitie mounten moet. Dit is dus het bestandssysteem waar u op wilt werken. Dit hoeft niet hetzelfde bestandssysteem te zijn als het bestandssysteem waar de kernel (kernel =) op gevonden werd. Als u de linux kernel van een floppy boot, zult u waarschijnlijk wel op een vaste schijf willen werken.

De volgende ingangen zijn optionele bootparameters: selinux=0 x11i=vesa resume=/dev/hda8 splash=silent showopts.

In de overigens identieke Veilige modus zijn ze veranderd in: showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off 3

title Veilige modus -- SUSE LINUX 10.0
    root (hd0,4)
    kernel /boot/vmlinuz root=/dev/hda5 showopts ide=nodma apm=off acpi=off noresume selinux=0 nosmp noapic maxcpus=0 edd=off  3
    initrd /boot/initrd

De laatste regel initrd /boot/initrd verwijst naar een symlink die weer verwijst naar een ramdisk.

De volgende ingang laadt de gecomprimeerde SuSE 10 kernel (/vmlinuz) van een aparte bootpartitie (daarom geen /boot/vmlinuz) in de eerste primaire partitie van de tweede vaste schijf (hd1,0). De rootpartitie is de eerste logische partitie (root=/dev/hdd5) van die schijf.

title SUSE LINUX 10 (reserve)
    root (hd1,0)
    kernel /vmlinuz root=/dev/hdd5
    initrd /initrd

De volgende ingang laadt de OS/2 bootmanager partitie.

title OS/2 Boot Manager
    chainloader (hd0,0)+1

De titel spreekt voor zich. De opdracht chainloader (hd0,0)+1 geeft de opdracht de bootprocedure door aan de eerste partitie van de eerste schijf. Meestal is dat de Windows bootpartitie:

title Windows
    chainloader (hd0,0)+1

Op dezelfde wijze laat deze ingang van diskette booten:

title Diskette booten
    chainloader (fd0)+1 
>> Index <<

1De lilo bootprompt met het boot keuzemenu verschijnt als u de TAB toets indrukt op het moment dat het woordje "lilo" linksboven in beeld verschijnt. Lilo is alleen als bootmanager te gebruiken als lilo in de MBR geinstalleerd is. Een lilo in de root van de bootpartitie laat geen keuzemenu zien, maar start gewoon door naar de root partitie.