安装Ubuntu后Windows 7无法启动问题分析

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
lyp069
帖子: 272
注册时间: 2005-10-25 13:54
送出感谢: 0
接收感谢: 0
联系:

安装Ubuntu后Windows 7无法启动问题分析

#1

帖子 lyp069 » 2014-08-12 9:32

操作系统版本:Ubuntu 14.04.1和Windows7 sp1 x64版
故障现象:
先安装Windows7 SP1 64位版,后使用U盘安装Ubuntu 14.04.1。Ubuntu安装成功后,可正常启动,而GRUB上选择Windows 7菜单项,无法启动到Win7界面,直接返回GRUB菜单界面。
故障分析:
安装Ubuntu的过程中经历分区步骤,如下图。在指定Boot Loader时并未选择默认的选项/dev/sda,而是选择/dev/sda1。因为硬盘的活动分区是第一个分区sda1。Windows7安装程序默认划分一个100MB的小分区用于存储启动文件。而划分的C盘则是硬盘上的第二个分区即sda2。此时如果将GRUB2的引导程序装在“/”所在分区,会造成Ubuntu无法启动,而本人又不想将GRUB2的引起程序装在硬盘的MBR上。因此选择将GRUB安装windows的启动分区Sda1上。
122.png
Ubuntu安装时常规启动器设置

Ubuntu安装成功,重启选择windows7启动,结果悲剧出现。选择Windows 7启动菜单启动Windows,毫无反映几秒钟后返回GRUB启动菜单。
1.为了分析问题打开 Ubuntu 软件中心 安装软件“Inspect boot environment”也可直接搜索“boot-info-script”
2.打开终端,运行命令

代码: 全选

sudo bootinfoscript
3.默认输出结果到主文件夹中的RESULTS.txt,内容如下:

代码: 全选

                  Boot Info Script 0.61      [1 April 2012]


======================  Boot Info Summary:   ==========================

 => Windows is installed in the MBR of /dev/sda.

sda1: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Grub2 (v1.99)
    Boot sector info:  Grub2 (v1.99) is installed in the boot sector of sda1 
                       and looks at sector 1886304656 of the same hard drive 
                       for core.img. core.img is at this location and looks 
                       in partition 112 for . No errors found in the Boot 
                       Parameter Block.
    Operating System:  
    Boot files:        /bootmgr /Boot/BCD

sda2: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows Vista/7: NTFS
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  Windows 7
    Boot files:        /Windows/System32/winload.exe

sda3: __________________________________________________________________________

    File system:       ntfs
    Boot sector type:  Windows Vista/7: NTFS
    Boot sector info:  No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        
启动信息上看Windows的启动器安装在主硬盘MBR上,而启动文件安装在Sda1上。启动器为bootmgr。Boot sector type是GRUB,并不是NTLDR。Boot sector info中也不是Windows启动器信息。由此可确定位于Sda1启动扇区上的Windows启动器已被GRUB所取代。因此,位于Sda1上的Windows启动器被破坏。
4.下面再看看GRUB启动脚本中的问题。进入/boot/grub目录,打开grub.cfg文件查看,下面显示的grub.cfg有关windows 7启动的部分。

代码: 全选

323  ### BEGIN /etc/grub.d/30_os-prober ###
324 menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-04EC18F4EC18E22A' {
325 	insmod part_msdos
326 	insmod ntfs
327 	set root='hd0,msdos1'
328 	if [ x$feature_platform_search_hint = xy ]; then
329	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  04EC18F4EC18E22A
330 	else
331 	  search --no-floppy --fs-uuid --set=root 04EC18F4EC18E22A
332 	fi
333 	parttool ${root} hidden-
334 	chainloader +1
335 }
336 set timeout_style=menu
337 if [ "${timeout}" = 0 ]; then
338   set timeout=10
339 fi
340 ### END /etc/grub.d/30_os-prober ###
配置文件中Windows启动部分,没有问题。如果硬盘上的Windows启动器没有被GRUB破坏,那么上面的配置完全可以正常工作。在这里特别要提到Chainloader的含义

代码: 全选

chainloader +1
chainloader用于切换启动器,+1是指定启动器所在硬盘扇区块位置。334行里的chainloader +1语句的含义是启用在sda1的第一个块的启动器用于引导操作系统。此时sda1的第一个块已经被GRUB所占据,切换启动器的结果就是再启动一遍GRUB。因此当用户在GRUB中选择windows 7 loader后返回GRUB菜单就以为怪了。
处理步骤
Win 7的启动从MBR引导,第二步调用bootmgr,第三步调用winload.exe。最后由winload.exe完成win7系统的启动。Sda1里bootmgr文件保存良好,winload在系统文件夹中也未损坏。因此只要完成MBR到bootmgr的引导即可修复Windows启动。
1.修改grub.cfg配置文件,Ubuntu中需要使用管理员权限。打开终端,输入以下命令编辑配置文件:
sudo gedit /boot/grub/grub.cfg
2.修改334行的chainloader +1语句,替换成ntldr /bootmgr
........以上省略

