after upgrade from suse 11.0 to 11.1 grub error 28

Hi,

I have the following problem after upgrade from open Suse 11.0 to 11.1 I get a strange problem

I can only boot the system with installation dvd and an new install (upgrade). I get only grub error 28 Selectet item cannot fit into memory
After hitting return i see some escape characters

Any help is welcome !
By the way reinstall wont work I tried it several times as well as repairing the boot sector from dvd ( why the heck opensuse always tries to repair the mbr so I have to fix my windows afterwards)

Environment :

Thinkpad t60

windows on disk1 linux on usb disk

/dev/sdb2 is root directory (xfs)
/dev/sdb1 is swap
/dev/sdb3 is /tmp (ext2)

inux:~ # fdisk -l

Disk /dev/sda: 80.0 GB, 80026361856 bytes
240 heads, 63 sectors/track, 10337 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Disk identifier: 0xb7b9ae60

Device Boot Start End Blocks Id System
/dev/sda1 * 1 10337 78147688+ 7 HPFS/NTFS

Disk /dev/sdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x44fdfe06

Device Boot Start End Blocks Id System
/dev/sdb1 1 523 4200966 82 Linux swap / Solaris
/dev/sdb2 * 524 9139 69208020 83 Linux
/dev/sdb3 9140 9729 4739175 83 Linux

menu.lst:

Modified by YaST2. Last modification on Mo Jan 12 19:45:13 CET 2009

default 0
timeout 8
gfxmenu (hd1,1)/boot/message

###Don’t change this comment - YaST2 identifier: Original name: linux###
title openSUSE 11.1
root (hd1,1)
kernel /boot/vmlinuz-2.6.27.7-9-pae root=/dev/disk/by-id/usb-WD_800BEVSExternal_575845373036373533343338-0:0-part
2 resume=/dev/disk/by-id/usb-WD_800BEVSExternal_575845373036373533343338-0:0-part1 splash=silent showopts vga=0x31a
initrd /boot/initrd-2.6.27.7-9-pae

###Don’t change this comment - YaST2 identifier: Original name: failsafe###
title Failsafe – openSUSE 11.1
root (hd1,1)
kernel /boot/vmlinuz-2.6.27.7-9-pae root=/dev/disk/by-id/usb-WD_800BEVSExternal_575845373036373533343338-0:0-part
2 showopts ide=nodma apm=off noresume nosmp maxcpus=0 edd=off powersaved=off nohz=off highres=off processor.max_cstat
e=1 x11failsafe vga=0x31a
initrd /boot/initrd-2.6.27.7-9-pae

device.map
(hd0) /dev/disk/by-id/ata-HTS541080G9SA00_MPBDPAXNJ14MRG
(hd1) /dev/disk/by-id/usb-WD_800BEVSExternal_575845373036373533343338-0:0. Grub stops in stage 1 with error 28 and some escape chars.

There is a known, documented issue with using xfs for the boot partition with grub. Worth checking into.

Do you have the bios set to boot from the external?

How specifically did you attempt to repair the boot sector, and which boot sector?

Hi thanks for your reply,
.
at least with openSuse 11.0 it worked with xfs.

In my bios setting i boot first from cd/dvd 2nd from usb and 3rd from disk. This setting worked before.

maybe the following output gives u some information:
linux:~ # for i in $(awk ‘/[0-9]/{print $4}’ /proc/partitions); do file -s /dev/$i ; done
/dev/sda: x86 boot sector; partition 1: ID=0x7, active, starthead 1, startsector 63, 156295377 sectors
/dev/sda1: x86 boot sector
/dev/sdb: x86 boot sector; partition 1: ID=0x82, starthead 1, startsector 63, 8401932 sectors; partition 2: ID=0x83, active, starthead 0, startsector 8401995, 138416040 sectors; partition 3: ID=0x83, starthead 254, startsector 146818035, 9478350 sectors
/dev/sdb1: Linux/i386 swap file (new style) 1 (4K pages) size 1050240 pages
/dev/sdb2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
/dev/sdb3: Linux rev 1.0 ext2 filesystem data (mounted or unclean) (large files)

I tried to repair the stuff with yast->system-> bootloader

