grub4dos是最好的多重操作系统引导管理器。我们常常需要用grub4dos来引导多个操作系统,或者是通过grub4dos来引导启动操作系统的安装程序。
基本的实现是:
一、在现有的操作系统上引导启动grub4dos
二、用grub4dos引导启动别的操作系统或者操作系统的安装程序。
一、在现有的操作系统上引导启动grub4dos
首先请下载最新版的grub4dos,google搜grub4dos,即能找到下载地址,推荐:http://download.gna.org/grub4dos/
下载后先解压
1、xp引导启动grub4dos
从grub4dos中提取一个名为grldr的文件,其它的都不需要。把这个文件放到xp系统盘的根目录下,然后用记事本打开系统盘根目录下的文件boot.ini,请注意,这个文件是只读和隐藏的,先要去掉只读和隐藏,才能够看到和改写的。在里面最后添加一行如下:
c:grldr=grub4dos
请注意,这里的c:是假设你的系统盘是c盘。其实活动主分区在xp下都是c盘,所以你也没太可能是其它的盘吧。
存盘后,在开机时候的操作系统选择菜单上,选择grub4dos进入,也就启动grub4dos了。
2、win7和vista引导启动grub4dos
从grub4dos中提取名为grldr和grldr.mbr这两个文件放到windows 7的启动盘(windows7的windows文件夹所在的盘)的根目录下。在记事本中写入如下命令,保存为:创建grldr.mbr启动项.bat右键以管理员身份运行,可以一键创建grldr.mbr的启动项:
==============================
bcdedit /create{ffffffff-8d96-11de-8e71-ffffffffffff} /d "grub4dos" /applicationBOOTSECTOR
bcdedit /set {ffffffff-8d96-11de-8e71-ffffffffffff} devicepartition=%systemdrive%
bcdedit /set{ffffffff-8d96-11de-8e71-ffffffffffff}path grldr.mbr
bcdedit /displayorder {ffffffff-8d96-11de-8e71-ffffffffffff}/addlast
bcdedit /timeout 5
@pause
==============================
另外,请在记事本中写入如下命令,保存为:删除grldr.mbr启动项.bat,右键以管理员身份运行,可以删除我们用前一个批处理所建立的启动项:
==============================
bcdedit /delete{ffffffff-8d96-11de-8e71-ffffffffffff}
@pause
===================================
批处理其实是调用bcdedit命令添加grldr.mbr的启动项,但没有写得很复杂(因为没有必要),所以如果已经存在着一个相同的{ffffffff-8d96-11de-8e71-ffffffffffff}标识符的话,则运行的时候会报错,但99.999%可以保证你的电脑上不会预先存在着这样的一个标识符的。如果有的话,你已经是很懂得bcdedit命令了的,所以不会用我这样的傻瓜式批处理的了。
下面让我们看看如何手动用bcdedit命令添加grldr.mbr的启动项。
以管理员身份运行cmd,在cmd中输入如下命令并回车(命令不区分大小写,但请注意命令中的空格):
bcdedit /create /d "ubuntu" /application BOOTSECTOR
这个命令会得到一个如同下面样式的标识符:
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx}
(比如: {2e850b34-8d96-11de-8e71-d1c665e3cb34})
为了避免手动写入标识符出错,我们可以在CMD中右击,点标记,然后拖动鼠标,选定这个{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx},再点一下右键,也就复制了。然后我们可以在CMD中右击,点粘贴,可以把我们复制的内容粘贴到CMD中。
再一条一条地运行如下四条命令:
bcdedit /set {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx} devicepartition=c:
(这里面的c:是windows7的启动盘,也就是你放grldr和grldr.mbr这两个文件的盘,如果你的不是c盘,请改为对应的盘符)
bcdedit /set{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx}path grldr.mbr
bcdedit /displayorder {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx}/addlast
bcdedit /timeout 5
当你不再需要这个添加的grldr.mbr的启动项的时候,你可以以管理员身份运行cmd,用下面的命令删除它:
bcdedit /delete {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx}
如果你忘了这个标识符{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx},可以以管理员身份运行cmd,输入bcdedit命令后回车,你可以找到这个标识符的。
3.在基于grub引导的linux下添加grub4dos的启动项,比如ubuntu9.04和fedora12,都是基于grub引导的。
从grub4dos提取一个名为grub.exe的文件,把这个文件放到一个盘的根目录下,然后:
用文本编辑器打开:/boot/grub/menu.lst
在末尾添加一段如下:
================
title grub4dos
root (hdx,y)
kernel /grub.exe
boot
================
注意,root(hdx,y),要把这里面的x和y改成你存放grub.exe文件的硬盘编号和分区编号,比如:(hd0,8),须要注意的是,ubuntu9.04使用的是grub,而不是grub2,它的硬盘编号也是从0开始的,这与grub2是一样的,但分区编号也是从0开始的,这与grub2不同。主分区是0123,逻辑分区是456.......... 所以在grub2下如果是(hd0,9),在grub下就是(hd0,8)
4.在基于grub2引导的linux下添加grub4dos的启动项,比如ubuntu9.10
用文本编辑器打开:/boot/grub/grub.cfg
在末尾添加一段如下:
==============
menuentry "Grub for Dos" {
insmod ntfs
set root=(hdx,y)
linux /grub.exe
}
============
注意,root (hdx,y),要把这里面的x和y改成你存放grub.exe文件的硬盘编号和分区编号
二、用grub4dos引导启动别的操作系统或者操作系统的安装程序。
1、grub4dos引导启动xp系统
menu.lst文件的写法是:
=====================
title winxp
find --set-root /ntldr
chainloader /ntldr
boot
====================
请注意,这里find --set-root/ntldr的写法。这个命令的作用是,全盘搜索各分区根目录下的ntldr文件,搜到即停止并把这个文件所在的分区设为root分区。这就意味着,如果你的全盘根目录下只有一个ntldr文件,命令能很准确地定位。如果存在着多个,则命令是按照分区顺序进行搜索的,搜到了前面的,就不会再往后搜,所以可能不能准确地定位。解决的办法:1是全盘的根目录下只保留一个名为ntldr的文件,但有时这不太现实。2、在要引导的分区随便新建一个文件,给这个文件取一个名字,这个文件名字是全盘唯一的。然后把这一行改为:
find --set-root /你所新建的文件名
还有一种写法是,把这一行写成:
root (hdx,y)
这种写法需要准确地指定分区,这对于菜鸟有时不那么现实。
以下的find --set-root的写法都与这个是一样的。
2.grub4dos引导启动win7和vista
menu.lst文件的写法是:
===================
title win7
find --set-root /bootmgr
chainloader /bootmgr
boot
=========================
3.grub4dos引导启动基于grub引导的linux系统。
由于grub引导的linux系统自带有menu.lst文件,所以我们不需要自己手动建立menu.lst文件,启动grub4dos后,它会自动搜索linux的menu.lst文件并启动linux系统。
4.grub4dos引导启动基于grub2引导的linux系统
menu.lst文件的写法是:
==================
timeout 0title grub2
default 0
find --set-root /boot/grub/core.img /grub/core.img
kernel /boot/grub/core.img
boot
==================
5.grub4dos引导启动ubuntu9.04的livecd
从网上下载ubuntu的iso文件,把它放在一个盘的根目录下,这个盘可以是ntfs的,也可以是fat32的,当然,它也可以是linux的文件系统.只是不要把这个文件放在你要安装系统的分区上就行了(这句纯是废话啦!)
用winrar或者其它工具从iso文件中提取Casper下的vmlinuz和initrd.gz两个文件到这同一个盘的根目录下.
在这个盘的根目录下,新建一个文本文件,把它重命名为:menu.lst
在这个文件里面写入如下命令:
================================
title Install Ubuntu
find --set-root /ubuntu-9.04-desktop-amd64.iso
kernel /vmlinuz boot=casperiso-scan/filename=/ubuntu-9.04-desktop-amd64.isolocale=zh_CN.UTF-8
initrd /initrd.gz
===============================
注意,这个命令里面的ubuntu-9.04-desktop-amd64.iso是下载的iso文件的名字,你的文件可能不是这个名字,所以要把它改为你自己的文件的名字。
6.grub4dos引导启动ubuntu9.10的livecd
从网上下载ubuntu的iso文件,把它放在一个盘的根目录下,这个盘可以ntfs的,也可以是fat32的,当然,它也可以是linux的文件系统.只是不要把这个文件放在你要安装系统的分区上就行了(这句纯是废话啦!)
用winrar或者其它工具从iso文件中提取Casper下的vmlinuz和initrd.lz两个文件到这同一个盘的根目录下.
在这个盘的根目录下,新建一个文本文件,把它重命名为:menu.lst
在这个文件里面写入如下命令:
================================
title Install Ubuntu
find --set-root /ubuntu-9.10-desktop-amd64.iso
kernel /vmlinuz boot=casperiso-scan/filename=/ubuntu-9.10-desktop-amd64.isolocale=zh_CN.UTF-8
initrd /initrd.lz
===============================
注意,这个命令里面的ubuntu-9.10-desktop-amd64.iso是下载的iso文件的名字,你的文件可能不是这个名字,所以要把它改为你自己的文件的名字。
7.grub4dos引导启动fedora12的livecd
下载fedora 12 livecd的映象文件,比如:
Fedora-12-i686-Live.iso
提取Fedora-12-i686-Live.iso内的LiveOS文件夹到一个分区的根目录下,提取Fedora-12-i686-Live.iso内isolinux文件夹里的vmlinuz0initrd0.img到这个分区的根目录下。
menu.lst中写入如下内容:
========================
title Fedora-12-i686-Live
find –set-root /vmlinuz0
kernel /vmlinuz0 root=live:LABEL=INSTALL rootfstype=auto ro liveimgquiet rhgb
initrd /initrd0.img
========================
LABEL=INSTALL是指定了用来引导livecd的分区的卷标。需要把卷标INSTALL换成你自己的。在我的电脑里面看到的某个盘的名字,就是这个盘的卷标。如果你的分区没有卷标,在我的电脑里面右击它,点重命名,给它取一个名字即可。但不要用中文。grub可能不支持中文卷标。linux下可以用e2label命令给分区指定卷标。
8.grub4dos引导iso文件,menu.lst文件的写法是:
=================
title xxx.iso
find --set-root /xxxiso
map /xxxx.iso (hd32) || map--mem /xxxx.iso (hd32)
map --hook
chainloader (hd32)
=================
9.grub4dos引导img文件,menu.lst文件的写法是:
=====================
title xxx.img
find --set-root --ignore-floppies /xxx.img
map /xxx.img (fd0) || map --mem /xxx.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
====================================
按:转载请不要删除原文链接,这是对于创作者基本的尊重http://blog.sina.com.cn/s/blog_49f914ab0100hppw.html