Grub error 21

Hi I recently decided to try out opensuse, however I wanted to keep vista on my laptop, for the moment anyway.
I installed opensuse 11.2 64bit on my external hard drive with the idea that this way the two OS would be completely seperate and I could just use suse when I felt like it.
Everything boots fine for both OS when the hard driv is plugged in but when it is unplugged I can’t get past a boot screen which says:
Grub loading stage 1.5
Error 21
I have seen on another forum a fix using the windows install disk but I no longer have this.
Is there some other fix I can use to make my laptop portable again.
Thanks

You installed the bootloader files on the external hdd, while the bootloader itself is in the MBR of the internal hdd. Boot openSUSE, use Yast to reinstal the bootloader, make sure you install the bootloader on the internal hdd. If you overwrite the MBR with a VISTA disk, your openSUSE will become unbootable as it is now.

Edit: changed some lines

Okay thanks will try that now.

I’m in yast 2 at bootloader settings do I want to go through other, start from scratch.

Done some thinking. What you want is this, please correct me if I’m wrong:

  • USB disk not connected: direct boot in Win
  • USB connected: GRUB, choice between openSUSE and Win

The system does not boot in Win, when USB is disconnected
The system boots in Win, through GRUB when USB is connected

This would mean the MBR on the internal hdd is borked. That would have to be fixed from VISTA

It also means that now the part of the bootloader that points to the bootloader’s files is located in the MBR of the internal one, where it should be on the external hdd.

Hope you’re waiting for this right now, I’ll be here for a bit more than an hour from what it looks like.

When in the bootloader (missed that reply) leave all as is, except for where the bootloader is to be installed, this needs to be changed from the internal disk, to the external. Please open a terminal window and do:


fdisk -l
cat /etc/fstab
mount

Post the ouput here.

yes that’s what I’m trying for.

Here is the code

linux-r213:~ # fdisk -l

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x2e3e2e3e                     

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       28948   232522720+   7  HPFS/NTFS
/dev/sda2           28948       30401    11672576    7  HPFS/NTFS

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x414e0b46

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  82  Linux swap / Solaris
/dev/sdb2             263        2873    20972857+  83  Linux
/dev/sdb3            2874       60801   465306660   83  Linux
linux-r213:~ # cat /etc/fstab
/dev/disk/by-id/usb-ST350041_8AS_FF3500418A0000000000005FF9FFBF-0:0-part1 swap                 swap       defaults              0 0
/dev/disk/by-id/usb-ST350041_8AS_FF3500418A0000000000005FF9FFBF-0:0-part2 /                    ext4       acl,user_xattr        1 1
/dev/disk/by-id/usb-ST350041_8AS_FF3500418A0000000000005FF9FFBF-0:0-part3 /home                ext4       acl,user_xattr        1 2
/dev/disk/by-id/ata-Hitachi_HTS543225L9A300_080731FB0E00LKG9AH0A-part1 /windows/C           ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=en_US.UTF-8 0 0
/dev/disk/by-id/ata-Hitachi_HTS543225L9A300_080731FB0E00LKG9AH0A-part2 /windows/D           ntfs-3g    users,gid=users,fmask=133,dmask=022,locale=en_US.UTF-8 0 0
proc                 /proc                proc       defaults              0 0
sysfs                /sys                 sysfs      noauto                0 0
debugfs              /sys/kernel/debug    debugfs    noauto                0 0
usbfs                /proc/bus/usb        usbfs      noauto                0 0
devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
linux-r213:~ # mount
/dev/sdb2 on / type ext4 (rw,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
debugfs on /sys/kernel/debug type debugfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/sdb3 on /home type ext4 (rw,acl,user_xattr)
/dev/sda1 on /windows/C type fuseblk (rw,noexec,nosuid,nodev,allow_other,default_permissions,blksize=4096)
/dev/sda2 on /windows/D type fuseblk (rw,noexec,nosuid,nodev,allow_other,default_permissions,blksize=4096)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
securityfs on /sys/kernel/security type securityfs (rw)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
linux-r213:~ #

Cheers for the output.

You need to install the bootloader on /dev/sdb2 or /dev/sdb (in MBR). The MBR from the internal hdd has to be fixed from Vista. Then at boot you would have to choose from which device you want to boot.
You could also think of creating a small boot partition on your internal hdd, and mount your /boot there.

One thing I notice, are you doing all this as root ?

Sorry I can’t see where to change from external to internal in yast. I have a choice of tick boxes boot from mbr (currently ticked), boot from root partition and custom boot partition. I can’t see any installation or choice for hard drives.
I don’t know what you mean as root.

I see the promt in your terminal, it’s a “#”, which only root has. Or…are you running openSUSE from a LiveCD image on an USB disk? No, then there would be no GRUB on the internal.

You should pick ‘custom boot partition’ /dev/sdb2

Like I said I don’t really know what root is, currently I’m running open suse off a usb external hard drive. To get the code i went system - terminal - superuser mode then typed in the code.
Do I want to uncheck boot from mbr now that custom boot is selected.

Superusermode: that says it.

I do think that you could do with a bit more understanding of what linux/openSUSE is. On the front page there’s NEW Users - Suse-11.2 Pre-installation – PLEASE READ - openSUSE Forums

Yep, uncheck ‘boot from MBR’. Then reboot, with USB connected, and fix the MBR from Vista.

Okay thanks, could you elaborate on fixing the mbr from vista I’ve done a search and most solutions seem to require the installation disk.

There is a standalone recovery disk created by Microsoft, but it is difficult to find. You can get it here:

Windows Vista Recovery Disc Download — The NeoSmart Files

There are two methods, the automated and the manual (from a command window). Usually the automated method works when only the MBR code is being restored (whereas rebuilding the boot sector often requires the manual mode). Since Vista is rather unfriendly in this area, I recommend first checking the article(s) in the Microsoft KB (Knowledge Base) regarding how to do this manually. It’s not that it’s difficult to do, just a good idea to have a backup procedure.

A comment in regard to your original problem: If @Knurpht’s solution does not work (it probably will, but I have seen issues before on a removable external with having the grub stage 1 pointer in its MBR), then alternatively you can, in addition to installing to sdb2, under Boot Loader Options check “write generic code to MBR”. This will result in Windows code being written the MBR instead which will hand-off to grub code in the sdb2 boot sector.

Finally, there is yet another method to consider: Neosmart also offers a Vista boot loader manager application, and it works very well. You could install it and use it to have the Vista boot loader call the grub boot loader on the external. This method would not require changing the boot order on the laptop when the external is attached; you would always be initiating the boot process from the internal drive starting with Vista. The tutorial is good. All you need to do before the set up in Neosmart is to install grub to sdb2. Just fwiw.

An afterthought . . . when you install grub to sdb2, click on “Boot Loader Installation Details” where you will see the disk boot sequence. Be sure that the external disk precedes (in the list, is above) the internal disk; if it isn’t, change it to be so. You probably also want to go into the bios and change the boot order there to have the external disk selected first (a modern bios should go to the next disk in the list if the first is not found, i.e., if the external is not attached the bios will go to the internal). Also note that if you use the Vista boot loader (via the Neosmart tool) you would still check the boot sequence in YaST, but will not need to go into the bios. Good luck.