Leo Cardinaals's Weblog

november 7, 2009

Ubuntu: Configureren van GRUB 2

Ingedeeld onder: Ubuntu — Leo @ 9:18 pm
Tags: ,


GRUB 2 is de vervanger van GRUB en is een bootloader, inclusief een programma om GRUB te configureren. Voor Ubuntu is GRUB 2 geïntroduceerd in versie 9.10. Op dit moment is het nog volop in ontwikkeling. De laatste versie 1.97 is stabiel. De grootste verschillen met GRUB 1 is dat menu.lst vervangen is door grub.cfg en dat de partitienummering anders is.

De configuratie van GRUB 2 staat in de volgende bestandshierarchie:

Bestand/Folder Betekenis
/boot/grub In deze folder leest de bootloader het configuratiebestand /boot/grub/grub.cfg. Het bestand grub.cfg bevat het menu en wordt met behulp van de bestanden in /etc/grub.d en /etc/default/grub gemaakt. In deze folder staan naast het grub.cfg bestand meerdere *.mod bestanden. Deze worden door de bootloader geladen wanneer het noodzakelijk is.
/etc/default/grub Dit bestand bevat de algemene variabelen en kan door de administrator (root) gewijzigd worden. Als je hier wijzigingen maakt, dan moet je /boot/grub/grub.cfg bijwerken met het commando update-grub.
/etc/grub.d Iin deze folder staan een aantal shell scripts die in volgorde van nummering als templates fungeren voor update-grub om het bestand /boot/grub/grub.cfg te genereren.

Het bestand /boot/grub/grub.cfg

Het is niet de bedoeling dat het read-only configuratiebestand /boot/grub/grub.cfg handmatig gewijzigd wordt.  Het kan worden bijgewerkt met behulp van het commando sudo update-grub, wat een verkort commando is voor sudo /usr/sbin/grub-mkconfig -o /boot/grub/grub.cfg. Het bestand grub.cfg wordt ook automatisch bijgewerkt bij een kernel update.

Het bestand /etc/default/grub

De eerste 4 variabelen in /etc/default/grub zijn belangrijk voor de correcte werking van GRUB 2.

Variabele Betekenis
GRUB_DEFAULT Deze variabele wordt gezet voor het automatisch starten van bepaald besturingssysteem of linuxkernel.
Deze variabele kan 3 waarden hebben:

  • GRUB_DEFAULT=0: Standaard staat deze op 0. Dit is het eerste menu item.  Welke besturingssystemen en/of linuxkernels je hebt, kan je zien in /boot/grub/grub.cfg. Tel het aantal menuentry’s tot en met de menuentry die je automatisch wilt starten. Gebruik dit getal minus één voor deze variabele.
  • GRUB_DEFAULT=saved: Dit betekent dat het laatst gekozen menuentry de standaard wordt.
  • GRUB_DEFAULT=”naam”: Deze variabele kan de exacte naam van de menuentry hebben. Bijvoorbeeld: GRUB_DEFAULT=”Ubuntu, Linux 2.6.31-14-generic”. De plaats in het menu doet er dan niet toe.

Deze variabele moet je dus wijzigen om een ander besturingssysteem dan het huidige besturingssysteem als standaard te kiezen bij een dual boot.

