win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
回复
guodefu909
帖子: 8
注册时间: 2013-05-25 9:38
系统: Kubuntu

win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#1

帖子 guodefu909 » 2013-05-29 0:34

win7是用u盘在C盘下安装的32位系统,自动生成了100M的隐藏分区。今天又用easyBCD和desk版镜像,以硬盘方式安装了ubuntu麒麟,是逻辑分区中分出的54G空闲盘,分别挂载了/,swap,/home。然后选择启动引导器的时候手贱选择了win7的隐藏盘,我的想法是:启动引导都装到隐藏盘不挺好吗。(之前在笔记本上成功安装过双系统,ubuntu引导器选择的是整个硬盘sda,这次就想选个具体的分区)
重启之后悲剧的发现win7进入不了,于是网上找各种方法,sudo update-grub,sudo update-grub2 试了多次不起作用,开机到了grub有5个选项,前4个ubuntu,还有个win7,ubuntu正常进入,但是win7进去没反应很快又回到grub界面。
然后根据网上的说法,应该是grub覆盖了win7的mbr,插上u盘想修复win7启动项。悲剧的是,找了半天说没找到任何问题,真是欲哭无泪。
我那个win7系统之前都用的很好,不想要重装,有没有什么办法能够把我的win7找回来,而且时间还紧,工作需要这台电脑。希望大神下凡来显灵,我拜谢!
teasiu
帖子: 30
注册时间: 2010-10-29 18:27

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#2

帖子 teasiu » 2013-05-29 9:10

你可以进入ubuntu

那么太好了,你只需要增加一段自动搜索的代码就可以了

代码: 全选

sudo gedit /etc/grub.d/40_custom
在文档最下面增加:

代码: 全选

menuentry '搜索并启动windows7'  {
	recordfail
	gfxmode $linux_gfx_mode
	insmod gzio
	insmod part_msdos
	insmod ntfs
	search --no-floppy --file --set=root /bootmgr
     ntldr /bootmgr
}
如果你已经知道bootmgr在第一分区(隐藏分区)
也可以这样写

代码: 全选

menuentry '启动windows7'  {
	recordfail
	gfxmode $linux_gfx_mode
	insmod gzio
	insmod part_msdos
	insmod ntfs
	set root=(hd0,msdos1)
      ntldr /bootmgr
}
最后

代码: 全选

sudo update-grub
重启选择新菜单进入


以上是解决办法。
如果你想终极修复,
那么我来说说原理:

你将grub2安装到了sda1分区, 正常是整块磁盘sda的。
就是说,你的整块磁盘的mbr是启动grub2,然后你手贱,第一分区sda1的pbr也是启动grub2,分区叫做pbr,磁盘头叫做mbr。
那么,修复第一分区(就是你的隐藏分区)的pbr引导windows就可以了。
你用上面的搜索菜单进入windows后,
下载一个bootice.exe
http://bbs.wuyou.com/forum.php?mod=viewthread&tid=57675
然后选择第一个分区pbr引导为NT6(小心操作哦)
重启,进入ubuntu,把上面的操作去掉,再update-grub即可。
上次由 teasiu 在 2013-05-29 14:55,总共编辑 4 次。
teasiu
帖子: 30
注册时间: 2010-10-29 18:27

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#3

帖子 teasiu » 2013-05-29 9:17

还有一种方法,
就是你已经将grub2安装在了sda1,就是第一个隐藏分区pbr是引导grub2的,但是你的第2分区的pbr是引导win7的,
那么,修改你的win7启动项菜单
重要:
前提是你用上面的方法进入windows以后(或者用windowsPE进入后)

你要将隐藏分区的windows启动文件拷贝到c盘,(给隐藏分区赋予盘符即可读取)
然后用bootice.exe
安装第2分区引导记录pbr为NT6
然后set root=(hd0,msdos2)
chainloader +1
boot

如果写成菜单,应该是这样

代码: 全选

menuentry '启动第2分区系统'  {
   recordfail
   gfxmode $linux_gfx_mode
   insmod gzio
   insmod part_msdos
   insmod ntfs
  set root=(hd0,msdos2)
  chainloader +1
}
或者

代码: 全选

menuentry "Windows 7 (loader) (on /dev/sda2)" --class windows --class os {
	insmod part_msdos
	insmod ntfs
	set root='(hd0,msdos2)'
	chainloader +1
}
上次由 teasiu 在 2013-05-29 15:05,总共编辑 3 次。
guodefu909
帖子: 8
注册时间: 2013-05-25 9:38
系统: Kubuntu

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#4

帖子 guodefu909 » 2013-05-29 12:58

