PDA

View Full Version : [ubuntu] Grub 1.99 always selects the same entry



TheGrave
May 30th, 2011, 06:19 PM
I have a very strange problem. I was on 10.10 and upgraded to 11.04, correspondingly GRUB got upgraded from 1.98 to 1.99. I have a dual-boot configuration on the same drive - WinXP and Ubuntu. I have a few entries in grub.cfg - ubuntu, recovery mode, memtest and windows. No matter which entry I make to be the default (trying to load 0) it always selects windows and doesn't load after the configured timeout. Tried playing with all possible values of GRUB_DEFAULT and GRUB_SAVEDDEFAULT in /etc/default/grub - doesn't help. Recreated the grubenv with sudo grub-editenv /boot/grub/grubenv create - nothing again. Not to mention even removing windows from the menu doesn't force the machine to boot after GRUB_TIMEOUT. I'm scratching my head for about 2 weeks already and tried everything I saw in forums but nothing works. It simply looks that GRUB is ignoring any information about the default entry. Any help is appreciated.


cat /etc/default/grub

GRUB_DEFAULT=saved #tried value 0 as well - no difference
GRUB_SAVEDEFAULT=true
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

cat /boot/grub/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
set default="${saved_entry}"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}

function recordfail {
set recordfail=1
if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}

function load_video {
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
}

insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=auto
load_video
insmod gfxterm
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
set locale_dir=($root)/boot/grub/locale
set lang=en_GB
insmod gettext
if [ "${recordfail}" = 1 ]; then
set timeout=15
else
set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 44,0,30; then
clear
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
if [ ${recordfail} != 1 ]; then
if [ -e ${prefix}/gfxblacklist.txt ]; then
if hwmatch ${prefix}/gfxblacklist.txt 3; then
if [ ${match} = 0 ]; then
set linux_gfx_mode=keep
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=keep
fi
else
set linux_gfx_mode=text
fi
export linux_gfx_mode
if [ "$linux_gfx_mode" != "text" ]; then load_video; fi
menuentry 'Ubuntu, with Linux 2.6.38-8-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
savedefault
set gfxpayload=$linux_gfx_mode
insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
linux /boot/vmlinuz-2.6.38-8-generic root=UUID=ce3a9015-138e-4b09-a70a-c9572bc85c76 ro
initrd /boot/initrd.img-2.6.38-8-generic
}
menuentry 'Ubuntu, with Linux 2.6.38-8-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
echo 'Loading Linux 2.6.38-8-generic ...'
linux /boot/vmlinuz-2.6.38-8-generic root=UUID=ce3a9015-138e-4b09-a70a-c9572bc85c76 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.38-8-generic
}
submenu "Previous Linux versions" {
menuentry 'Ubuntu, with Linux 2.6.35-28-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
savedefault
set gfxpayload=$linux_gfx_mode
insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
linux /boot/vmlinuz-2.6.35-28-generic root=UUID=ce3a9015-138e-4b09-a70a-c9572bc85c76 ro
initrd /boot/initrd.img-2.6.35-28-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-28-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
echo 'Loading Linux 2.6.35-28-generic ...'
linux /boot/vmlinuz-2.6.35-28-generic root=UUID=ce3a9015-138e-4b09-a70a-c9572bc85c76 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-28-generic
}
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
insmod part_msdos
insmod ext2
set root='(/dev/sdb,msdos2)'
search --no-floppy --fs-uuid --set=root ce3a9015-138e-4b09-a70a-c9572bc85c76
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Microsoft Windows XP Professional (on /dev/sdb1)" --class windows --class os {
savedefault
insmod part_msdos
insmod ntfs
set root='(/dev/sdb,msdos1)'
search --no-floppy --fs-uuid --set=root 262A0FCE2A0F99C7
drivemap -s (hd0) ${root}
chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

at /boot/grub/grubenv
# GRUB Environment Block
saved_entry=Ubuntu, with Linux 2.6.38-8-generic
################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## ################################################## #

I'm also attaching the results from the boot info script.

TheGrave
June 4th, 2011, 12:30 AM
Bump. Still stuck with that. Managed to get it working properly only once by pure luck when I set the GRUB_HIDDEN_TIMEOUT_QUIET=quiet command although I cannot see the theoretical relationship with my problem.

