无法用grub2引导逻辑分区上的windows 7

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
david678
帖子: 23
注册时间: 2010-02-04 10:21
送出感谢: 0
接收感谢: 0

无法用grub2引导逻辑分区上的windows 7

#1

帖子 david678 » 2010-02-07 22:14

各位大侠,帮我看下我这样为什么grub2无法引导逻辑分区上的windows 7
首先,主分区winxp;逻辑分区sda5为win 7,sda6为MAC OS X,sda7为linux的/boot,sda8为linux的swap,sda9为linux的/,sda10为veket;
经过修改的grub.cfg:
### BEGIN /etc/grub.d/30_os-prober ###
menuentry "启动 Windows XP" {
insmod ntfs
set root=(hd0,1)
chainloader +1
}
menuentry "启动 Window 7" {
insmod ntfs
set root=(hd0,5)
chainloader +1
}
menuentry "启动 MAC OS X" {
insmod hfsplus
set root=(hd0,6)
search --no-floppy --fs-uuid --set ffed24af195107a2
insmod vbe
do_resume=0
if [ /var/vm/sleepimage -nt10 / ]; then
if xnu_resume /var/vm/sleepimage; then
do_resume=1
fi
fi
if [ $do_resume == 0 ]; then
xnu_uuid ffed24af195107a2 uuid
if [ -f /Extra/DSDT.aml ]; then
acpi -e /Extra/DSDT.aml
fi
xnu_kernel /mach_kernel boot-uuid=${uuid} rd=*uuid
if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
xnu_mkext /System/Library/Extensions.mkext
else
xnu_kextdir /System/Library/Extensions
fi
if [ -f /Extra/Extensions.mkext ]; then
xnu_mkext /Extra/Extensions.mkext
fi
if [ -d /Extra/Extensions ]; then
xnu_kextdir /Extra/Extensions
fi
if [ -f /Extra/devtree.txt ]; then
xnu_devtree /Extra/devtree.txt
fi
if [ -f /Extra/splash.jpg ]; then
insmod jpeg
xnu_splash /Extra/splash.jpg
fi
if [ -f /Extra/splash.png ]; then
insmod png
xnu_splash /Extra/splash.png
fi
if [ -f /Extra/splash.tga ]; then
insmod tga
xnu_splash /Extra/splash.tga
fi
fi
}
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/10_linux ###
menuentry "启动 Ubuntu" {
recordfail=1
if [ -n ${have_grubenv} ]; then save_env recordfail; fi
set quiet=1
insmod reiserfs
set root=(hd0,7)
search --no-floppy --fs-uuid --set 844db357-c613-4216-8205-5250b10555ae
linux /vmlinuz-2.6.31-19-generic root=UUID=f885904e-5349-4b64-9487-3565030f2478 ro quiet splash
initrd /initrd.img-2.6.31-19-generic
}
menuentry "启动Ubuntu (修复模式)" {
recordfail=1
if [ -n ${have_grubenv} ]; then save_env recordfail; fi
insmod reiserfs
set root=(hd0,7)
search --no-floppy --fs-uuid --set 844db357-c613-4216-8205-5250b10555ae
linux /vmlinuz-2.6.31-19-generic root=UUID=f885904e-5349-4b64-9487-3565030f2478 ro single
initrd /initrd.img-2.6.31-19-generic
}

### END /etc/grub.d/10_linux ###


### 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.
menuentry "启动 Veket" {
set root=(hd0,10)
linux /vmlinuz root=/dev/ram0 PMEDIA=hd
initrd /initrd.gz
}
头像
onshoestring
论坛版主
帖子: 4666
注册时间: 2009-09-06 5:53
送出感谢: 0
接收感谢: 108 次

Re: 无法用grub2引导逻辑分区上的windows 7

#2

帖子 onshoestring » 2010-02-07 22:42

用grub2不行的,试试bean的burg。
david678
帖子: 23
注册时间: 2010-02-04 10:21
送出感谢: 0
接收感谢: 0

Re: 无法用grub2引导逻辑分区上的windows 7

#3

帖子 david678 » 2010-02-07 22:44

ls的当真?
头像
onshoestring
论坛版主
帖子: 4666
注册时间: 2009-09-06 5:53
送出感谢: 0
接收感谢: 108 次

Re: 无法用grub2引导逻辑分区上的windows 7

#4

帖子 onshoestring » 2010-02-07 22:48

david678 写了:ls的当真?
win7那个逻辑分区pbr没有引导程序,那个引导程序装到主分区xp的pbr了。
头像
smallapple
论坛版主
帖子: 7868
注册时间: 2009-03-28 15:12
送出感谢: 0
接收感谢: 19 次

Re: 无法用grub2引导逻辑分区上的windows 7