非常感谢!
您的意思是有两种方式,
一种是将第一分区的pbr恢复成win7的引导
另一种是将win7的启动文件复制到第二分区,其中的pbr设置成win7引导,然后在启动选项中增加到第二分区的选项
是这样的意思吗?但是具体操作我还是没看明白,能再细一点么,我对这块太不懂了,希望您谅解.
teasiu
帖子: 30
注册时间: 2010-10-29 18:27

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#5

帖子 teasiu » 2013-05-29 14:08

第2种方法相当于放弃你那个隐藏分区的意思。
但是似乎对新手来讲不太现实。

你还是采用第一种方法,回复第一隐藏分区的pbr引导吧。

原理:
微软的windows隐藏分区通常是放置bootmgr,boot,bcd等启动文件。
由磁盘mbr读取激活分区的pbr,再由pbr读取启动文件bootmgr,通常隐藏分区是激活的第一分区。
(如果要读取该分区内容,需要赋予它盘符即可)
如果你安装了ubuntu的grub2覆盖了mbr,则mbr读取grub2指定的prefix区,然后grub2会采用chainloader 的模块来读取第一分区的pbr.然后pbr读取bootmgr启动windows。
如果你安装的grub2覆盖了第一分区(windows启动分区)的pbr,则需要采用grub2的另外一个模块ntldr来读取启动bootmgr直接启动windows,无视pbr.
简单图解:
windows:
mbr-->pbr-->bootmgr
grub2(ubuntu):
1 chainloader): mbr-->pbr-->bootmgr
2 ntldr): mbr-->bootmgr
重点是grub2的2个模块的区别。
chainloader.mod和ntldr.mod
grub2可以跳过pbr直接读取启动文件。

如果你领略了这写含义,,你的电脑磁盘N分区安装N系统就这样实现了启动。
比如说你空出另外一个分区sdb6
将ubuntu以外的系统比如fedora,安装到sdb6,在安装时,选择grub启动安装到sdb6,(就是第6分区的pbr)
然后启动回去ubuntu、终端运行一下update-grub,
就会出现fedora的菜单了。
那个菜单肯定是这样写的
set root=(hd0,msdos6)
chainloader +1
多么简单啊。
guodefu909
帖子: 8
注册时间: 2013-05-25 9:38
系统: Kubuntu

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#6

帖子 guodefu909 » 2013-05-29 17:38

昨天到今天试一遍又一遍,各种方式只要看到的都试了一遍,最后还是弄出来了,但是还有两个地方没解决(提示系统为盗版已经解决),一个是一些软件(包括有道,灵格斯,aboboo,小麻雀)一打开就提示已经停止。还有一个是启动可以启动了,但是之前设置的无效的启动项,这一下突然后冒出来了。第一次成功开启win7的时候,启动项正常,,先是进入ubuntu选择菜单,由于按照teasiu教的做了修改,最后有个选项是搜索win7.进去后出现win7和ubuntu的选项(我在另一硬盘的win7系统下用easyBCD设置的)。但是当我重启之后,bios之后多了一次选择,这里可以选择ubuntu和win7,还有一个无效选项。这个是我之前用easyBCD设置的,当时不起作用,现在又跑出来了。

第一个问题还没搞懂是什么原因,之前用u盘修复系统,选择了还原系统,还原到2天前了,不知道是不是这个的原因。
第二个,应该是mbr和pbr比较混乱,但我现在不敢轻易改了,弄了整整一个天时间才搞出来,真怕又来一次。
teasiu
帖子: 30
注册时间: 2010-10-29 18:27

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#7

帖子 teasiu » 2013-05-29 18:30

已经解决了就恭喜你了。

如果觉得启动菜单项目繁杂,清理掉就可以了。

ubuntu在/boot/grub/grub.cfg
每个菜单都以
menuentry{
}

easybcd我觉得一点作用也没有,改删就删。
guodefu909
帖子: 8
注册时间: 2013-05-25 9:38
系统: Kubuntu

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#8

帖子 guodefu909 » 2013-05-30 11:20

还想请教 teasiu一个问题

  BIOS-->MBR-->DPT-->pbr-->Bootmgr-->bcd-->Winload。exe-->内核加载-->整个windows7系统

win7隐藏盘的原理是隐藏盘的Bootmgr指向特殊文件-C盘的Bootmgr。
既然如此,上面那个过程中的bcd可以没有吗?也就是说我如果只有一个系统,能不能直接从bootmgr跳到winload?
guodefu909
帖子: 8
注册时间: 2013-05-25 9:38
系统: Kubuntu

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#9

帖子 guodefu909 » 2013-05-30 11:26

teasiu 写了:第2种方法相当于放弃你那个隐藏分区的意思。
用bcdboot c:\windows /s c: 命令复制引导文件,并设置c盘为活动分区后重启,删除隐藏分区,再重启,一切正常
成功去除隐藏分区!
我是删除隐藏分区卷的,不知道格式化会不会有问题,不会破坏mbr吧,感觉不会的样子,但不敢尝试。
guodefu909
帖子: 8
注册时间: 2013-05-25 9:38
系统: Kubuntu

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#10

