【已解决】如果利用Windows的启动引导器引导win/lin的双系统

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
头像
anriqing
帖子: 189
注册时间: 2008-08-19 12:59

【已解决】如果利用Windows的启动引导器引导win/lin的双系统

#1

帖子 anriqing » 2008-10-10 16:31

我想通过NTLDR/Bootmgr实现对Ubuntu的引导,在不安装grub4dos到Ubuntu分区,而是安装GRUB到Ubuntu分区前提下,请问各位达人,我应该如何在boot.ini或者BCD中添加对GRUB的引导呢?
硬盘分区以最简单的为例,单硬盘,第一个主分区装了XP或者Vista,第二个主分区装了Ubuntu。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

【已解决】
我通过自己的学习,已经自己解决了这个问题,并且实践成功。这里将我实现的方法写在下面,还希望高人指点。
我在设置的过程中使用了可启动软盘。如果没有软盘,根据实际需要,也可以用可启动U盘或者Live CD代替。

XP/Ubuntu:
1.将Fdisk.exe和GRUB4DOS拷贝到可启动FDD(软盘),从FDD启动,在DOS环境下输入如下命令:

代码: 全选

#这条命令用来修复XP的MBR
fdisk /mbr
2.继续在DOS环境下输入如下命令:

代码: 全选

cd grub4dos
grub
在GRUB4DOS的选择菜单中,选择”command”,在grub>环境下输入如下命令:

代码: 全选

#这条命令用来找到menu.lst所在分区,它会反馈一个(hdx,y)形式的结果,在本例中,这里是(hd0,1)
find /boot/grub/menu.lst
root (hdx,y)
#这条命令用来安装GRUB到Linux分区,而不是整个硬盘上。
setup (hdx,y)
quit
3.在DOS环境下输入grub,在GRUB4DOS的选择菜单中,选择"find anb boot linux with menu.lst already installed",进入Ubuntu后,在终端输入如下命令:

代码: 全选

#这条指令非常关键。它是把Linux分区的第一个扇区即Linux分区的引导扇区(大小为512 字节)复制为Windows 启动分区根目录下名为linux.lnx的文件。sdaA指的是Linux的分区,在本例中为sda2,/media/disk-B是指Windows分区挂载在Ubuntu的路径,在本例中为/media/disk。其它的Linux挂载的路径可能不同,甚至我们需要自己手动输入再输入一条mount命令将Windows分区挂载到/mnt下,然后再执行这条命令。
sudo dd if=/dev/sdaA of=/media/disk-B/linux.lnx bs=512 count=1
4.重启后进入XP,在命令提示符中,输入如下命令:

代码: 全选

cd c:\
attrib boot.ini –r –s –h
在C盘根目录下,打开boot.ini文件,然后在最下方添加如下命令:

代码: 全选

C:\linux.lnx=“Ubuntu”
重启即可。



Vista/Ubuntu:
1.将Vista安装光盘放入光驱,从光驱启动,在语言,时区,键盘选择界面点击”下一步”,然后选择”修复计算机”,在”系统恢复选项”中,选择Vista系统,然后点击”下一步”,接下来单击”命令提示符”,在DOS环境下输入如下命令:

代码: 全选

bootrec /fixmbr
成功后重启,这样执行的结果是能进入Vista,而不能进入Ubuntu。
2.从Live CD进入Ubuntu,在终端下输入如下命令:

代码: 全选

sudo grub
find /boot/grub/menu.lst
root (hdx,y)
setup (hdx,y)
quit
sudo mkdir /mnt/windows
#mount命令和dd命令需要根据具体的环境来输入硬盘分区信息。X,Y只是符号,而且并不等于上面的x,y。
sudo mount -t ntfs /dev/sdaX /mnt/windows
sudo dd if=/dev/sdaY of=/mnt/windows/ubuntu.lnx bs=512 count=1
sudo umount /mnt/windows
sudo reboot
4.重启进入Vista,以管理员身份运行CMD.exe,在命令提示符下,输入如下命令:

