PDA

View Full Version : [ubuntu] Cant boot Win 7 after Ubuntu 10.10 x64 install!



markjs
November 2nd, 2011, 05:09 PM
This is the second request for help; the first was probably in a wrong forum but can be found here (http://ubuntuforums.org/showthread.php?p=11416640#post11416640) for further clarification of the problem.

Basically I have a separate hard disk for both Ubuntu 11.10 x64 and Windows 7 x64, and I want the Windows drive left intact, as it was installed first and I like the luxury of not have boot issues with more than one OS should problems arise. I want Grub2 local on the Ubuntu disk, and Windows drive to boot (if you make it primary in BIOS) as if Ubuntu didn't exist on the machine. Windows worked that way before I installed Ubuntu, and it still does post Ubuntu install.

The problem is, no matter what I do, when booting from the Ubuntu hard disk if I choose the Windows menu entry I just get a black screen and a blinking cursor, and it won't respond to anything but a hard reboot with the power button. I think it's a Grub2 issue, but I am not 100% on that.

I am foggy on all the bit about where Windows puts it's boot info, but I think for some reason it didn't do the usual thing where it reserves a small "system reserved" partition for it's boot files. As far as I can tell , it's all on one partition, and the drive itself just has the one partition on it.

The Ubuntu drive has a small partition for Ubuntu a swap partition and an NTFS partition. I have another drive but it seems to be of no consequence to the problem. Attached is a screenshot of MiniTool's partition info.

This is my /boot/grub/grub.cfg file:


#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
set have_grubenv=true
load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi

function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}

function recordfail {
set recordfail=1
if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}

function load_video {
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
}

insmod part_gpt
insmod ext2
set root='(hd1,gpt1)'
search --no-floppy --fs-uuid --set=root 8d7c4b6f-371a-48b1-a9e9-8792e8dc9986
if loadfont /usr/share/grub/unicode.pf2 ; then
set gfxmode=auto
load_video
insmod gfxterm
insmod part_gpt
insmod ext2
set root='(hd1,gpt1)'
search --no-floppy --fs-uuid --set=root 8d7c4b6f-371a-48b1-a9e9-8792e8dc9986
set locale_dir=($root)/boot/grub/locale
set lang=en_US
insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 44,0,30; then
clear
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
if [ ${recordfail} != 1 ]; then
if [ -e ${prefix}/gfxblacklist.txt ]; then
if hwmatch ${prefix}/gfxblacklist.txt 3; then
if [ ${match} = 0 ]; then
set linux_gfx_mode=keep
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=text
fi
else
set linux_gfx_mode=keep
fi
else
set linux_gfx_mode=text
fi
export linux_gfx_mode
if [ "$linux_gfx_mode" != "text" ]; then load_video; fi
menuentry 'Ubuntu, with Linux 3.0.0-12-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd1,gpt1)'
search --no-floppy --fs-uuid --set=root 8d7c4b6f-371a-48b1-a9e9-8792e8dc9986
linux /boot/vmlinuz-3.0.0-12-generic root=UUID=8d7c4b6f-371a-48b1-a9e9-8792e8dc9986 ro quiet splash vt.handoff=7
initrd /boot/initrd.img-3.0.0-12-generic
}
menuentry 'Ubuntu, with Linux 3.0.0-12-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd1,gpt1)'
search --no-floppy --fs-uuid --set=root 8d7c4b6f-371a-48b1-a9e9-8792e8dc9986
echo 'Loading Linux 3.0.0-12-generic ...'
linux /boot/vmlinuz-3.0.0-12-generic root=UUID=8d7c4b6f-371a-48b1-a9e9-8792e8dc9986 ro recovery nomodeset
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-3.0.0-12-generic
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
insmod part_gpt
insmod ext2
set root='(hd1,gpt1)'
search --no-floppy --fs-uuid --set=root 8d7c4b6f-371a-48b1-a9e9-8792e8dc9986
linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
insmod part_gpt
insmod ext2
set root='(hd1,gpt1)'
search --no-floppy --fs-uuid --set=root 8d7c4b6f-371a-48b1-a9e9-8792e8dc9986
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 96161BAD161B8D7D
chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

I am sure this is a simple problem, probably with a simple fix, but the few folks who've been kind enough to help thus far, and I myself have overlooked something, or I've not given clear and complete info or a combination of these factors. Any help, helpful or not is appreciated, and I apologize for being a bit testy in the last thread, it's just sometimes hard to make one's self clear enough for the casual reader to understand.

Mark Phelps
November 2nd, 2011, 07:31 PM
Hey ... I understand your frustration, really. And, I sympathize with your not wanting to corrupt the Windows drive -- as I have operated EXACTLY the same way ever since I started using Ubuntu back in the 7.10 days.

And, I will readily admit that I am not anywhere near the expert boot practitioner that oldfred is (and others, I've failed to mention).

That said, if I had to guess (and I do) I would guess the following:
1) Windows was on sda when you installed it -- because it was the ONLY drive.
2) When you boot from another drive, THAT drive (presuming it's a SATA connection) NOW becomes sda by default (I think this is right -- someone correct me if I'm wrong). This is what you're doing when you have more than one drive connected and you're booting from the Ubuntu drive.
3) This implies, with multiple drives connected, that Windows can NO LONGER be on sda, but now, is on sdb, sdc, ....
4) Since what you posted STILL shows Win7 on sda, booting to that will NOT work.