帖子 guodefu909 » 2013-05-30 11:37

进入win7后,ie9,还有些要用到网络的软件(估计是用了ie内核)包括360软件管家,有道词典,aboboo等一打开就显示程序已停止。
-----------------------
具体原因显示:
internet explorer 已停止工作
问题签名:
问题事件名称: APPCRASH
应用程序名: iexplore.exe
应用程序版本: 9.0.8112.16470
应用程序时间戳: 4ce79912
故障模块名称: mshtml.dll
故障模块版本: 9.0.8112.16470
故障模块时间戳: 4ce7b8f3
异常代码: c0000005
异常偏移: 000d68d2
OS 版本: 6.1.7601.2.1.0.256.1
区域设置 ID: 2052
其他信息 1: 0a9e
其他信息 2: 0a9e372d3b4ad19135b953a78882e789
其他信息 3: 0a9e
其他信息 4: 0a9e372d3b4ad19135b953a78882e789
--------------------------
尝试很多办法,MSHTML.dll替换,找补丁等都不行。
最后没办法只好卸载重新安装ie9,但是卸载ie9之后重启,发现那些软件正常了,ie版本变成了8
虽然修复了,但是问题产生的原因还不清楚,之前用u盘修复的时候,还原了系统,不知道有没有关系。

没删除隐藏分区前,激活win7一直不成功,删除隐藏分区后,成功激活,不知道这里又是什么原理。

我电脑有两块硬盘,一块旧的要用IDE模式启动,一块新的要用ACHI模式启动。
好几次都出现win7启动界面然后一闪又重启,这是新硬盘忘了改成ACHI模式,多耽误了好多的功夫,希望以后记住这个教训。
iceman_x
帖子: 2
注册时间: 2013-06-03 15:10
系统: win8

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#11

帖子 iceman_x » 2013-06-03 15:32

guodefu909 写了:如果你已经知道bootmgr在第一分区(隐藏分区)
也可以这样写
代码:
menuentry '启动windows7' {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ntfs
set root=(hd0,msdos1)
ntldr /bootmgr
}

最后
代码:
sudo update-grub


重启选择新菜单进入


以上是解决办法。
如果你想终极修复,
那么我来说说原理:

你将grub2安装到了sda1分区, 正常是整块磁盘sda的。
就是说,你的整块磁盘的mbr是启动grub2,然后你手贱,第一分区sda1的pbr也是启动grub2,分区叫做pbr,磁盘头叫做mbr。
那么,修复第一分区(就是你的隐藏分区)的pbr引导windows就可以了。
你用上面的搜索菜单进入windows后,
下载一个bootice.exe
http://bbs.wuyou.com/forum.php?mod=viewthread&tid=57675
然后选择第一个分区pbr引导为NT6(小心操作哦)
重启,进入ubuntu,把上面的操作去掉,再update-grub即可。


感谢 teasiu,我用这个方法成功恢复了win8系统,我以为我搞清楚了原理。但是在处理一个新问题时又遇到困难了:
我的机器是3个人在用,每个人都给自己安装了一个系统
sda1 500M win8系统启动引导安装在这个分区
sda2 安装第一个win8系统 win8(1)
sda3 安装第二个win8系统 win8(2)
sda4 安装第三个win8系统 win8(3)
sda5 安装ubuntu,启动引导文件也选择了sda1,出现了win8无法引导的问题,用上述方法成功处理。


目前grub可以引导ubuntu和win8,但是win8具体进那个系统得到grub选择了win8之后再选一次。
按照
简单图解:
windows:
mbr-->pbr-->bootmgr
grub2(ubuntu):
1 chainloader): mbr-->pbr-->bootmgr
2 ntldr): mbr-->bootmgr
重点是grub2的2个模块的区别。
chainloader.mod和ntldr.mod
grub2可以跳过pbr直接读取启动文件。
可以在grub中由mbr直接到任何一个win8系统的bootmgr启动此系统。