代码: 全选

331 	  search --no-floppy --fs-uuid --set=root 04EC18F4EC18E22A
332 	fi
333 	parttool ${root} hidden-
334 	ntldr /bootmgr
335 }
.........以下省略
由ntldr命令完成MBR到bootmgr的引导。
3.保存配置文件,重新启动计算机。你将会看到熟悉的win7启动画面。
上次由 lyp069 在 2014-08-12 10:14,总共编辑 1 次。
Full Circle中文杂志 | Ubuntu社区独立发行的电子月刊
http://www.freeearth.org.cn
头像
daf3707
论坛版主
帖子: 12701
注册时间: 2007-06-13 15:57
来自: 在他乡
送出感谢: 53 次
接收感谢: 85 次

Re: 安装Ubuntu后Windows 7无法启动

#2

帖子 daf3707 » 2014-08-12 9:46

:em11
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山
送出感谢: 13 次
接收感谢: 62 次

Re: 安装Ubuntu后Windows 7无法启动问题分析

#3

帖子 cao627 » 2014-08-12 19:14

是不是可以这么理解:
安装ubuntu之前 win7的启动流程是mbr----sda1的bootsector----sda1的bootmgr-----winload.exe
现在安装了ubuntu将grub安装到了sda1,因此sda1的bootsector中的原有定向到sda1的bootmgr内容被grub覆盖。
在/boot/grub/grub.cfg中修改chainloader +1ntldr /bootmgr就是让sda1的bootsector中的grub引导指向sda1上的bootmgr,而不是chainloader +1表示的sda1的bootsector自身。
头像
lyp069
帖子: 272
注册时间: 2005-10-25 13:54
送出感谢: 0
接收感谢: 0
联系:

Re: 安装Ubuntu后Windows 7无法启动问题分析

#4

帖子 lyp069 » 2014-08-13 8:50

可以这样理解。这个故障的实质就是因为bootsector被覆盖而引发的。判断问题的过程却并不顺利。
Full Circle中文杂志 | Ubuntu社区独立发行的电子月刊
http://www.freeearth.org.cn
poloshiao
论坛版主
帖子: 18280
注册时间: 2009-08-04 16:33
送出感谢: 21 次
接收感谢: 1957 次

Re: 安装Ubuntu后Windows 7无法启动问题分析

#5

帖子 poloshiao » 2014-08-13 9:23

安装Ubuntu的过程中经历分区步骤,如下图。在指定Boot Loader时并未选择默认的选项/dev/sda,而是选择/dev/sda1。
Grub 2 官方安裝手冊 希望選擇安裝 硬盤 MBR (例如 /dev/sda)
除非必要 否則避免安裝在分割區(例如 /dev/sda1)
http://www.gnu.org/software/grub/manual ... 02dinstall
jinjiachen
帖子: 2148
注册时间: 2012-12-16 15:43
系统: debian
送出感谢: 9 次
接收感谢: 27 次

Re: 安装Ubuntu后Windows 7无法启动问题分析

#6

帖子 jinjiachen » 2014-08-15 16:34

poloshiao 写了:
安装Ubuntu的过程中经历分区步骤,如下图。在指定Boot Loader时并未选择默认的选项/dev/sda,而是选择/dev/sda1。
Grub 2 官方安裝手冊 希望選擇安裝 硬盤 MBR (例如 /dev/sda)
除非必要 否則避免安裝在分割區(例如 /dev/sda1)
http://www.gnu.org/software/grub/manual ... 02dinstall
嗯嗯 一直安装在MBR,个人感觉GRUB很好很强大,为什么有那么多人不愿意安装在此?
jcdby
帖子: 4
注册时间: 2013-06-06 8:30
系统: ubuntu
送出感谢: 0
接收感谢: 0

Re: 安装Ubuntu后Windows 7无法启动问题分析

#7

帖子 jcdby » 2014-11-09 18:51

感谢楼主分享经验。我也遇到了和楼主相同的情况,但是我对于linux是新手,真的是不知所措。虽然楼主给出了具体解决方案的步骤,我一点也看不懂,但是按照楼主给出的solution,顺利解决了这个问题。。真心感谢楼主。
回复

回到 “系统安装和升级”