Grub2

The grand unified bootloader (grub) not being updated since 2006 Canonical announced to release the next Ubuntu version 9.10 – also known as “Karmic Koala” – with grub2 as the default boot manager. Of course I got curious and as I read an article in c’t about this topic I had to see what grub2 was about!

If you’re running Ubuntu 9.04 Jaunty it’s quite easy to switch to grub2. However, if you installed Jaunty to boot from an ext4 partition you’re likely to have grub2 installed already.

There is a nice howto which explains installing grub2 in Jaunty at Ubuntu’s wiki here. If you follow the instructions, grub2 will end up in your boot partition (not the MBR) first and a new entry to your old grub is added, giving you the chance to boot grub2 via chainloader. You are advised to follow these instructions, because if grub2 doesn’t work for you, you’re still able to boot with grub. However, I decided skip this step and installed grub2 straight to MBR.

CAUTION: fiddling around with the bootmanager may leave you’re system unbootable!! If you don’t know how to recover from such a state, please don’t do it!

So, this is how it worked out for me with Ubuntu Jaunty (I guess this would work with Debian squeeze/sid also, but haven’t tried) on my desktop PC:

Install grub2 via

sudo apt-get install grub-pc

You’ll will be asked if you want to start grub2 by chainloading it via the old grub – I opted for “NO” (again: do this at your own risk!! If something goes wrong, you need to boot from CD, USB stick or whatever and repair the MBR!!). Next, you’re prompted for the “kopt” line of your old “/boot/grub/menu.lst”. In my case it was completely empty, so I took a look at my menu.lst file and copied the kopt-line over. It should look something like this:

root=UUID=XXXXXXXXXXXXXXXXXXXXXXXX ro quiet

Now activate grub2 by

sudo upgrade-from-grub-legacy

That was basically it. You may now remove all “menu.lst” files from /boot/grub, which are not needed anymore.

Now for the tweaking! 🙂
The new config file for grub2 is /boot/grub/grub.cfg, which is generated by running

sudo update-grub

Editing this file manually is not recommended and by the way useless, as it’s being regenerated every time there is kernel-update by update-grub. So, how can we change grub2’s default settings? Basically there seem to be two locations/files we should take a closer look at:

/etc/default/grub
/etc/grub.d/

To change the timeout until grub boots the default entry or to change the default entry itself, edit /etc/default/grub:

GRUB_DEFAULT=0
GRUB_TIMEOUT=15

In this case, the default boot entry would be the first in the list (0) and the timeout until booting it – if no key is pressed – is 15 seconds. The next time you run update-grub those settings will be written to /boot/grub/grub.cfg.
As I don’t want to have the ‘memtest’ entries in grub’s list, I removed the execution bit from /etc/grub.d/20_memtest86+:

sudo chmod 644 /etc/grub.d/20_memtest86+

By the way, if you take a look at /boot/grub/grub.cfg, you can see which script in /etc/grub.d/ is responsible for which entry. By removing the execution bit, update-grub can’t execute it and thus can’t write then menu entries for ‘memtest’.
To change screen resolution of grub2, edit /etc/grub.d/00_header, search for “set gfxmode=640x480” and change it as you like. I tried 1024x768 and 800x600, finding that the latter was a bit faster to display grub.
The last thing I wanted was a background image. I created a 800×600 png image file, a new directory /boot/grub/images and dropped the image there. To make it display at boot edit /etc/grub.d/05_debian_theme. Find the line (should be line 16)

for i in XXXXX ; do

and change it to something like this

for i in /boot/grub/images/background.png ; do

It is also recommended to change the text color of the highlighted entry to something else but “magenta”… This is done in line 40 (as you can see I changed it to “white”):

set color_highlight=white/black

Now, don’t forget to run

sudo update-grub

cross fingers and reboot!

I found – at least with background image enabled and 800×600 screen resolution – grub2 is slower in starting up compared to grub. Besides that, no difference to the old grub. OK, it looks better! But the big thing about grub2 is it’s capability to boot directly from lvm or raid devices without the need of a separate /boot partition (haven’t testet that, though).

2 thoughts on “Grub2”

  1. Hi Andreas,
    thanks for pointing that out – you're right! I'm not sure, that might change the resolution of bootsplash as well? Anyway, this was my first try with grub2 and today I tend to set :
    GRUB_GFXPAYLOAD_LINUX=1280x800x32
    in "/etc/default/grub". This keeps the default grub screen resolution and changes the bootsplash resolution only – makes booting a little prettier when using Nvidia binary drivers. (Not recommended when using default drivers.)

  2. To change the Grub2 screen resoultion don't chnage the /etc/grub.d/00_header file !
    Open the file /etc/default/grub
    uncomment this line
    #"GRUB_GFXMODE=600×480"
    and change to your resoultion.

    After saving the file run update-grub

Comments are closed.