Unable to re-load grub following Windows 7 SP1 Upgrade on Dual-Boot

Hi,

I’m hoping someone can help me resolve an issue on my dual-boot Win 7/Opensuse 11.2 PC.

A few days ago I went to perform the Service Pack 1 Upgrade for Win 7. This crashed out with an error. On researching the problem I found a solution to fix the problem by marking the Windows partition as active. I did this (via Computer Mgmt -> Disk Mgmt). This allowed the SP1 upgrade to work, however on reboot I got an error BOOTMGR missing. This I rather rashly resolved by using the Windows 7 install DVD in Recovery mode to reinstall the Windows Boot manager via bootrec /Fixboot I thought I would then be able to use the Opensuse 11.2 install disk to fix grub.

I use the Opensuse install disk and select Repair system -> Expert Mode -> Install New Boot Loader then select Other -> Reread Configuration from Disk. This adds Win 7 back into the grub menu. I then select OK and get the message “the bootloader was installed successfully”. The problem then comes when I click my way through OK and Next to finish the install. At the end of the process I get the message “An error occurred during the installation” and I’m no further forward.

I would really appreciate some help with this problem. FYI the PC has a single SATA disk installed partitioned as follows:

dev/sda1 100Mb Win System Parkition
dev/sda2 Windows NTFS
dev/sda3 Windows FAT
dev/sda4 extended partition
dev/sda5 linux-swap
dev/sda6 ext4 /
dev/sda7 ext4 /home

Many Thanks,
PhilG

Are you using a generic boot record in the MBR? Seem like the origianl install might have. If so did you reset the boot flag?

Do you want Grub back? Because it would be very simple to just use the Windows Boot loader.
If you do want Grub, good luck: Linux Doesn’t Boot
Scroll down to my post. That should work.

IMO, installing Grub in the MBR - as suggested in the post above - is a hack, not a solution, meaning it’s going to solve the issue and allow you to boot Linux or Windows, but it is not going to restore the boot situation as it was before you perform the service Pack 1 upgrade - if you didn’t have Grub previously in MBR, as I suspect.

What you should do is reset the bootflag, as gogalthorp recommended. There are several ways to do it, either in Windows with the command diskpart, or from a Linux live system with fdisk or gparted (I guess), or using findgrub -a or** updategrub -a** available from my repo (see this post updategrub for openSUSE Legacy Grub (not update-grub!) ).

findgrub and updategrub are safer, because these commands will look for Grub before setting the bootflag on the partition. However you have to install this package first. If we can assume that Grub is on your extended partition (sda4) , the diskpart method is explained in this post: Windows and openSuse 11.4 dual boot problem. But you have to make sure that you activate the right partition (do list partition first to find out the number of the extended one). The fdisk method is described here: Windows and openSuse 11.4 dual boot problem.

If you remember that you installed Grub in the MBR or if you don’t care, you can follow bsilvereagle’s suggestion.

Hi All,

Many thanks for your help so far. It may take me a little while to test your answers since its a busy weekend for me on other stuff. Regarding your answers I’ve no idea if I installed grub on the MBR - from memory I just accepted the Opensuse defaults, however just to clarify things I booted on an opensuse 11.3 disk which allowed me to run grub interactively from the command prompt. I then typed find /boot/grub/menu.lst and that came back with (hd0,5).

Question: Does this make it any clearer what I need to do next, otherwise I’m going to grab a live disto and try findgrub?

Best Wishes,
PhilG

That’s what I thought. Then it has not been installed in MBR but in the bootsector of the extended partition.

It means that the second part of Grub, called ‘stage2’ is installed in sda6 - which is (hd0,5) in Grub notation. What you need is to set the bootflag of the partition containing the Grub bootloader, also called ‘stage1’. This has to be sda4 - or (hd0,3) - because it is the only possibility according to your partition setup.

IMHO it is clear. But to be absolutely sure, you can run findgrub. If it doesn’t find any Grub, it will mean it was in MBR (but I doubt it, as it wouldn’t be openSUSE’s default). If it says, it is in the extended partition, rund findgrub -a to activate this partition and you should see the Grub menu at the next reboot.

Isn’t anything that solves a problem by definition a solution? :wink:
I suppose resetting the flag is the “proper” solution.

Anything that solves a problem by changing the default or expected behaviour is by definition a hack. Notice that I didn’t say it was necessary bad. I just explained the differences. When you lose the bootflag, the “proper” solution is indeed to reset the bootflag, not to replace the boot code.

Btw when you install Grub in MBR, you’re not only writing the first sector of the disk but also the 17 directly following sectors (24 in ArchLinux ; 26 in Fedora). Windows is not supposed to use this area and IMO Windows software is not welcome here … but Windows occasionally likes to do things that other decent operating systems wouldn’t dare to do.

OK,

Just to close this thread. The solution was easier than I thought. I booted a gParted disk and reset the boot flag to the extended partition dev/sda4 (-> Manage Partitions → Manage Flags in gParted speak). I just wish I understood more of the boot process…

Again many thanks for the help from all contributors here

Phil g