bootloader installation -> user defined boot partion /dev/sdb2 as well as booting from root partion (by default the update used the mbr of my fixed disk ( which i had to repair afterwards to make windows work again)

as well i tried the following:
grub-install --no-floppy /dev/sdb2
grub-install --no-floppy /dev/sdb2

grub> root (hd1,1)
grub> setup (hd1)
grub> quit

reboot

without success

First, please do check further into the xfs issue. IIRC it depends on how/where grub is installed, and may not be consistent. I had thought that openSUSE would not install grub to an xfs partition, so the boot loader setup may have been different in order to avoid the problem. That may be why grub was installed every time to the MBR. If you have a backup from before upgrading, these files would be helpful:

/etc/grub.conf
/boot/grub/device.map
/boot/grub/menu.lst

Note that the “grub-install” script in openSUSE is not the same as in other distros, which is the vanilla script which comes with grub. SuSE’s grub-install just calls /etc/grub.conf from the grub shell. That file will show you how YaST actually tried to install grub. The vanilla grub-install in openSUSE is named grub-install.unsupported - but I wouldn’t use it; the shell is much more dependable.

In your last post, you look like you are trying to install grub to the MBR. Look at /boot/grub/device.map and be sure the correct disk is being referenced for (hd1). If that is correct, the grub shell code I would use would be:

grub> root (hd1,1)
grub> setup (hd1) (hd1,1)
grub> quit

That puts grub in the (hd1) MBR with a pointer to find its stage2 loader in (hd1,1). The shell should report back to you what it was able to do.

Hi,

here is my grub.conf
setup --stage2=/boot/grub/stage2 --force-lba (hd1,1) (hd1,1)
quit

linux:/etc # grub

GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub> root (hd1,1)
root (hd1,1)
Filesystem type is xfs, partition type 0x83
grub> setup (hd1) (hd1,1)
setup (hd1) (hd1,1)
Checking if “/boot/grub/stage1” exists… yes
Checking if “/boot/grub/stage2” exists… yes
Checking if “/boot/grub/xfs_stage1_5” exists… yes
Running “embed /boot/grub/xfs_stage1_5 (hd1)”… 19 sectors are embedded.
succeeded
Running “install /boot/grub/stage1 (hd1) (hd1)1+19 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst”… succeeded
Done.
grub>

the device map shows hd1 is my usb disk:
device.map
(hd0) /dev/disk/by-id/ata-HTS541080G9SA00_MPBDPAXNJ14MRG
(hd1) /dev/disk/by-id/usb-WD_800BEVSExternal_575845373036373533343338-0:0.

so I try now if the system boots.

again it did not work. I dont understand why he shows me escape characters and not an error message like error 22 or so. Again with openSuse 11.0 it worked, i had only to change the menu.lst. Searching on the Internet. The grub documentation says in Section 1,3 that xfs is a supported file system.

Sorry, but you mis-understand regarding xfs. Technically, yes, grub does support the xfs file system, meaning that is can read xfs. The xfs grub driver is in /boot/grub. But look here Re: [opensuse-factory] XFS Boot Problem. On each screen, click “Next” to follow the chain of emails (it is long). The most important to your situation are these quotes:

You always need to write at least the block numbers of filesystem driver to stage1 so that you are able to load it. XFS does not have a space in boot sector for any booting code. This makes impossible to have a system with /boot on XFS boot other way than installing to an unrelated boot sector (if there is any available partition - really don’t recommend it) or to MBR.

  • If there is no separate /boot partition and / is xfs
  • grub is in MBR –> Bad (might work on ocassion)
  • grub is in / –> Bad.
  • If there is a separate /boot partition (recommended ext2)
    and / is xfs
  • grub is in MBR –> OK.
  • grub is in /boot –> OK.
  • grub is in / –> Bad.
  • If any non / partition is xfs (and thus, does not hold grub) –> OK.

My summary: If you install grub stage1 in an xfs partition boot sector, it will fail. If you install grub stage1 in the MBR with a pointer to grub stage2 residing in an xfs partition, then at the minimum you must write the block numbers of the filesystem driver to stage1 so that you are able to load it. This can only be done with the grub “install” command (which is the back-end to the “setup” command you used). But this second method may still fail, because of other differences in xfs.

Note this from your last grub install attempt:

Running "embed /boot/grub/xfs_stage1_5 (hd1)"... 19 sectors are embedded... succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+19 p (hd1,1)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded

Here grub is attempting to do exactly the second method described above. Stage1 goes to the MBR, embedded with it is xfs_stage1_5 which enables grub to read the xfs file system. But at boot it fails with a few escape characters, which indicates that it is unable to read the sda2 filesystem to find stage2. The grub stage1/xfs_stage1_5 must be able to read the BPB (partition bios block) in the sda2 boot sector; this gives the partition’s geometries. And this is where the fundamental problem is, and the cause is apparently inconsistent. At the beginning of the thread linked above is this:

I had /boot (or / in case of no extra /boot) on XFS for what must have been two years, too, and can confirm you’re just lucky. As I was during most of those two years.

My experience matches Stano’s statement: You may be lucky, you may be not – ultimately it’s going to hit, so just don’t do it.

This should solve your problem:

  1. Shrink sda3 /home partition by size you have for swap
  2. Create sda4 as an extended primary using the same size
  3. Create sda5 as a logical partition using all the space in sda4
  4. Change mount point in /etc/fstab for swap to sda5
  5. Reformat sda1 as a ext3 partition
  6. Copy contents of /boot to sda1
  7. Add mount point in /etc/fstab for sda1 at /boot
  8. Change /boot/grub/menu.lst as necessary for /boot being on a separate partition (basically, remove “/boot” from the lines).
  9. Install grub to the MBR pointing to sda1 for boot.

Of course, there are other detail steps needed to do the above. If you need any help with those steps, just ask.

These links may also be of interest: Bootloader/Scenarios - openSUSE and Bugs/grub - openSUSE

Hi ,

thx for your support, unfortunately xfs has no capability to shrink the file system , I tried a new install of suse 11.1 over the update. During the reinstall I changed the tmp mount-point to the boot mount-point (ext2) which worked.

Afterwards I had onyl to corect the user and groups for my oracle and db2 stuff and everything is now in place again.

A lot of thx to mingus explaining th whole stuff.

I did not realize the xfs could not be shrank (shrinked? shrunk?). Nor that your sdb3 was for /tmp - should of realized your system is a server. Sorry I missed those details.

In any event, glad you back up and running. And, you’re welcome, happy to have been of some help. :slight_smile: