Bug#589534: grub2: grub-mkconfig partition detection neither reliable nor intuitive

Vladimir 'φ-coder/phcoder' Serbinenko phcoder at gmail.com
Tue Jul 20 12:53:09 UTC 2010


On 07/18/2010 04:56 PM, Josef Spillner (kuarepoti-dju.net) wrote:
> Package: grub2
> Version: 1.98-1
> Severity: normal
>
> *** Please type your report below this line ***
>
> My harddisk (sda) started to show bad blocks so I've installed another one
> (sdb) and cloned the
> system to it with dd_rescue. What happens now when I run update-grub or
> grub-mkconfig on the old
> system booted from sda, it sets root=sdb1 and generates the kernel list in
> grub.cfg from the ones
> available in sdb1's /boot menu for both the sda grub as well as the sdb
> grub.
> This is either great supercow intelligence to not use the kernels on the
> (still active) old hard disk anymore, or (more probably)
> a bug in grub2. It means that the mere existence of a new hard disk in the
> physical system, without even
> mounting it, changes grub2's behaviour, which is certainly not a good
> idea.
>
> In the file /usr/lib/grub/grub-mkconfig_lib, function
> prepare_grub_to_access_device(), only /dev/sdb1 is
> given as an argument, but not /dev/sda1. Both partitions contain their
> disk's system directories including /boot.
> I've added a DEVICE debug statement which shows up in the attached
> configuration file grub.cfg.
>
> I couldn't find information in the ultra-minimalistic manual pages for
> grub-install, update-grub,
> grub-mkconfig etc. what the desired behaviour is to compare it to the
> actual behaviour. In my view,
> the desired behaviour would be to include all kernels from all partitions
> grub2 works on and place the
> list into all grub2 installations. The latter part is currently working,
> the former is not.
>
> To summarise graphically, when running update-grub from the sda system we
> get:
> * in /dev/sda's boot menu: kernels on sdb1 + custom entries from sdb1
> * in /dev/sdb's boot menu: kernels on sdb1 + custom entries from sdb1
>
> Instead of:
> * in /dev/sda's boot menu: kernels on sda1 + sdb1 + custom entries from
> sda1 + sdb1
> * in /dev/sdb's boot menu: kernels on sda1 + sdb1 + custom entries from
> sda1 + sdb1
>
>   
There are few possible problems leading to this behaviour:
1) (Most likely) since Debian uses UUIDs and if you forgot to change
UUIDs and update /etc/fstab for ne UUIDs you actually always load the
system from sdb even when you think you load from sda. Following excerpt
speak in favor of this hypothesis:
> *********************** BEGIN /proc/mounts
> /dev/disk/by-uuid/384493f8-0bc2-4e63-8ff1-cdce440b4279 / ext3
> rw,relatime,errors=remount-ro,data=ordered 0 0
> *********************** END /proc/mounts
>   
2) Less likely: bug in grub-probe. After you're absolutely sure that
sda1 and not sdb1 is mounted at / execute:
sudo grub-probe -t device /
and post the result.
> *********************** BEGIN /boot/grub/device.map
> (hd0)   /dev/sda
> *********************** END /boot/grub/device.map
>
> *********************** BEGIN /boot/grub/grub.cfg
> #
> # DO NOT EDIT THIS FILE
> #
> # It is automatically generated by /usr/sbin/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
>   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
> }
> # DEVICE /dev/sdb1
> insmod ext2
> set root='(/dev/sdb,1)'
> search --no-floppy --fs-uuid --set 384493f8-0bc2-4e63-8ff1-cdce440b4279
> if loadfont /usr/share/grub/unicode.pf2 ; then
>   set gfxmode=640x480
>   insmod gfxterm
>   insmod vbe
>   if terminal_output gfxterm ; then true ; else
>     # For backward compatibility with versions of terminal.mod that don't
>     # understand terminal_output
>     terminal gfxterm
>   fi
> fi
> # DEVICE /dev/sdb1
> insmod ext2
> set root='(/dev/sdb,1)'
> search --no-floppy --fs-uuid --set 384493f8-0bc2-4e63-8ff1-cdce440b4279
> set locale_dir=($root)/boot/grub/locale
> set lang=de
> insmod gettext
> set timeout=5
> ### END /etc/grub.d/00_header ###
>
> ### BEGIN /etc/grub.d/05_debian_theme ###
> set menu_color_normal=cyan/blue
> set menu_color_highlight=white/blue
> ### END /etc/grub.d/05_debian_theme ###
>
> ### BEGIN /etc/grub.d/08_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.
>
> menuentry "Debian GNU/Linux, with Linux 2.6.32-3-amd64 (nokbd-stx8)"
> --class debian --class gnu-linux --class gnu --class os {
>         insmod ext2
>         set root='(hd0,1)'
>         #set root='(hd1,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.32-3-amd64 ...
>         linux   /boot/vmlinuz-2.6.32-3-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro  quiet
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.32-3-amd64
> }
> ### END /etc/grub.d/08_custom ###
>
> ### BEGIN /etc/grub.d/10_linux ###
> menuentry "Debian GNU/Linux, with Linux 2.6.32-trunk-amd64" --class debian
> --class gnu-linux --class gnu --class os {
>         # DEVICE /dev/sdb1
>         insmod ext2
>         set root='(/dev/sdb,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.32-trunk-amd64 ...
>         linux   /boot/vmlinuz-2.6.32-trunk-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro  quiet
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.32-trunk-amd64
> }
> menuentry "Debian GNU/Linux, with Linux 2.6.32-trunk-amd64 (recovery
> mode)" --class debian --class gnu-linux --class gnu --class os {
>         # DEVICE /dev/sdb1
>         insmod ext2
>         set root='(/dev/sdb,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.32-trunk-amd64 ...
>         linux   /boot/vmlinuz-2.6.32-trunk-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro single 
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.32-trunk-amd64
> }
> menuentry "Debian GNU/Linux, with Linux 2.6.32-3-amd64" --class debian
> --class gnu-linux --class gnu --class os {
>         # DEVICE /dev/sdb1
>         insmod ext2
>         set root='(/dev/sdb,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.32-3-amd64 ...
>         linux   /boot/vmlinuz-2.6.32-3-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro  quiet
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.32-3-amd64
> }
> menuentry "Debian GNU/Linux, with Linux 2.6.32-3-amd64 (recovery mode)"
> --class debian --class gnu-linux --class gnu --class os {
>         # DEVICE /dev/sdb1
>         insmod ext2
>         set root='(/dev/sdb,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.32-3-amd64 ...
>         linux   /boot/vmlinuz-2.6.32-3-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro single 
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.32-3-amd64
> }
> menuentry "Debian GNU/Linux, with Linux 2.6.30-2-amd64" --class debian
> --class gnu-linux --class gnu --class os {
>         # DEVICE /dev/sdb1
>         insmod ext2
>         set root='(/dev/sdb,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.30-2-amd64 ...
>         linux   /boot/vmlinuz-2.6.30-2-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro  quiet
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.30-2-amd64
> }
> menuentry "Debian GNU/Linux, with Linux 2.6.30-2-amd64 (recovery mode)"
> --class debian --class gnu-linux --class gnu --class os {
>         # DEVICE /dev/sdb1
>         insmod ext2
>         set root='(/dev/sdb,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.30-2-amd64 ...
>         linux   /boot/vmlinuz-2.6.30-2-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro single 
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.30-2-amd64
> }
> ### END /etc/grub.d/10_linux ###
>
> ### BEGIN /etc/grub.d/30_os-prober ###
> ### 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.
>
> menuentry "Debian GNU/Linux, with Linux 2.6.32-3-amd64 (nokbd-stx40)"
> --class debian --class gnu-linux --class gnu --class os {
>         insmod ext2
>         set root='(hd0,1)'
>         #set root='(hd1,1)'
>         search --no-floppy --fs-uuid --set
> 384493f8-0bc2-4e63-8ff1-cdce440b4279
>         echo    Loading Linux 2.6.32-3-amd64 ...
>         linux   /boot/vmlinuz-2.6.32-3-amd64
> root=UUID=384493f8-0bc2-4e63-8ff1-cdce440b4279 ro  quiet
>         echo    Loading initial ramdisk ...
>         initrd  /boot/initrd.img-2.6.32-3-amd64
> }
> ### END /etc/grub.d/40_custom ###
> *********************** END /boot/grub/grub.cfg
>
> -- System Information:
> Debian Release: squeeze/sid
>   APT prefers testing
>   APT policy: (500, 'testing')
> Architecture: amd64 (x86_64)
>
> Kernel: Linux 2.6.32-3-amd64 (SMP w/2 CPU cores)
> Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8)
> Shell: /bin/sh linked to /bin/dash
>
> Versions of packages grub2 depends on:
> ii  grub-pc                       1.98-1     GRand Unified Bootloader,
> version 
>
> grub2 recommends no packages.
>
> grub2 suggests no packages.
>
> -- no debconf information
>
>
>
> _______________________________________________
> Pkg-grub-devel mailing list
> Pkg-grub-devel at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/pkg-grub-devel
>
>   


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 294 bytes
Desc: OpenPGP digital signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-grub-devel/attachments/20100720/f01453e2/attachment-0003.pgp>


More information about the Pkg-grub-devel mailing list