#5

帖子 smallapple » 2010-02-08 8:38

grub2可以引导逻辑分区的win7的,不过要确定逻辑分区有写入正确的引导代码,还有BCD上指向的是该逻辑分区。
david678
帖子: 23
注册时间: 2010-02-04 10:21
送出感谢: 0
接收感谢: 0

Re: 无法用grub2引导逻辑分区上的windows 7

#6

帖子 david678 » 2010-02-08 9:38

楼上可否详细的说明一下?
头像
smallapple
论坛版主
帖子: 7868
注册时间: 2009-03-28 15:12
送出感谢: 0
接收感谢: 19 次

Re: 无法用grub2引导逻辑分区上的windows 7

#7

帖子 smallapple » 2010-02-08 10:43

david678 写了:楼上可否详细的说明一下?
viewtopic.php?f=139&t=253576&hilit=boot ... 0&start=15
头像
tiyuanmaster
帖子: 73
注册时间: 2009-06-14 20:14
送出感谢: 0
接收感谢: 0
联系:

Re: 无法用grub2引导逻辑分区上的windows 7

#8

帖子 tiyuanmaster » 2010-02-08 11:18

首先你要明确:这不是你的menu.lst的问题。

可以解决,首先看你的情况当初应当是先装的xp,然后再装的win7,这样的话win7的引导文件bootmgr及boot文件夹和xp的那些引导文件都是在xp的分区中,所以我推测你的menu.lst中引导xp的代码实际上会让你进入一个win7的选择菜单,供你选择win7还是xp,这样你可以进入win7。

假如你想让grub直接引导win7,就是让你的menu.lst中的win7引导部分真正发挥作用,不知道当前你选择进入win7是否提示你bootmgr is missing。
如果是这样的,那么,那么你就需要将xp分区中的win7引导文件全部转移到win7分区去,我估计你的win7逻辑分区的引导扇区应当是有引导代码的,所以这样就可以进入win7了,不过还是会出来一个菜单,你可以在win7中用bcdedit将引导xp的菜单项去掉。
假如不行的话,那么就可能有两个原因:1.逻辑分区而非主分区的问题。2:win7分区引导扇区的问题。
这需要看具体情况,你给的信息不详细。

还有一点要提醒你,假如你将xp分区的win7引导文件剪切走了,xp分区没有win7的引导文件了,那么你的xp将无法进入,有两个方法:
1.复制不要剪切
2.剪切后在linux中用dd命令将16个扇区的xp引导扇区内容重新植入xp分区的前16个扇区。
其实我是不懂装懂的…………………………
david678
帖子: 23
注册时间: 2010-02-04 10:21
送出感谢: 0
接收感谢: 0

Re: 无法用grub2引导逻辑分区上的windows 7

#9

帖子 david678 » 2010-02-08 12:05

ls,你可能没看到我用的是grub2,grub2用的是grub.cfg修改启动项。
7楼和你的想法应该一样的,多谢两位, :em11 我现在正在试验一下。
头像
onshoestring
论坛版主
帖子: 4666
注册时间: 2009-09-06 5:53
送出感谢: 0
接收感谢: 108 次

Re: 无法用grub2引导逻辑分区上的windows 7

#10

帖子 onshoestring » 2010-02-08 13:19

你用bean的burg可以直接引导ntldr和bootmgr
ntldr /ntldr
ntldr /bootmgr
不用改pbr和bcd。
viewtopic.php?f=139&t=240837
win7的引导文件包括bootmgr和boot整个文件夹。
先把 bootmgr 和 boot目录复制到win7系统盘下,再进入win7,假设win7系统盘盘符为D:
bcdedit /store D:\boot\bcd /set {bootmgr} device partition=D:
再用
bootsect /nt60 D:
写引导代码。
小苹果说的这个当时我试了没成功,后来小苹果把这个又修正了。
如果能从win7分区启动,那么还要做这个:
bootsect /nt52 c:
david678
帖子: 23
注册时间: 2010-02-04 10:21
送出感谢: 0
接收感谢: 0

Re: 无法用grub2引导逻辑分区上的windows 7

#11

帖子 david678 » 2010-02-08 13:37

按照7楼提供的想法,我试验了一下,不行啊。
在grub2选择xp后依然有两个选择菜单,xp和win 7
在grub2选择win7也有两个选择菜单,xp和win 7


7楼提供的想法如下:
win7的引导文件包括bootmgr和boot整个文件夹。
先把 bootmgr 和 boot目录复制到win7系统盘下,再进入win7,假设win7系统盘盘符为D:

bcdedit /store D:\boot\bcd /set {bootmgr} device partition=D:

再用
bootsect /nt60 D:
写引导代码。


