[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