代码: 全选

#这里是通过BCDEdit.exe对Vista的BCD(类似于XP的boot.ini)进行编辑。执行完第一条命令会得到一个反馈的结果,类似于{7834f68a-7434-11dd-b717-001ec906b8c6}的形式,下面的命令中的{id}既是指的这个。
bcdedit /create /d “Ubuntu" /application bootsector
bcdedit /set {id} device boot
bcdedit /set {id} path \ubuntu.lnx
bcdedit /displayorder {id} /addlast
bcdedit /timeout 5
重启即可。
上次由 anriqing 在 2008-10-31 22:13,总共编辑 10 次。
Windows Vista Ultimate SP1 CHS + Ubuntu 8.04.1 desktop i386

CPU:Intel Core 2 Duo T7250 RAM:2048MB DDR2-667
VGA:NVidia Geforce 8400M GS 128MB HD:SumSung 160G 5400R
LAN:Broadcom NetLink WIFI:Intel 3945ABG
WebCam:2.0M
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: [请教]如何在Windows下添加对GRUB的引导

#2

帖子 ptptptptptpt » 2008-10-10 18:02

boot.ini 应该不行,bcd 不清楚,估计也够呛 —— 微软不会为 linux 铺路的

顺便说,正设想一个东东,通过 boot.ini 加载运行,它会列出所有分区,可以选择其中之一启动
carter2005
帖子: 10
注册时间: 2008-04-28 13:01

Re: [请教]如何在Windows下添加对GRUB的引导

#3

帖子 carter2005 » 2008-10-10 19:09

GRUB不就能实现你要的功能嘛
ptptptptptpt 写了:boot.ini 应该不行,bcd 不清楚,估计也够呛 —— 微软不会为 linux 铺路的

顺便说,正设想一个东东,通过 boot.ini 加载运行,它会列出所有分区,可以选择其中之一启动
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: [请教]如何在Windows下添加对GRUB的引导

#4

帖子 ptptptptptpt » 2008-10-10 19:27

carter2005 写了:GRUB不就能实现你要的功能嘛
ptptptptptpt 写了:boot.ini 应该不行,bcd 不清楚,估计也够呛 —— 微软不会为 linux 铺路的

顺便说,正设想一个东东,通过 boot.ini 加载运行,它会列出所有分区,可以选择其中之一启动
不能吧。怎么实现??我要的功能,前提是满足楼主的要求
头像
anriqing
帖子: 189
注册时间: 2008-08-19 12:59

Re: [请教]如何在Windows下添加对GRUB的引导

#5

帖子 anriqing » 2008-10-10 21:09

是哦。我为了这个问题头疼几天了,boot.ini没找到对应的添加方法,BCDEdit又太麻烦,而且不知道具体去怎样配置,也不知道能不能成功。
Windows Vista Ultimate SP1 CHS + Ubuntu 8.04.1 desktop i386

CPU:Intel Core 2 Duo T7250 RAM:2048MB DDR2-667
VGA:NVidia Geforce 8400M GS 128MB HD:SumSung 160G 5400R
LAN:Broadcom NetLink WIFI:Intel 3945ABG
WebCam:2.0M
头像
sunuk
帖子: 27
注册时间: 2008-09-25 12:23

Re: [请教]如何在Windows下添加对GRUB的引导

#6

帖子 sunuk » 2008-10-11 22:54

你好,
单只是用boot.ini引导grub还是可以的。但是当你安装ubuntu时grub默认是装到MBR的,他优先于NT引导。
boot.ini引导grub:
把grub程序放到c盘
在boot中添加如下指令: c:\grldr="grub引导" (grub程序放在根目录下当然也可以放于其他目录)
便可引导进入grub。按C进入命令模式,载入内核文件,加载引导程序。
头像
anriqing
帖子: 189
注册时间: 2008-08-19 12:59

