PDA

View Full Version : [all variants] Grub 2 problem



jktrigg
January 25th, 2011, 01:55 AM
I upgraded from Grub Legacy to Grub 2 in the belief that it would solve a problem I was having. However, my search --fsuuid commands seem to be being ignored, so when I attach a non-bootable USB drive I still get grub error 21 and it will not boot.

On looking at /boot/grub/grub.cfg, I noticed some peculiarities:



#
# 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="0"
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 part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640x480
load_video
insmod gfxterm
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
set locale_dir=($root)/boot/grub/locale
set lang=en
insmod gettext
if [ "${recordfail}" = 1 ]; then
set timeout=-1
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
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.35-25-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-25-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-25-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-25-generic ...'
linux /boot/vmlinuz-2.6.35-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-25-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-24-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-24-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-24-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-24-generic ...'
linux /boot/vmlinuz-2.6.35-24-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-24-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-23-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-23-generic ...'
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-23-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-22-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-22-generic ...'
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-22-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-25-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.32-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.32-25-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-25-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.32-25-generic ...'
linux /boot/vmlinuz-2.6.32-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-25-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='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
insmod part_msdos
insmod ext2
set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set cef62b32f62b19eb
chainloader +1
}
menuentry "Windows Vista (loader) (on /dev/sda2)" {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set dea21d94a21d726f
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 ###


It sets root= manually and then does search --fsuuid; it also does this more than once before the system-specific stanzas begin. Do I need to modify my /etc/grub.d entries somehow? If not, how do I get it so that if a bootable USB drive is attached the system boots from that, otherwise it boots correctly from the grub installation on the internal hard drive?

jktrigg
January 25th, 2011, 03:49 AM
OK, commenting out all of the duplicate insmods, all of the root=, and the duplicate search before the first menuentry got it to work -- with non-bootable USB drive connected at power-on it booted fine. Now I need to figure out what to change in /etc/grub.d to make grub-mkconfig generate a correct grub.cfg. Any pointers?



#
# 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="0"
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 part_msdos
insmod ext2
#set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=640x480
load_video
insmod gfxterm
fi
terminal_output gfxterm
#insmod part_msdos
#insmod ext2
#set root='(hd0,msdos5)'
#search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
set locale_dir=($root)/boot/grub/locale
set lang=en
insmod gettext
if [ "${recordfail}" = 1 ]; then
set timeout=-1
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
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, with Linux 2.6.35-25-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-25-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-25-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-25-generic ...'
linux /boot/vmlinuz-2.6.35-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-25-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-24-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-24-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-24-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-24-generic ...'
linux /boot/vmlinuz-2.6.35-24-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-24-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-23-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-23-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-23-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-23-generic ...'
linux /boot/vmlinuz-2.6.35-23-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-23-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-22-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.35-22-generic
}
menuentry 'Ubuntu, with Linux 2.6.35-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.35-22-generic ...'
linux /boot/vmlinuz-2.6.35-22-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.35-22-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-25-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux /boot/vmlinuz-2.6.32-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro quiet splash
initrd /boot/initrd.img-2.6.32-25-generic
}
menuentry 'Ubuntu, with Linux 2.6.32-25-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
echo 'Loading Linux 2.6.32-25-generic ...'
linux /boot/vmlinuz-2.6.32-25-generic root=UUID=409e49c1-8fb7-49d9-bc3e-1b315b9c641b ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.32-25-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='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
# insmod part_msdos
# insmod ext2
# set root='(hd0,msdos5)'
search --no-floppy --fs-uuid --set 409e49c1-8fb7-49d9-bc3e-1b315b9c641b
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" {
# insmod part_msdos
insmod ntfs
# set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set cef62b32f62b19eb
chainloader +1
}
menuentry "Windows Vista (loader) (on /dev/sda2)" {
# insmod part_msdos
insmod ntfs
# set root='(hd0,msdos2)'
search --no-floppy --fs-uuid --set dea21d94a21d726f
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 ###


Thanks,
Jim