TheGrave
June 5th, 2011, 12:55 PM
Removing Windows from the menu makes grub boot directly into Ubuntu. It's some kind of a relief but I'm still trying to get Windows as a backup non-default grub entry.

drs305
June 8th, 2011, 12:50 PM
I just stumbled on this thread.

Often when changes don't seem to 'take' it is because there are multiple Ubuntu/Linux OS's and the changes aren't being made to the controlling Grub.

If you haven't modified the script names, when you boot the first menuentry comes from the controlling Grub. For instance, if you have Lucid and Maverick, and the first menuentry is for 2.6.32..., it means that Lucid's Grub 2 is controlling things. If you are booted into Maverick, you can make changes to Grub, even successfully run "sudo update-grub", but your boot menu isn't going to change because the files that actually control the boot (Lucid's) haven't been altered.

You can easily change which Grub controls the boot. While in the OS you want to control things, run the following (assuming the OS is on sdb)

sudo grub-install /dev/sdb
This will cause the MBR information to point to your current Grub files.

TheGrave
June 9th, 2011, 12:46 AM
No, I have only Natty and no other Linux/Unix-based OS, just an old XP installation. As you mentioned it, however, I remembered that the way I initially messed up my grub was by installing it onto the partition directly instead ionthe MBR:) Could I have messed up something else after installing it to the MBR? I guess there might be some unnecessary files left on the partition that mess up grub.

drs305
June 9th, 2011, 01:19 AM
First, confirm you ARE seeing the GRUB menu (i.e. it's not booting Windows off of the sda MBR)?

I can think of a few things to try, but the easiest would be to boot a Natty CD, chroot into your sdb2 installation, and purge/reinstall Grub2 according to the instructions in the "Chroot" link in my signature line.

This will:
Remove the SAVEDEFAULT entry
Zero out the /boot/grub/grubenv file.
Make sure Grub is using the sdb MBR and not the sdb2 PBR.
Replace any damaged files.

Make sure you mount /dev/sdb2 in the chroot procedure and install only to sdb (not the partition).

One other thing to check when you reboot: enter BIOS and check the drive size. Note whether is reports sdb as being approximately 250GB). Also make sure sdb is the default boot drive.

TheGrave
June 9th, 2011, 01:42 AM
Yes, I'm seeing the grub menu and I went exactly through the procedure you described to restore access to the Ubuntu installation. BIOS is fine, boot drive hasn't been changed for ages (my other drive has no OS or bootloader installed anyway). That's why I was asking if any leftover files from the installation to the PBR can cause problems, that's the only thing that currently comes to my mind.

drs305
June 9th, 2011, 02:37 AM
I'm having a hard time trying to figure out why Grub2 is behaving as it is.

Please correct me if I'm wrong:
It boots to the menu.
Grub 1.99RC is displayed at the top of the menu.
Ubuntu 2.6.38 is the first menuentry.
There is a "Previous Linux versions" submenu.
Windows is highlighted.
The menu counts down to zero.
Nothing happens. Windows is still highlighted.

At that point, can you manually select either Windows or Ubuntu, and would they both boot if selected?

If you can boot Ubuntu by manually selecting it from the menu, as a minimum I'd run "sudo grub-install /dev/sdb" to rebuild core.img.

The reason I asked about the reported drive size in BIOS is that if the boot files moved during the upgrade they may now be beyond the area visible by Grub, even though it worked before and even though you can now see the files after the OS boots.

Added:
I copied your grub.cfg file, substituted UUIDs and msdos2 values and it booted from my machine without any problems. If you can boot into Ubuntu from the menu without the CD, I'd go ahead and purge/reinstall one more time:

sudo apt-get update # Ensure you have an Internet cnx before purging
sudo apt-get purge grub-common
sudo apt-get install grub-pc # Tab to OK on first screen, press SPACEBAR on sdb only on the second screen, then TAB to OK.

TheGrave
September 25th, 2011, 10:32 PM
Sorry for the late reply but only recently I got access to the console of the server. I tried everything - reinstalling Grub, reinstalling Ubuntu (damn stupid Natty installer, f*ucked up all the configs I had!) at the end of the day I had to format the partition to get rid of this ridiculous behaviour. Go figure out...

Thanks very much for the help anyway, really appreciated!