opensuse dual boot problem repost

All,

I just upgraded an old PC from openssue 10.2 to 10.3, works fine.

10.3 runs 2.6.22.19-0.1-default. I then wanted to add the old 10.2
kernel, and at boot, choose which kernel i needed. Granted - booting the
older kernel - some things will not work.

point is one application that cannot run with the newer kernel.

/boot/grub/menu.lst works fine for the new kernel:

NEW KERNEL - WORKS

###Don’t change this comment - YaST2 identifier: Original name:
linux-2.6.22.19-0.1-default###
title openSUSE 10.3 - 2.6.22.19-0.1
root (hd0,5)
kernel /boot/vmlinuz-2.6.22.19-0.1-default root=/dev/sda6 vga=0x31a
resume=/dev/sda5 splash=silent showopts
initrd /boot/initrd-2.6.22.19-0.1-default

OLD KERNEL - FAILS

title openSUSE 10.3 - 2.6.18.2-34 (default)
rootnoverify (hd0,5)

kernel /boot/vmlinuz-2.6.18.2-34-default root=/dev/hda6 vga=0x31a

resume=/dev/hda5 splash=silent showopts
kernel /boot/vmlinuz-2.6.18.2-34-default root=/dev/hda6 vga=0x31a
resume=/dev/hda5 splash=silent showopts
initrd /boot/initrd-2.6.18.2-34-default

/boot/grub/device.map:
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb

fdisk -l:

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1702 13671283+ c W95 FAT32 (LBA)
/dev/sda2 1703 3005 10466347+ 93 Amoeba
/dev/sda3 3006 5473 19824210 f W95 Ext’d (LBA)
/dev/sda5 * 3006 3055 401593+ 82 Linux swap / Solaris
/dev/sda6 3056 5473 19422553+ 83 Linux

  • the linux root filesystem is /dev/sda6 - yes, i know - a mess.

So I installed and compiled the older kernel from source, installed,
etc…and then copied and modified this entry for the 2nd older kernel
to be able to boot from GRUB.

however; it seems grub does not see this kernel properly at /dev/sda,
but appears to recognize the hard disk at /dev/hda. the boot then fails
saying (paraphrase)

waiting for device /dev/sda6 to appear.
then later:

(some USB messages…etc…etc…)
want me to fall back to sda6 ?

it seems the old kernel is somehow confusing /dev/sda6 with some USB
drive it expects ?

Any tips on how i can fix this and get these 2 kernels to live together ?

Thanks in advance

I suspect that the problem is a very significant change that was made between those kernel versions. You see the symptom in the hda vs sda naming convention; only optical drives continue to be named with an “h”. The 10.3 kernel implemented an enhanced libata to handle all drives SATA and PATA through scsi emulation. Not longer thereafter the default drive referencing nomenclature changed from disk-name (e.g., sda) to disk-by-id (disk/partitioner number; optionally also by label or UUID) which are persistent, in recognition of the portability of SATA devices with which the user can easily change the drive sequencing. The grub implementation in device.map and menu.lst changed accordingly. This suggests a change was made in grub to accommodate the new kernel method; in 10.2 grub is 97.40 and in 10.3 it is 97.82. For sure, when grub is installed from the OS it uses the kernel for its drive identification.

If the above is correct, I’m not sure there is a solution. But . . . While grub uses the kernel when installed from a running system, it does not when run independently of the OS from its shell and hence will find/reference the disks differently (using the bios map). There is an outside chance that you may be able to do what you want booting from a grub boot floppy with its own menu.lst. This is just a guess, so take it will a very large grain of salt.

Thanks for the response, I suspecy your theory is correct - I also
tried creating a new ext3 partition, copied the older kernel, custom
device.map, etc… still no go.

I guess I’m not clear about exactly where the difference is happening,
since device.map shows:

(fd0) /dev/fd0
(hd0) /dev/hda
(hd1) /dev/hdb
I suppose it does not know how to find /dev/hda

I’ve played around with a GRUB floppy, created on another 10.2 opensuse
system running the kernel i want, still no go.

I’m now onto copying a bzImage and boot from a completely different
floppy, if anyone’s interested will post if i get it working.

Best regards,

mingus725 wrote:
> I suspect that the problem is a very significant change that was made
> between those kernel versions. You see the symptom in the hda vs sda
> naming convention; only optical drives continue to be named with an “h”.
> The 10.3 kernel implemented an enhanced libata to handle all drives
> SATA and PATA through scsi emulation. Not longer thereafter the default
> drive referencing nomenclature changed from disk-name (e.g., sda) to
> disk-by-id (disk/partitioner number; optionally also by label or UUID)
> which are persistent, in recognition of the portability of SATA devices
> with which the user can easily change the drive sequencing. The grub
> implementation in device.map and menu.lst changed accordingly. This
> suggests a change was made in grub to accommodate the new kernel method;
> in 10.2 grub is 97.40 and in 10.3 it is 97.82. For sure, when grub is
> installed from the OS it uses the kernel for its drive identification.
>
> If the above is correct, I’m not sure there is a solution. But . . .
> While grub uses the kernel when installed from a running system, it does
> not when run independently of the OS from its shell and hence will
> find/reference the disks differently (using the bios map). There is an
> outside chance that you may be able to do what you want booting from a
> grub boot floppy with its own menu.lst. This is just a guess, so take
> it will a very large grain of salt.
>
>

The method of checking grub’s behavior independently with a floppy may depend on not including a device.map and menu.lst with it, thus forcing it to the bios map.

I am more inclined to suspect that grub was changed to accomodate the kernel change described previously, in which case you might get different behavior between a floppy created with 10.2’s 97.40 vs 10.3’s 97.82.

Another approach: Install grub in the root partition of each instance from within that instance. Then chainload to each from the master boot. You could do this with the floppy, either by breaking out of the menu (the Escape key) or hitting the ‘c’ key to drop to the shell (if you aren’t already in it); do a rootnoverify on the root partition and then “chainloader +1” to call the boot sector.