Een bootmanager maakt het mogelijk om te kiezen tussen verschillende besturingssystemen waarmee een computer start. Wanneer Linux geinstalleerd wordt als tweede besturingssysteem, is gebruik van een bootmanager noodzakelijk. In deze hoofdstuk wordt gekeken naar GRUB, hoe we GRUB kunnen installeren en gebruiken om een besturingssysteem naar keuze te laden.
Een bootmanager is een programma dat uitgevoerd wordt tijdens het starten van de computer, het bootproces. Om te computer met Linux te starten moet een kernel worden geladen. Een goede bootmanager geeft de gebruiker een menu waaruit hij een kernel kan kiezen om te computer te starten. De bootmanager weet waar deze kernel kan worden gelezen. Ook kan Linux naast Windows geinstalleerd zijn en de bootmanager geeft de gebruiker ook de mogelijkheid om te kiezen tussen deze of nog andere besturingssystemen om de computer te starten.
Gedurende het bootproces gebeuren er heel veel dingen. Als allereerste ding dat een computer doet nadat de stroom is aangezet, is een speciaal stukje software laden en uitvoer dat in een ROM zit. Deze software wordt BIOS genoemd en voert een aantal taken uit:
Bij stap 3 zoekt de BIOS-software een aantal schijven af of daar misschien een bootsector aanwezig is. Welke schijven afgezocht worden wordt bepaald door de instelling in het BIOS-menu. Het kan zo ingesteld zijn dat de computer eerst kijkt naar een diskette, en als die aanwezig is, daarvan probeert de bootsector te laden. Als de diskette niet aanwezig is, dan zoekt de computer naar een CD-ROM en kijkt of daar een bootsector aanwezig is, die hij probeert te laden, Pas als dat niet het geval is, dan zoekt de computer naar de eerste harde schijf en probeert de bootsector te lezen.
In de bootsector van een harde schijf , diskette of CD-ROM bevindt zich meestal software die ervoor zorgt dat Windows wordt gestart. In de bootsector kan zich ook een bootmanager bevinden, die eerst kijkt in zijn instellingen en vervolgens een menu aan de gebruiker presenteert waaruit een aantal besturingssystemen kan worden gekozen. Vaak wordt de bootmanager zo ingesteld dat er na enkele seconden dat er geen keuze wordt gemaakt, automatisch een vooraf bepaald besturingssysteem wordt gestart.
Traditioneel is elke Linux distributie voorzien van het bootmanagerprogramma LILO. LILO staat voor Linux Loader en bestaat al bijna net zolang als dat Linux bestaat. Lilo was en is erg nuttig om verschillende kernels te kunnen kiezen om Linux te starten. Dit kan bijvoorbeeld handig zijn als er wijzigingen zijn aangebracht in de kernel en deze nieuwe kernel wordt uitgeprobeerd, terwijl de oorspronkelijke kernel beschikbaar blijft voor als er iets mis gaat met de nieuwe kernel. De gebruiker heeft met Lilo een keuze uit diverse kernels en er kunnen ook parameters aan een kernel worden gegeven , die het gedrag van een kernel kunnen beinvloeden.
De manier waarop LiLo werkt is dat het in zich (in de bootsector) een lijstje heeft van een aantal besturingsystemen. Lilo kan deze besturingsystemen laden, doordat het ook weet op welke track, sector en cylindernummer deze kernels beginnen. Steeds als er een wijziging gedaan wordt of als een kernel verplaatst wordt, dan kan Lilo het niet meer vinden. Daarom moet na elke wijziging met het commando lilo de bootsector wordt bijgewerkt en de wijzigingen aktief worden gemaakt.
Dat werkt niet zo handig, omdat dat alleen kan als Linux volledig gestart is. Dit is een reden waarom er sindsdien een alternatieve bootmanager is die steeds vaker gebruikt wordt: GRUB.
GRUB staat voor GRand Unified Bootloader. GRUB is net als Lilo een bootloader die verschillende besturingsystemen kan starten. Het verschil is dat GRUB niet alleen een menu-interface kent maar ook een commandoregel-interface. Het is ook veel flexibeler is dan LiLo omdat het verschillende filesystemen begrijpt en dus overweg kan met bestandsnamen.
In de meeste gevallen wordt de kernel opgeslagen in /boot , en heet vmlinuz. De configuratie voor GRUB bevindt zich in een onderliggende map in /boot/grub en heet menu.lst. Dat is natuurlijk alleen zo als GRUB daadwerkelijk is geinstalleerd.
De configuratie van GRUB wordt helemaal bepaald door de inhoud van het bestand /boot/grub/menu.lst .
timeout 10
color black/cyan yellow/cyan
i18n (hd0,4)/boot/grub/messages
keytable (hd0,4)/boot/us.klt
altconfigfile (hd0,4)/boot/grub/menu.once
default 3
title linux
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5 devfs=mount acpi=ht resume=/dev/hda6 splash=silent vga=788
initrd (hd0,4)/boot/initrd.img
title linux-nonfb
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5 devfs=mount acpi=ht resume=/dev/hda6
initrd (hd0,4)/boot/initrd.img
title failsafe
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5 failsafe devfs=nomount acpi=ht resume=/dev/hda6
initrd (hd0,4)/boot/initrd.img
title windows
root (hd0,0)
chainloader +1
title floppy
root (fd0)
chainloader +1
Voor installatie op een diskette gebruiken we een lege diskette. Het maakt niet uit hoe deze is geformateerd. Het volgende stukje tekst laat zien hoe GRUB kan worden geinstalleerd op een diskette.
[root@localhost loader]# cd /boot/grub
[root@localhost grub]# ls
device.map ffs_stage1_5 menu.lst minix_stage1_5 stage2
e2fs_stage1_5 install.sh menu.once reiserfs_stage1_5 vstafs_stage1_5
fat_stage1_5 jfs_stage1_5 messages stage1 xfs_stage1_5
[root@localhost grub]# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records uit
[root@localhost grub]# dd if=stage2 of=/dev/fd0 bs=512 seek=1
255+1 records in
255+1 records uit
[root@localhost grub]#
Om GRUB te gebruiken, kunnen we in linux het commando grubGRUB shell
te
starten. Dit doe je uiteraard als root. De GRUB shell ziet er zo uit:
GRUB version 0.93 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
De commando die hierna kunnen worden ingetikt zijn uitsluitende GRUB commandos. Met quit wordt de GRUB shell verlaten, en keer je weer terug naar de gewone bash shell.
Met de GRUB shell kunnen GRUB installeren in de bootsector van de harde schijf of van een floppydisk.
Om GRUB op een diskette te installeren kunnen we een bootsector op de diskette aanbrengen en een bestand dat GRUB zelf bevat. Deze twee zaken zijn te vinden in de map /boot/grub en heten respectievelijk stage1 en stage2 . . Log in als root of gebruik su, en geef vervolgens de volgende commandos om deze twee bestanden op een diskette over te brengen:
# cd /boot/grub
# dd if=stage1 of=/dev/fd0 bs=512 count=1
1+0 records in
1+0 records uit
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
255+1 records in
255+1 records uit
Hiermee wordt een diskette gemaakt, waarmee de computer kan starten en in GRUB terecht komt. Hiermee kunnen we vervolgens een besturingssysteem laden van de harde schijf.
Het starten van een besturingssysteem naar keuze gebeurt nu met enkele (redelijk simpele) commandos. Op de cursuscomputer hebben we de beschikking over Windows en Linux. Windows bevindt zich op de eerste primaire partitie. Windows starten we als volgt (vanaf de GRUB shell):
root (hd0,0)
chainloader 1+
boot
Linux bevindt zicht in de eerste logische partitie (althans de bootsector). In linux worden de logische partities geteld van 4. Linux kan worden gestart met :
root (hd0,4)
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5
boot
We kunnen nu de menudefinitie die op de Linux-partitie staat gebruiken om een menu weer te geven. Dit gaat als volgt:
root (hd0,4)
configfile (hd0,4)/boot/grub/menu.lst
Na het voorgaande commando komt het menu tevoorschijn zoals dat gedefinieerd is in het menu.lst bestand, indien dit aanwezig is.
Om GRUB te installeren vanaf de floppy op de harde schijf , start de diskette met de GRUB diskette en geef de volgende commando vanaf de GRUB shell.
root (hd0,4)
setup (hd0,0)
Hierna is GRUB geinstalleerd op de harde schijf in de Master Boot Record (MBR) en kun je de GRUB commando prompt krijgen als je de diskette eruit haalt en de computer start zonder diskette. Het commando root (hd0,4) verwijst GRUB naar de bestanden stage1 en stage2 waarmee tevoren een diskette is aangemaakt. GRUB moet deze bestanden kunnen vinden om de GRUB bootmanager te installeren. Met het commando setup (hd0,0) wordt de GRUB bootmanager daadwerkelijk geinstalleerd in de bootsector van de harde schijf.
GRUB zal nu ok de menudefinities gebruiken die in /boot/grub/menu.lst staan. Wanneer dit bestand niet aanwezig is, maak dit bestand aan als root en zet hierin een menudefinitie zoals in het voorbeeld hierboven is gegeven. Je kunt de kleur van het menu veranderen of de timeout-tijd , de defaultkeuze en nog meer. Elke wijziging in het menu.lst bestand worden meteen aktief bij de volgende keer dat de computer start.
Na deze stap is de computer volledig te starten met GRUB met een menu en zonder diskette.