Re: [已解决]如何在Windows下添加对GRUB的引导

#7

帖子 anriqing » 2008-10-13 19:43

大家来看看咯。有什么不对的地方还希望大家指正。这里我实现的是NTLDR/Bootmgr+GRUB的引导,其实NTLDR/Bootmgr+GRUB4DOS的引导也是可以实现的,我都已经实践过并且成功了。
Windows Vista Ultimate SP1 CHS + Ubuntu 8.04.1 desktop i386

CPU:Intel Core 2 Duo T7250 RAM:2048MB DDR2-667
VGA:NVidia Geforce 8400M GS 128MB HD:SumSung 160G 5400R
LAN:Broadcom NetLink WIFI:Intel 3945ABG
WebCam:2.0M
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: [已解决]如何在Windows下添加对GRUB的引导

#8

帖子 adagio » 2008-10-13 20:54

vista那个狗屁BCD好像要用专用软件才能改,就叫啥xxBCD,烦死,还是GRUB最好,通吃!
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: [已解决]如何在Windows下添加对GRUB的引导

#9

帖子 ptptptptptpt » 2008-10-13 21:03

我不太喜欢 dd mbr 的方法,因为不够灵活,分区发生变化时,可能会失效


实际上,最好的方法还是 grub4dos ,可以用在 xp 和 vista 下,通过 win 的 loader 加载,启动 grldr 的 menu.lst ,此时可以通过这个 menu.lst 加载 kernel initrd 来启动linux 系统,但是,由于此 menu.lst 不属于 linux 系统,所以,安装新内核之后,此menu.lst不会被更新,更新的是属于 linux 系统的 /boot/grub/menu.lst ,因此,此 menu.lst 内容可以由一系列 congfigfile 命令组成,以加载 linux 的 /boot/grub/menu.lst ,这样,既能灵活控制,又能用上自动更新的 /boot/grub/menu.lst


而且,似乎你说的并非真正“安装GRUB到Ubuntu分区”,而是安装到mbr。安装GRUB到Ubuntu分区意思是,把grub 的引导代码写入 Ubuntu分区 的 引导扇区。这样的话,通过 win loader 加载 grldr ,再 chainloader (hdx,x)+1 ,即可启动 ubuntu 。
头像
anriqing
帖子: 189
注册时间: 2008-08-19 12:59

Re: [已解决]如何在Windows下添加对GRUB的引导

#10

帖子 anriqing » 2008-10-13 21:24

ptptptptptpt 写了:我不太喜欢 dd mbr 的方法,因为不够灵活,分区发生变化时,可能会失效


实际上,最好的方法还是 grub4dos ,可以用在 xp 和 vista 下,通过 win 的 loader 加载,启动 grldr 的 menu.lst ,此时可以通过这个 menu.lst 加载 kernel initrd 来启动linux 系统,但是,由于此 menu.lst 不属于 linux 系统,所以,安装新内核之后,此menu.lst不会被更新,更新的是属于 linux 系统的 /boot/grub/menu.lst ,因此,此 menu.lst 内容可以由一系列 congfigfile 命令组成,以加载 linux 的 /boot/grub/menu.lst ,这样,既能灵活控制,又能用上自动更新的 /boot/grub/menu.lst


而且,似乎你说的并非真正“安装GRUB到Ubuntu分区”,而是安装到mbr。安装GRUB到Ubuntu分区意思是,把grub 的引导代码写入 Ubuntu分区 的 引导扇区。这样的话,通过 win loader 加载 grldr ,再 chainloader (hdx,x)+1 ,即可启动 ubuntu 。
请教一下pt:

代码: 全选

find /boot/gurb/menu.lst
root (hdx,y)
setup (hdx,y)
quit
这种方式安装的GRUB不是安装到了Linux分区么?它具体的位置不是Linux分区的引导扇区吗?怎么会是安装到MBR呢。安装到MBR的话,这里的第三条命令应该是下面这样写的吧:

代码: 全选

setup (hdx)
再补充一下:我写这种启动引导方式不是说我觉得这种引导方式最好。事实上,我知道由GURB4DOS引导比较灵活,而且我也会设置由GRUB4DOS引导的启动,只是我最近几天对各种方式的启动引导感觉好奇,所以想把所有能实现的方法都实现一下而已。感觉这种方式是用的比较少的,我自己开始也不会,所以发帖子到这里来请教大家的。
目前我已经实现的启动引导方式有以下这些:
XP/Ubuntu:GRUB+NTLDR,NTLDR+GRUB,NTLDR+GRUB4DOS,GRUB4DOS+NTLDR;
Vista/Ubuntu:GRUB+Bootmgr,Bootmgr+GRUB,Bootmgr+GRUB4DOS,GRUB4DOS+Bootmgr
Windows Vista Ultimate SP1 CHS + Ubuntu 8.04.1 desktop i386

CPU:Intel Core 2 Duo T7250 RAM:2048MB DDR2-667
VGA:NVidia Geforce 8400M GS 128MB HD:SumSung 160G 5400R
LAN:Broadcom NetLink WIFI:Intel 3945ABG
WebCam:2.0M
头像
ptptptptptpt
帖子: 3711
注册时间: 2006-09-19 18:16

Re: [已解决]如何在Windows下添加对GRUB的引导

#11

帖子 ptptptptptpt » 2008-10-13 22:14

不好意思,是我看错了 ,一看到 dd 、mbr 下意识地以为又是 dd 硬盘第一扇区的法子 :em06

的确,楼主所说的方法行得通。

之前没见过这种用法。当然原理都是类似的,“备份 ubuntu 分区第一扇区、通过ntldr 加载” 和 “用 grub4dos chainloader (ubuntu分区)+1 ” 都是把第一扇区的数据(grub stage1)加载到内存并执行
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: [已解决]如何在Windows下添加对GRUB的引导

#12

帖子 billbear » 2008-10-13 22:56

你的问题是"如何在Windows下添加对GRUB的引导",这个还是没有办法的
你解决的是在 windows 下引导 ubuntu,这是两个问题。
win 下引导 ubuntu 是很多实现方法的,但是没有一个是真正意义上把引导交给了 ubuntu 分区引导扇区里的 grub 的,所以你的问题还是无解的。
只是一定要实现 win 下对 grub 的引导,即无可能,亦无必要。
如果一定要找个办法的话,用 win 引导 grub4dos,再用 grub4dos chainloader ubuntu 分区,或许算真的把引导交给了 ubuntu 分区引导扇区里的 grub,但这是 grub4dos 的功能,不是 win 自己的。所以你的问题 "如何在Windows下添加对GRUB的引导" 答案还是, win 没有这个能力。
=======================================================
要从 win 引导 ubuntu 的话,很简单,放个 grldr 在 c 盘,在 boot.ini 里加一句话就好了。vista 麻烦点,放 grldr.mbr 和 grldr 在 c 盘,然后像你写的那样,使用 bcdedit。
dd 的办法是应该被摒弃的。
顺便说一下,bcdedit 确实很讨厌,但是相比 boot.ini,有一个好处,就是你装在第一主分区的 vista 克隆下来直接挪到另一个主分区马上能用。
另外,既然你对各种引导方式有兴趣,我再补充一个,
把 ntldr 改名为 ntldrxp,(bootmgr 改名为 bootmgrv)把 grldr 拷到 c 盘,改名为 ntldr (bootmgr),欺骗 windows,首先起来的是 grub4dos,ubuntu 能引导了,然后在 menu.lst 里添加对 windows 的引导:

title Microsoft Windows XP
find --set-root /ntldrxp
chainloader /ntldrxp