我在xp用easybcd把win 7 启动项删除后,当在grub2选择"启动 Windows 7"就直接进入xp,这样一来两个grub选项(一个winxp,一个win 7)就执行同样的命令,有没有办法选择“启动winxp”就进入xp,选择“启动 win 7”就进入win7?
头像
onshoestring
论坛版主
帖子: 4666
注册时间: 2009-09-06 5:53
送出感谢: 0
接收感谢: 108 次

Re: 无法用grub2引导逻辑分区上的windows 7

#12

帖子 onshoestring » 2010-02-08 13:54

david678 写了:按照7楼提供的想法,我试验了一下,不行啊。
在grub2选择xp后依然有两个选择菜单,xp和win 7
在grub2选择win7也有两个选择菜单,xp和win 7


7楼提供的想法如下:
win7的引导文件包括bootmgr和boot整个文件夹。
先把 bootmgr 和 boot目录复制到win7系统盘下,再进入win7,假设win7系统盘盘符为D:

bcdedit /store D:\boot\bcd /set {bootmgr} device partition=D:

再用
bootsect /nt60 D:
写引导代码。


我在xp用easybcd把win 7 启动项删除后,当在grub2选择"启动 Windows 7"就直接进入xp,这样一来两个grub选项(一个winxp,一个win 7)就执行同样的命令,有没有办法选择“启动winxp”就进入xp,选择“启动 win 7”就进入win7?
呵呵,当时我做的时候也是这个现像。
后来再做这个:bootsect /nt52 c: 之后win7就进不去了。

还有个办法就是把win7先装到c:,然后再用ghost备份出来,恢复到d:。
其实你用bean的burg很方便,什么都不改,只把grub2换成burg。
头像
smallapple
论坛版主
帖子: 7868
注册时间: 2009-03-28 15:12
送出感谢: 0
接收感谢: 19 次

Re: 无法用grub2引导逻辑分区上的windows 7

#13

帖子 smallapple » 2010-02-08 14:03

bcd没改好。要直接启动xp应该如ls说的 bootsect /nt52 c: 这个C盘是winxp下的c盘,不是Win7下的C盘。
头像
tiyuanmaster
帖子: 73
注册时间: 2009-06-14 20:14
送出感谢: 0
接收感谢: 0
联系:

Re: 无法用grub2引导逻辑分区上的windows 7

#14

帖子 tiyuanmaster » 2010-02-08 15:47

david678 写了:按照7楼提供的想法,我试验了一下,不行啊。
在grub2选择xp后依然有两个选择菜单,xp和win 7
在grub2选择win7也有两个选择菜单,xp和win 7


7楼提供的想法如下:
win7的引导文件包括bootmgr和boot整个文件夹。
先把 bootmgr 和 boot目录复制到win7系统盘下,再进入win7,假设win7系统盘盘符为D:

bcdedit /store D:\boot\bcd /set {bootmgr} device partition=D:

再用
bootsect /nt60 D:
写引导代码。


我在xp用easybcd把win 7 启动项删除后,当在grub2选择"启动 Windows 7"就直接进入xp,这样一来两个grub选项(一个winxp,一个win 7)就执行同样的命令,有没有办法选择“启动winxp”就进入xp,选择“启动 win 7”就进入win7?
按照我说的方法,选择xp后是会有xp和win 7两个选择菜单的,因为此时xp分区的引导扇区实际上还是win7写入的引导内容,如ls说的用bootsect /nt52 c:之后就可以将xp分区的引导扇区内容恢复成与ntldr兼容的,这样应该就不会让你再选择而直接进入xp了。

不要把bcd中的win7项删除,而是删除xp那项,这样可能就能够直接进入win7了。你的grub.cfg中的win7项实际上是要通过先加载win7所在的逻辑分区的引导扇区继而再加载bootmgr从而进入win7系统,但我不确定所加载的bootmgr文件应当放在主分区还是win7所在的逻辑分区,所以才建议你复制,不过你可以尝试把bootmgr只放在一个分区里,xp或win7分区,反正你还有linux可以进去,剪切了可以再放回去,假如还不能,请把错误信息提示说明。 :em06
其实我是不懂装懂的…………………………
头像
smallapple
论坛版主
帖子: 7868
注册时间: 2009-03-28 15:12
送出感谢: 0
接收感谢: 19 次

Re: 无法用grub2引导逻辑分区上的windows 7

#15

帖子 smallapple » 2010-02-08 15:47

忽然发现一个很奇怪的现象,grub2 的chainloader +1 不能引导第一 逻辑分区(hd05)上的bootmgr ,但(hd0,6)bootmgr上的就没问题。
用grub4dos的chainloader +1就都可以。

不知哪个高手能解释下?
回复

回到 “启动和引导”