[Bug 508901] Re: update-grub sets wrong root argument
Lars W
lars at winterfeld.de
Sat Feb 22 17:40:17 UTC 2014
I had a similar problem after copying all files from the root partition
/dev/sda1 to another partition /dev/sdb1 and trying to tell grub to boot
from there now.
I digged into problem a little bit...
When i run `update-grub` it runs each of the files in `/etc/grub.d/`, my linux copy (Ubuntu in this case) gets detected by `30_os-prober`. This will run `/usr/bin/os-prober`. This works fine. In the `for OS in ${OSPROBED} ` loop it goes into the linux) branch, but somehow sets the $LPARAMS variable wrong. This is due to the sometimes-wrong output of `/usr/bin/linux-boot-prober`. In that script, there is a loop `for test in /usr/lib/linux-boot-probes/mounted/*`, which runs the file `40grub2` from there in my case. (I know that from the debug output flooding syslog.) This script calls its `parse_grub_menu` function with some parameters, and parses "$mpoint/boot/grub/grub.cfg", where $mpoint is the mount point of /dev/sdb1. However, the grub.cfg in there contains the old UUID of /dev/sda1, because it is just a binary copy and does not come from a fresh install.
My plan A was to fix this, take the correct UUID from the device (here:
/dev/sdb1), corresponding to the mapping from /dev/disk/by-uuid/ and
post a patch. But the inner works of grub seem to complicated for me. I
lost motivation to do that.
Now that I know what the problem is, I took plan B, and chrooted into /dev/sdb1, ran update-grub in there, and reboot. You only need to do that once, afterwards the files are okay.
(...btw, for similar setups: you might want to have two different /etc/fstab on each of the partitions.)
This is somewhat a workaround. But here it goes:
mount /dev/sdb1 /mnt/disk
mount -o bind /dev /mnt/disk/dev
mount -o bind /sys /mnt/disk/sys
mount -t proc /proc /mnt/disk/proc
cp /proc/mounts /mnt/disk/etc/mtab
chroot /mnt/disk /bin/bash
grub-install /dev/sdb
update-grub
exit
(Plan C would have been to update the grub.cfg with the correct UUID manually.)
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub2 in Ubuntu.
https://bugs.launchpad.net/bugs/508901
Title:
update-grub sets wrong root argument
Status in “grub2” package in Ubuntu:
Confirmed
Bug description:
Binary package hint: grub2
I've made a backup of my system with dd and then changed the UUID and
label of the drive. I would like to be able to boot from either the
main system or the backup, ideally regardless of whether the backup is
in a USB enclosure or mounted internally.
When I run update-grub, even though it correctly finds the backup and
uses its UUID as a parameter for the search command, it still sets the
root= argument of the linux command to the main system. This makes
the backup unusable.
So in my setup, the original drive is
7f0e857e-6118-4696-bdc6-7c51b31e1002, and the backup is 9de2fc84-1128
-41eb-9c1b-a444d070d415. Each one has its fstab set up to mount
itself as root. The generated boot options look like this:
### BEGIN /etc/grub.d/10_linux ###
menuentry "Ubuntu, Linux 2.6.31-17-generic" {
recordfail=1
if [ -n ${have_grubenv} ]; then save_env recordfail; fi
set quiet=1
insmod ext2
set root=(hd0,1)
search --no-floppy --fs-uuid --set 7f0e857e-6118-4696-bdc6-7c51b31e1002
linux /boot/vmlinuz-2.6.31-17-generic root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.31-17-generic
}
...
### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Ubuntu, Linux 2.6.31-17-generic (on /dev/sdb1)" {
insmod ext2
set root=(hd1,1)
search --no-floppy --fs-uuid --set 9de2fc84-1128-41eb-9c1b-a444d070d415
linux /boot/vmlinuz-2.6.31-17-generic root=UUID=7f0e857e-6118-4696-bdc6-7c51b31e1002 ro quiet splash
initrd /boot/initrd.img-2.6.31-17-generic
}
I tried uncommenting the GRUB_DISABLE_LINUX_UUID=true" line in
/etc/default/grub, but it only affects the output of 10_linux, not
30_os-prober.
ProblemType: Bug
Architecture: i386
Date: Sun Jan 17 21:07:18 2010
DistroRelease: Ubuntu 9.10
Package: grub2 1.97~beta4-1ubuntu4.1
ProcEnviron:
LANGUAGE=en_GB.UTF-8
PATH=(custom, user)
LANG=en_GB.UTF-8
SHELL=/bin/bash
ProcVersionSignature: Ubuntu 2.6.31-17.54-generic
SourcePackage: grub2
Uname: Linux 2.6.31-17-generic i686
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/508901/+subscriptions
More information about the foundations-bugs
mailing list