Grub2 refuses to boot Windows 7
Greetings,
For the past week and a half I've been trying to get Grub2 to boot Windows 7 with no luck. Selecting the Win7 menu item causes the machine to reboot and relaunch Grub. Grub is able to find windows 7 and make an entry via os-prober. My internet search has been very inconclusive to a solution and none work, the results are the same. I did come across that there is a possible bug and updating Grub 1.98 to 2.00 may fix the problem, but I'm not sure of the implications changing to a new version and the work-around is the same code (menu entry) generated by grub-update. There also seems to be confusion between grub and grub2, i.e. chainloader and ntldr and answers labeled as a fix don't work on this install. Another fix is to use the Win7 boot manager but I trying not to be dependent MS products. General info: Debian 6.0.6 --- fdisk -l Device Boot Start End Blocks Id System /dev/sda1 * 1 32 248832 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 32 24793 198896641 5 Extended /dev/sda5 32 24793 198896640 8e Linux LVM Device Boot Start End Blocks Id System /dev/sdb1 * 1 13 102400 7 HPFS/NTFS Partition 1 does not end on cylinder boundary. /dev/sdb2 13 5100 40857600 7 HPFS/NTFS --- grub-install -v grub-install (GRUB) 1.98+20100804-14+squeeze1 --- Grub menu entry: menuentry "Windows 7 (loader) (on /dev/sdb1)" { insmod part_msdos insmod ntfs set root='(hd1,msdos1)' search --no-floppy --fs-uuid --set f2a89d67a89d2b5d chainloader +1 } Currently, to get the machine to boot Win7 is to pull the cable on the Linux HD but that really is a bit crude. Any suggestions would be most grateful. Cheers. |
The problem is that windows is on the second drive and needs to be mapped so that windows "thinks" it is on the first drive. Take a look at the first 2 posts at the link below in which a solution is achieved. Reading all the posts will give you some more useful information:
http://forums.justlinux.com/showthre...mapping-drives |
Install grub2 again clearing whatever mapping it had:
Code:
grub-install --recheck /dev/sda Code:
update-grub Code:
menuentry "Windows 7 (loader) (on /dev/sdb1)" { |
maybe it is better to stop using win7 in the first place.
I did it. did you try lilo?? |
Thanks for looking.
malekmustaq and yancek, When I first saw mapdrive -s some time last week I thought is was a revelation. Unfortunately is doesn't work. I tried it again to be sure. --- ### BEGIN /etc/grub.d/30_os-prober ### menuentry "Windows 7 (loader) (on /dev/sdb1)" { insmod part_msdos insmod ntfs set root='(hd1,msdos1)' drivemap -s hd0 hd1 search --no-floppy --fs-uuid --set f2a89d67a89d2b5d chainloader +1 } ### END /etc/grub.d/30_os-prober ### And trying to follow the logic, I also tried this: menuentry "Windows 7 (loader) (on /dev/sdb1)" { insmod part_msdos insmod ntfs drivemap -s hd0 hd1 set root='(hd0,msdos1)' search --no-floppy --fs-uuid --set f2a89d67a89d2b5d chainloader +1 } The drives are swapped therefore point to the first partition on the first drive. No go. Here are the results on the grub-install # grub-install --recheck /dev/sda Installation finished. No error reported. # grub-install --recheck /dev/sdb Installation finished. No error reported. And jheengut; My intention is to distance myself from MS and when Steam fully supports LINUX, I'll be that much closer. Also AMD/Radeon say they are supporting video drivers for LINUX but they are not very good. Cheers |
Check to see if the uuid you have is correct for windows sdb1 (f2a89d67a89d2b5d) by running this command: blkid. I'm not sure if case sensitivity is necessary but that would be something to check easily. If the blkid shows uppercase letters, change the uuid entry.
You could try commenting out the "search" line by putting a hash mark (#) at the beginning of the line. I don't believe it is needed to chainload. After making the changes, reboot without running update-grub to see if it works. If it does, copy the entry to the /etc/grub.d/40_custom file, save it and run update-grub again. If it fails, note and messages or errors and post. You could go to the site below and download/run the bootinfoscript and review its output, a results.txt file to see if that helps. You could also post it here. http://sourceforge.net/projects/bootinfoscript/ |
After editing /boot/grub/grub.cfg do not run either grub-install or update-grub, reboot directly. What is your current "cat"ting of your grub.cfg? Please provide us after failing to boot.
Try swapping the hd0 and hd1 at the drivemap, the chainloader might have confused a bit, try it this way-- Code:
### BEGIN /etc/grub.d/30_os-prober ### HOpe that helps. Good luck. |
Greetings again
So I have tried several of the suggestions, but no joy yet. As to the drivemap command, drivemap -s hd0 hd1 is equivalent to map hd0 hd1 map hd1 hd0, but map is no longer supported. I tried drivemap -s hd1 hd0 anyway and still no luck. Other things I have tried with no luck: Both OS on one (first) HD; Both on one drive with the Win7 and 100MB partition removed; Installed Ubuntu instead of Debian. Ubuntu was able to find Win7 but grub still was unable to boot it. I did come across this in the Grub 2.00 Manual, and several other places: menuentry "Windows 7" { insmod ntfs search --set=root --label WINDOWS_7 --hint hd0,msdos2 ntldr /bootmgr } The file ntldr.mod is not available in Grub2 v1.98, but it is in Grub2 v2.00 and Debian experimental packages (grub-pc-bin (2.00-7)). How do you go about in doing just an upgrade to grub? It appears to need grub-pc, but that is only available at v1.98. Cheers |
You could post the output of the bootinfoscript I suggested several days ago.
|
GRUB2 menu entry in my system looks like this:
menuentry "Windows 7 (loader) (on /dev/sda2)" --class windows --class os { insmod part_msdos insmod ntfs set root='(hd0,msdos2)' search --no-floppy --fs-uuid --set=root 0EC08012C07FFDE9 chainloader +1 } In your GRUB2 entry, "root" keyword is missing as well as "--class windows --class os". Not sure whether these will be really needed. Also, you could run "os-prober" as administrator in Terminal followed by "update-grub" just to make sure that entries are correctly added. Post the output of bootinfoscript downloaded from sourceforge.net. This script will generate a Result file in the directory on which it is run. |
Are you sure the problem is not the windows bootloader?
Can you boot it from another boot manager? (Super-grub-disk or others on ubcd or such). |
menuentry "Windows 7 (loader) (on /dev/sdb1)" {
insmod ntfs set root=(hd1,1) drivemap -s (hd0) ($root) chainloader +1 } Omit this entry: "search --no-floppy --fs-uuid --set=root 0EC08012C07FFDE9" it will load by specifying partition only set root to your partition: set root=(hd1,1) then swap drives !!!very important!!!: drivemap -s (hd0) (hd1,1) <-- please note this is your partition not just whole hd1 !!! chainload +1 or you can use: ntldr/bootmgr |
If you're booting from two separate hard drives you technically don't need to manage them with Grub.
There is a hotkey that will allow boot device selection, usually ESC. Just install the bootloader as normal on your Linux drive and when you need to switch just tap ESC at boot and select your drive that way. It's not what you might be wanting but it's an easy solution. |
All times are GMT -5. The time now is 12:57 PM. |