我在grub中输入
menuentry '启动windows8(1)' {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ntfs
set root=(hd0,msdos1)
ntldr /bootmgr

msdos1中数字选择2、3、4,都提示没有/boot/bcd,要求插入win8光盘修复。
头像
nyfair
帖子: 1067
注册时间: 2007-12-07 12:49
系统: winnux10
来自: Tree New Bee

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#12

帖子 nyfair » 2013-06-03 17:27

我一直装在这个100m的分区里的,哪有什么问题
本人在此论坛仅负责吐槽,问题急需解决请支付宝转账5毛至{我的[email protected]},将会竭诚为您服务

linux常见多媒体问题处理指南

1. 视频播放有问题->卸载gstreamer
2. 音频播放有问题->卸载pulseaudio
3. 远程播放有问题->卸载avahi
4. 系统全都有问题->卸载systemd,远离Lennart这傻逼让你从此轻松自在

⇩自由网络⇩
https://github.com/nyfair/freeweb
teasiu
帖子: 30
注册时间: 2010-10-29 18:27

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#13

帖子 teasiu » 2013-06-03 18:12

iceman_x 写了:
guodefu909 写了: 感谢 teasiu,我用这个方法成功恢复了win8系统,我以为我搞清楚了原理。但是在处理一个新问题时又遇到困难了:
我的机器是3个人在用,每个人都给自己安装了一个系统
sda1 500M win8系统启动引导安装在这个分区
sda2 安装第一个win8系统 win8(1)
sda3 安装第二个win8系统 win8(2)
sda4 安装第三个win8系统 win8(3)
sda5 安装ubuntu,启动引导文件也选择了sda1,出现了win8无法引导的问题,用上述方法成功处理。

目前grub可以引导ubuntu和win8,但是win8具体进那个系统得到grub选择了win8之后再选一次。

我在grub中输入
menuentry '启动windows8(1)' {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ntfs
set root=(hd0,msdos1)
ntldr /bootmgr

msdos1中数字选择2、3、4,都提示没有/boot/bcd,要求插入win8光盘修复。

你的问题是这样的:
你只能利用第一个分区的bootmgr引导bcd进入你那3个win8系统。
原因:
你在安装这3个windows系统时,并没有按照每安装1个win须先设定该区激活的步骤来安装
就是说,你把第2个win安装到第2个分区时,所有启动文件会往激活分区里去,这就是造成你的问题的原因了。


修复方法(2种选1):
1、重新安装所有windows系统,不要隐藏分区,不要启动分区,每安装1个windows前,先设置目标分区激活。
2、将第一分区的启动文件(boot文件夹+)拷贝到每个windows分区,然后用grub2引导每个分区系统。
这有一个弊端,就是你启动第2个windows系统时,会出现未激活或者C:、D:、E:盘符不标准。

微软的设计,每台电脑仅安装1个windows操作系统惹得祸。
iceman_x
帖子: 2
注册时间: 2013-06-03 15:10
系统: win8

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#14

帖子 iceman_x » 2013-06-09 0:26

teasiu 写了:
iceman_x 写了:
guodefu909 写了: 感谢 teasiu,我用这个方法成功恢复了win8系统,我以为我搞清楚了原理。但是在处理一个新问题时又遇到困难了:
我的机器是3个人在用,每个人都给自己安装了一个系统
sda1 500M win8系统启动引导安装在这个分区
sda2 安装第一个win8系统 win8(1)
sda3 安装第二个win8系统 win8(2)
sda4 安装第三个win8系统 win8(3)
sda5 安装ubuntu,启动引导文件也选择了sda1,出现了win8无法引导的问题,用上述方法成功处理。

目前grub可以引导ubuntu和win8,但是win8具体进那个系统得到grub选择了win8之后再选一次。

我在grub中输入
menuentry '启动windows8(1)' {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ntfs
set root=(hd0,msdos1)
ntldr /bootmgr

msdos1中数字选择2、3、4,都提示没有/boot/bcd,要求插入win8光盘修复。

你的问题是这样的:
你只能利用第一个分区的bootmgr引导bcd进入你那3个win8系统。
原因:
你在安装这3个windows系统时,并没有按照每安装1个win须先设定该区激活的步骤来安装
就是说,你把第2个win安装到第2个分区时,所有启动文件会往激活分区里去,这就是造成你的问题的原因了。


修复方法(2种选1):
1、重新安装所有windows系统,不要隐藏分区,不要启动分区,每安装1个windows前,先设置目标分区激活。
2、将第一分区的启动文件(boot文件夹+)拷贝到每个windows分区,然后用grub2引导每个分区系统。
这有一个弊端,就是你启动第2个windows系统时,会出现未激活或者C:、D:、E:盘符不标准。

微软的设计,每台电脑仅安装1个windows操作系统惹得祸。
我是这样做的:
1、把隐藏分区里面的boot文件夹复制到3个win8系统分区内
2、用bootice编辑每个win8分区内BCD文件(从隐藏分区复制过来的,每个BCD都包含3个win8系统引导内容),只保留当前分区所安装的windows引导信息。
3、用你前前面的方法在grub.cfg中加入这从这三个win8系统分区的引导菜单

经测试可以从grub正常引导3个win8系统
cq2essz
帖子: 46
注册时间: 2008-08-01 17:56

Re: win7下硬盘安装ubuntu,手贱将启动引导器装到了win7的100M隐藏分区,进不了win7

#15

帖子 cq2essz » 2014-10-27 6:28

牛逼!!!! :em11 :em11 :em11 问题解决 感谢
回复