title Microsoft Windows Vista
find --set-root /bootmgrv
chainloader /bootmgrv

不想玩 bcd 的可以用这个。
头像
anriqing
帖子: 189
注册时间: 2008-08-19 12:59

Re: [已解决]如何在Windows下添加对GRUB的引导

#13

帖子 anriqing » 2008-10-14 8:03

billbear 写了:你的问题是"如何在Windows下添加对GRUB的引导",这个还是没有办法的
你解决的是在 windows 下引导 ubuntu,这是两个问题。
win 下引导 ubuntu 是很多实现方法的,但是没有一个是真正意义上把引导交给了 ubuntu 分区引导扇区里的 grub 的,所以你的问题还是无解的。
只是一定要实现 win 下对 grub 的引导,即无可能,亦无必要。
如果一定要找个办法的话,用 win 引导 grub4dos,再用 grub4dos chainloader ubuntu 分区,或许算真的把引导交给了 ubuntu 分区引导扇区里的 grub,但这是 grub4dos 的功能,不是 win 自己的。所以你的问题 "如何在Windows下添加对GRUB的引导" 答案还是, win 没有这个能力。
=======================================================
要从 win 引导 ubuntu 的话,很简单,放个 grldr 在 c 盘,在 boot.ini 里加一句话就好了。vista 麻烦点,放 grldr.mbr 和 grldr 在 c 盘,然后像你写的那样,使用 bcdedit。
dd 的办法是应该被摒弃的。
顺便说一下,bcdedit 确实很讨厌,但是相比 boot.ini,有一个好处,就是你装在第一主分区的 vista 克隆下来直接挪到另一个主分区马上能用。
另外,既然你对各种引导方式有兴趣,我再补充一个,
把 ntldr 改名为 ntldrxp,(bootmgr 改名为 bootmgrv)把 grldr 拷到 c 盘,改名为 ntldr (bootmgr),欺骗 windows,首先起来的是 grub4dos,ubuntu 能引导了,然后在 menu.lst 里添加对 windows 的引导:

title Microsoft Windows XP
find --set-root /ntldrxp
chainloader /ntldrxp

title Microsoft Windows Vista
find --set-root /bootmgrv
chainloader /bootmgrv

不想玩 bcd 的可以用这个。
受教了。多谢bear指点。
Windows Vista Ultimate SP1 CHS + Ubuntu 8.04.1 desktop i386

CPU:Intel Core 2 Duo T7250 RAM:2048MB DDR2-667
VGA:NVidia Geforce 8400M GS 128MB HD:SumSung 160G 5400R
LAN:Broadcom NetLink WIFI:Intel 3945ABG
WebCam:2.0M
leikang
帖子: 27
注册时间: 2008-10-14 16:18

Re: [已解决]如何在Windows下添加对GRUB的引导

#14

帖子 leikang » 2008-10-17 19:25

在XP和fedora双系统中怎么正确卸载Fedora系统,我在装Fedora时使用GRUB引导双系统,怎么还原到XP中启动状态?
头像
anriqing
帖子: 189
注册时间: 2008-08-19 12:59

Re: [已解决]如何在Windows下添加对GRUB的引导

#15

帖子 anriqing » 2008-10-17 20:10

leikang 写了:在XP和fedora双系统中怎么正确卸载Fedora系统,我在装Fedora时使用GRUB引导双系统,怎么还原到XP中启动状态?
通过fdisk.exe工具恢复XP的MBR,然后进入XP后删除Linux的分区即可。需要注意的是fdisk.exe与具体使用的DOS版本必须匹配。
Windows Vista Ultimate SP1 CHS + Ubuntu 8.04.1 desktop i386

CPU:Intel Core 2 Duo T7250 RAM:2048MB DDR2-667
VGA:NVidia Geforce 8400M GS 128MB HD:SumSung 160G 5400R
LAN:Broadcom NetLink WIFI:Intel 3945ABG
WebCam:2.0M
回复