What SHOULD happen is:
1) You boot into Ubuntu with all the drives connected
2) You run "sudo update-grub" from a terminal
3) os_prober FINDS Win7 and updates the GRUB config file -- to something like sdb, or sdc , or ...
4) When you then reboot, you can NOW boot into Win7 -- because GRUB is now pointing to the correct drive.

On my PC, with four drives, Win7 is either sdj or sdl (lowercase L, not a one) -- and, oddly, this changes from time to time even though I don't actually change the drives.

OK ... that's my best guess. If others know better, please correct where I guessed wrong.

NOTE: This approach will not mess with the Windows drive in any way; it only updates GRUB on one of the other drivers.

markjs
November 2nd, 2011, 07:34 PM
OK, I discovered the problem, whatever it was just about had to have been with Windows 7 itself. I still have no idea what exactly happened (though I have suspicions and somewhat educted guesses), but I'd love if anyone could explain it so if I ever set up a similar system I can get it right the first time?

Like I say, don't know what it was, but I do know what fixed it. I had to install EasyBCD in Windows, then I had to have it write (or re-write?) the Windows 7 bootloader to the MBR. Obviously since it would boot as a standalone, it had a bootloader somewhere, but I surmise it was in such a place as Grub2 could not point to. I'm guessing that the bootloader was not in the MBR perhaps? I don't know enough about bootloaders and partitioning though to really "get it" and say what happened with any certainty.

Anyway, I really dislike EasyBCD, at least in that it is very difficult to figure out with regard to non Windows OSs on separate physical drives; in fact it seems info regarding the ins and outs of using bootloaders with multiple drives is scant and hard to come by (at least most of what I found only applied to single drive setups). You can tell EasyBCD where something is, ONLY if that drive has a Windows assigned drive letter, so far as I can tell because try as I might I could not get it to point to Grub2 and boot Linux. If it had had a legacy version of Grub, the option was there to tell it specifically where the Linux install was, but it greyed out the option if Grub2 was selected saying it would automatically sort itself out, which I am assuming it could do ONLY if Grub and all OSs were in partitions all on a single drive.

markjs
November 2nd, 2011, 08:21 PM
Hey ... I understand your frustration, really. And, I sympathize with your not wanting to corrupt the Windows drive -- as I have operated EXACTLY the same way ever since I started using Ubuntu back in the 7.10 days.

And, I will readily admit that I am not anywhere near the expert boot practitioner that oldfred is (and others, I've failed to mention).

That said, if I had to guess (and I do) I would guess the following:
1) Windows was on sda when you installed it -- because it was the ONLY drive.
2) When you boot from another drive, THAT drive (presuming it's a SATA connection) NOW becomes sda by default (I think this is right -- someone correct me if I'm wrong). This is what you're doing when you have more than one drive connected and you're booting from the Ubuntu drive.
3) This implies, with multiple drives connected, that Windows can NO LONGER be on sda, but now, is on sdb, sdc, ....
4) Since what you posted STILL shows Win7 on sda, booting to that will NOT work.

What SHOULD happen is:
1) You boot into Ubuntu with all the drives connected
2) You run "sudo update-grub" from a terminal
3) os_prober FINDS Win7 and updates the GRUB config file -- to something like sdb, or sdc , or ...
4) When you then reboot, you can NOW boot into Win7 -- because GRUB is now pointing to the correct drive.

On my PC, with four drives, Win7 is either sdj or sdl (lowercase L, not a one) -- and, oddly, this changes from time to time even though I don't actually change the drives.

OK ... that's my best guess. If others know better, please correct where I guessed wrong.

NOTE: This approach will not mess with the Windows drive in any way; it only updates GRUB on one of the other drivers.

Regardless as to if it helped in this particular situation or not, thanks for your input, knowledge is power and anything that adds to it is always good...

Yeah I'd pretty much done that several times and even manually entered everything but Grub2 was getting everything just like it should have been all along I think. I think sda1 actually = the first SATA port no matter what but I could be wrong on that.

In any case, I did figure it (per my last post prior to this one), though I'd still like opinions on how and why it was screwed up? Like I said tho8ugh, being as I fixed it from Win 7 with a Win 7 program, it is only logical to assume it was something about where the bootloader was placed originally on the Win 7 drive.

oldfred
November 2nd, 2011, 08:54 PM
The minute you get into more than one drive and more than one operating system it gets confusing. I run the boot script before & after every install (and as part of my rsync backup) so I know what is where.

Boot Info Script courtesy of forum members meierfra & Gert Hulselmans
Page with instructions and download:
http://bootinfoscript.sourceforge.net/
Paste contents of results.txt in a New Reply, then highlight entire file and click on # in edit panel(code tags) to make it easier to read.
Or You can generate the tags first by pressing the # icon in the New Reply Edit toolbar and then paste the contents between the generated [ code] paste here [ /code] tags.
V60 has improved formating and requires code tags to make it legible. New Version is a zip file that you have to extract to get .sh to run.

Besides a repairCD for Windows & a liveCD for the current install of Ubuntu I have several other repair tools.
Boot Repair:
https://help.ubuntu.com/community/Boot-Repair

http://www.supergrubdisk.org/

Every system wants to control booting. Windows will install its boot loader on installs and updates. Grub installs its boot loader on install and updates. But Windows boot seems to install to the drive set in BIOS as the boot drive and grub just installs to sda which usually is the boot drive but not always.