GRUB_HIDDEN_TIMEOUT Deze variabele specificeert in seconden hoelang het splash image getoond moet worden. Standaard staat deze op 0. Dit betekent dat het splash image niet getoond wordt en  GRUB direct geladen wordt. Zet deze variabele op een aantal seconden als je het splash image wilt zien. Het grubmenu krijg je door op de Shift-toets te drukken tijdens het tonen van het splash image.
GRUB_HIDDEN_TIMEOUT_QUIET Deze variabele wordt gebruikt voor het laten zien van het aftellen. Standaard staat deze op true. Dit betekent dat je het niet zichtbaar is. Je kan als je deze variabele gezet hebt, nog steeds met de Shift-toets het grubmenu in. Zet deze variabele op false als je het aftellen wilt zien.
GRUB_TIMEOUT Deze variabele specificeert in seconden hoelang het grubmenu getoond moet worden als er geen keuze gemaakt wordt.  Deze variabele wordt bij uitvoeren overschreven door de GRUB_HIDDEN_TIMEOUT variabele als deze niet uitgecommentarieerd is (door # aan het begin van de regel).
De waarde -1 specificeert dat het menu getoond wordt totdat er een keuze gemaakt wordt door de gebruiker.

De folder /etc/grub.d

Het grubmenu wordt samengesteld aan de hand van de volgende scripts:

Script Betekenis
00_header Dit script bevat de settings voor onder ander het default menu item, de timeout en de grafische mode. Dit script wordt opgebouwd aan de hand van het betand /etc/default/grub. Je hoeft hier dus geen wijzigingen in te maken.
05_debian_theme Dit script bevat de settings voor de achtergrond van het grubmenu, de tekstkleuren, highlighting van de keuze in het menu en thema. Indien er geen splash image gedefinieerd is wordt het monochromatisch thema gekozen als standaard menu-thema.
10_linux Dit script zoekt alle kernels van het huidige besturingssysteem op de root-partitie om in het menu te tonen.
20_memtest86+ Dit script zoekt naar het /boot/memtest86+.bin bestand om in het menu te tonen.
30_os-prober Dit script zoekt naar linux kernels van het niet huidige besturingssysteem en andere besturingssytemen, zoals Microsoft Windows en Apple OSX.
40_custom Dit script kan gebruikt worden om extra menu entries op te voeren. Deze worden in het bestand /boot/grub/grub.cfg geplaatst met behulp van update-grub2. Alle tekst onderaan dit script wordt een op een gekopieerd naar het grub.cfg bestand.

Het mag wel duidelijk zijn dat het voorloopnummer van de bestandsnaam aangeeft in welke volgorde deze in het grubmenu worden opgenomen. Dit werkt net als het init.d systeem. Je kan dus ook eigen uitvoerbare scripts creëren met een nummer die tussen, voor of na de huidige reeks vallen om opgenomen te worden in het grub.cfg bestand.

Grub-install

Het commando grub-install <opties> <grub-device> schrijft een startbaar (bootable) image op een startbaar partitie (grub-device). Zie grub-install --help voor de opties.

Update-grub

Het commando sudo update-grub schrijft een een nieuw /boot/grub/brub.cfg bestand. Vergeet dus niet na het maken van wijzigingen in de GRUB 2 bestandshierarchie om dit commando uit te voeren.

Waarschuwing

Wellicht overbodig, maar pas op met het maken van wijzigen in de GRUB 2 bestandshierarchie. Je kan de bootloader om zeep helpen met een verkeerde wijziging.

Troubleshooting

Als je niet meer in Ubuntu komt dan moet je herstarten met de Ubuntu Live CD in de CD-tray. Mount je boot device. Welke dat is kan je zien in Systeem –> Beheer –> GParted. Doe de mount als volgt:

sudo mkdir /mnt/ubuntu
sudo mount -t ext4 /mnt/ubuntu
sudo vi /mnt/ubuntu/boot/grub/grub.cfg

en corrigeer de wijziging.

Let op: dit is de enige keer dat je direct het bestand grub.cfg wijzigt. Anders kom je het systeem niet meer in. Onthoudt dat je de wijziging ook weer doorvoert op de correcte plaats in de bestandshierarchie van GRUB 2.

15 Reacties »

  1. Leo,

    Bedankt voor deze instructies op een rijtje. Enigszins bekend met menu.lst was het nu eerst weer de weg zoeken ;-)

    Zo vroeg ik me onlangs af of er ook een grafisch programma zou zijn waarmee je dit kunt beheren. Zo kwam ik uit bij StartUp Manager (kortweg: SUM).
    Zie bijvoorbeeld http://www.ubuntugeek.com/startup-manager-change-settings-in-grub-grub2-and-usplash.html
    Daarmee wordt het beheren van Grub een stuk eenvoudiger. Na installatie nestelt het programma zich in het Beheer-menu van GNOME.

    Comment door Martijn — november 8, 2009 @ 10:11 pm | Beantwoord

    • Klopt, ik weet het en ken StartUp Manager. Het is oorspronkelijk ontwikkeld voor GRUB en nu aangepast voor GRUB 2. Het is nog niet helemaal compleet, vandaar dat ik het nog niet getest hebt. Wel goed om te horen dat wat er al voor GRUB 2 is aangepast werkt. Dank.

      Comment door Leo — november 9, 2009 @ 8:49 pm | Beantwoord

  2. Hebben jullie een manier gevonden om de verschillende linux images te verwijderen of te skippen? Ik heb inmiddels 2.6.31-14 t/m 16 in mijn lijst staan, en ik denk dat ik 14 & 15 nooit meer ga booten.
    Is er een manier om de lijst op te schonen?

    Comment door Martijn — december 7, 2009 @ 9:11 pm | Beantwoord

  3. Ik heb afgelopen weekend die lijst opgeschoond door uit de /boot-map het oudste vmlinuz image te verwijderen.
    Dat heb ik laten volgen door een “sudo update-grub” (sans quotes) om grub bij te werken.

    Ik meen me te herinneren dat je met de vorige Grub kon aangeven tot hoeveel kernels de lijst beperkt moet blijven, maar een dergelijke optie kan ik nu niet meer vinden.

    Comment door Martijn (Ubuntu-startpagina) — december 8, 2009 @ 12:28 am | Beantwoord

  4. Ja, helemaal goed, dank daarvoor!

    Comment door Martijn — december 8, 2009 @ 5:32 pm | Beantwoord

  5. Dag Leo,
    Ik heb net met heel veel moeite een schone installatie van 9.10 voor elkaar gekregen, nadat ik enkele maanden me nauwelijks met Ubuntu had beziggehouden. Bovendien verliep de update 8.04-8.10-9.04 zo slecht dat ik via Gparted alles eraf moest halen. Daarom de vraag: kan ik deze startup-manager veilig installeren? In 8.04 gebruikte ik hem wel en daar werkte deze goed.
    Groet,
    Winus

    Comment door Winus van Asselt — december 17, 2009 @ 5:24 pm | Beantwoord

    • Winus, ja dat kan, maar deze startup-manager ondersteunt GRUB2 nog niet volledig. Het is echter wel te gebruiken. De auteur werkt aan een nieuwe versie voor GRUB2.

      Comment door Leo — december 17, 2009 @ 9:40 pm | Beantwoord

  6. Hallo Leo,

    Ik heb net Ubuntu 9.10 geinstalleerd op mijn Vista 64bit machine. Ubuntu start gewoon, maar als ik Vista wil opstarten komt alleen ‘Grub’ in beeld en dan kom ik weer in het Grub menu. Ik heb Grub opnieuw geinstalleerd zoals beschreven (in de handleiding, vanaf de CD), maar geen effect.

    Wat kan ik doen? ik moet ook echt weer aan de slag in Vista…

    entry is

    insmod ntfs
    set root=(hd0,1)
    search –no-floppy –fs-uuid –set 86e….(etc)
    chainloader +1

    GNU grub version 1.97~beta 4

    groet
    Stefan

    Comment door stefan flos — december 20, 2009 @ 3:30 pm | Beantwoord

    • In het GRUB menu moet een entry staan (de laatste) om Windows te starten. Als deze er niet staat dan is het volgende de gemakkelijkste manier om deze terug te krijgen:
      - installeer os-prober via Synaptic (als deze niet al geïnstalleerd is) en
      - voer het volgende commando in een terminalvenster uit: sudo update-grub.

      Comment door Leo — december 20, 2009 @ 9:27 pm | Beantwoord

      • Hallo leo, Die entry naar windows Vista staat er maar die werkt dus niet. De details van die entry heb ik aangegeven. Ik heb Grub opnieuw geinstalleerd vanaf de CD en daarna update-grub gedaan. Maar het werkt nog steeds niet. Hoe krijg ik Vista aan de gang? Welke entry kan ik proberen. Kan ik Vista met de hand starten (command line). Ubuntu doet het gewoon goed.

        Comment door stefan flos — december 21, 2009 @ 7:49 am | Beantwoord

        • Stefan,

          Mogelijk heb je hier iets aan: http://blogs.koolwal.net/2008/12/28/windows-xpvista-dual-boot-does-not-boot-from-grub2-or-grub-pc/
          Daarin staan wat wijzigingen van Grub naar Grub2 met betrekking tot het nummeren van partities.
          Krijg je ook een bepaalde foutmelding als je Vista probeert te starten? Misschien kan die namelijk ook verder helpen.

          Als het totaal niet lukt met Grub dan kun je ook de zaak omdraaien: de bootloader van Windows Vista gebruiken en daaraan Ubuntu toevoegen:
          http://www.aeroxp.org/board/index.php?showtopic=7768

          Comment door Martijn (Ubuntu-startpagina) — december 21, 2009 @ 9:14 am | Beantwoord

        • OK, dan gaan we het volgende proberen: het herstellen van de bootpartitie (wordt een lang verhaal maar goed).

          1) Boot je PC met een Windows XP CD en ga de recovery mode in. Het kan ook zijn dat je vanuit de boot een recovery menu in kan. Eenmaal in de recovery mode voer de volgende commando’s uit:
          fixboot
          fixmbr

          Je kan nu Windows XP starten, maar je bent wel de Ubuntu opstartmogelijkheid kwijt. Dat gaan we nu herstellen.

          2) Boot je PC met een Ubuntu Live CD (je doet er goed aan de laatste versie van de Ubuntu website te downloaden).
          Open een terminalvenster en voer het commando sudo fdisk -l uit. Je ziet het volgende:
          leo@gandalf:~$ sudo fdisk -l
          [sudo] password for leo:

          Schijf /dev/sda: 750.2 GB, 750156374016 bytes
          255 koppen, 63 sectoren/spoor, 91201 cilinders
          Eenheid = cilinders van 16065 * 512 = 8225280 bytes
          Schijf-ID: 0xbe4862c7

          Apparaat Opstart Begin Einde Blokken ID Systeem
          /dev/sda1 1 1191 9566676 12 Compaq diagnostiek
          /dev/sda2 * 1192 2436 10000462+ 83 Linux
          /dev/sda3 2437 3183 6000277+ 82 Linux wisselgeheugen
          /dev/sda4 3184 91201 707004585 83 Linux
          leo@gandalf:~$

          Het device waarbij in de boot (of opstart) kolom een sterretje staat is de boot partitie.
          De eerste Linux partitie is de partitie waar het Ubuntu besturingssysteem opstaat. Deze is normaal gesproken kleiner dan de andere Linux partitie.
          In mijn voorbeeld is dat dezelfde partitie. In jou geval zal dat een andere zijn.
          Noteer de Linux partitie. We gaan voor de rest van het verhaal even uit van /dev/sda4.
          Mount nu de Linux partitie door het commando sudo mount /dev/sda4 /mnt
          Voer het commando ls /mnt uit.
          Je moet nu (ongeveer) het volgende zien:
          bin cdrom etc initrd.img lib lib64 media opt root selinux sys var vmlinuz.old
          boot dev home initrd.img.old lib32 lost+found mnt proc sbin srv tmp usr vmlinuz

          Zie je totaal iets anders dan heb je de verkeerde Linux partitie gemount. Unmount dan dit device weer met het commando umount /mnt en mount de andere Linux partitie.
          Mount de boot partitie (alleen als deze afwijkt van de Linux partitie). We gaan voor het voorbeeld even uit van /dev/sda1 als boot device. Mount het met het commando sudo mount /dev/sda1 /mnt/boot
          Herinstalleer grub met het commando sudo grub-install /dev/sda --root-directory=/mnt (LET OP: je moet hier de schijf /dev/sda gebruiken en niet de partitie)
          Boot en controleer of je nu wel in Windows XP komt.

          Nou ik ben benieuwd.

          Comment door Leo — december 21, 2009 @ 10:30 am | Beantwoord

          • Leo, Alles geprobeerd maar van de regen in de drup.

            Allereerst kwam ik dit tegen:
            Thanks for the article! Just a note, on a fresh install of karmic koala, update-grub2 is not installed, however you can acquire it by typing:

            $sudo apt-get install grub-pc

            The notes say update-grub is the same, but when I ran it, it wanted to create menu.lst and not grub.conf:

            Testing for an existing GRUB menu.lst file …

            Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for you? (y/N) n

            Not creating /boot/grub/menu.lst as you wish

            After installing the above package and running update-grub it seems identical to update-grub2.

            Hope this helps a bit…

            Verder gebruik ik Vista en omdaar de bootpartitie te updaten moet je het volgende doen:

            You can use bootrec /fixboot or bootrec /fixmbr in the “command prompt” of
            the DVD :

            Boot on the Vista DVD. Choose country. Next. Choose keyboard. Next.
            Don’t choose “install now” but “system recovery options” . If it is proposed
            to repair at the end of the search, answer “no”. Deselect all lines and clic
            “next”
            Choose “command prompt”
            Type bootrec /? to access the bootrec help
            A usefull command is also :
            bootrec /rebuildbcd

            Ook dat geprobeerd, maar geen effect.

            Ik ga nu alles opnieuw installeren en dan bekijk ik het wel.
            PS ik gebruik een nieuwe PC dus de schade is nog beperkt…

            Als het daarna wel goed gaat met ubuntu dan laat ik nog van met horen.
            groet
            Stefan

            Comment door stefan flos — december 21, 2009 @ 12:41 pm | Beantwoord

            • Ik snap jou antwoord niet of je moet iets totaal anders gedaan hebben dan wat ik voorgesteld had.

              Comment door Leo — december 21, 2009 @ 4:04 pm

  7. Halle Leo,
    Allereest: ik waardeer de tijd die je besteed aan het meedenken. Ik heb geprobeert te doen wat je hebt voorgesteld, echter ik gebruik vista (64bit). Vandaar mijn antwoord: de XP manier werkt niet, de vista manier zou moeten werken om fixboor en fixmbr uit te voeren. Toen ik dat gedaan had kon ik echter vista nog niet opstarten. Dus jouw tweede deel heb ik niet kunnen uitvoeren.

    Om een lang verhaal in te korten: ik heb Vista opnieuw geinstalleerd, daarna ubuntu 9.04 en dat werkt prima samen. ik denk dat er misschien een bug zit in ubuntu 9.1 en Grap 2. Ubuntu 9.04 kan ik upgraden naar 9.10.

    Ik hou je op de hoogte mocht er nog iets fout gaan.
    Stefan

    Comment door stefan flos — december 21, 2009 @ 5:19 pm | Beantwoord


RSS feed voor reacties op dit bericht. TrackBack URI

Plaats een reactie

Blog op Wordpress.com.