`
jaychang
  • 浏览: 734542 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

有关Windows启动,GNU GRUB和GRUB4DOS的一些启动流程与细节汇总

    博客分类:
  • OS
 
阅读更多
上手grub一阵了,看了很多的启动资料,想着做一个汇总会让自己条理更清晰,同时也可以给新来快速查找menu.lst代码和细节问题的朋友带来帮助,就写下了此帖。如果有错误请指正。

主要是一个汇总和整理工作,如果让一个全新上手的同学来用,会有很多不清楚的地方,还是希望多看置顶帖和在站内google。2006年以后的都有很大的参考价值!

首 先,grub分两种,一种是ubuntu默认安装的,叫GNU grub,现在9.10默认为GNU grub2,而中国的网络爱好者开发了一款更灵活的引导器,叫grub4dos,和GNU grub一代有着一个相似之处,就是读取相同格式的menu.lst来显示启动列表,而grub2只认识grub.cfg文件。GNU grub一代有诸多弊端,所以才有了grub4dos的方便,同时,GNU grub2的自动化特性非常好,几乎完全取代GNU grub,但经常我们还是用grub4dos,因为灵活性高。

网上经常把GNU grub简称为grub。grub4dos经常直接以grldr这个关键文件来称呼。

一、MBR的选择

是硬盘上开头不算入分区的、看不见的一块区域,一个扇区大小,被BIOS调用。

1.若要写入或恢复XP版本的MBR,用任意一张带DOS的光盘,输入fdisk /mbr就可修复成win98/dos的MBR,可以顺利引导xp。MBR会自动寻找被激活的主分区的引导记录。

2.Vista和Win7使用新的程序写入MBR,所以直接用DOS或xp的恢复是不推荐的。
方法有三:

i>vista的光盘启动系统故障修复控制台,输入bootrec /fixmbr:
微软说明:
引用:
要运行 Bootrec.exe 工具,必须启动 Windows RE。为此,请按照下列步骤操作:

1. 将 Windows Vista 安装盘放入光盘驱动器中,然后启动计算机。
2. 在系统提示时按某个键。
3. 选择语言、时间、货币、键盘或输入法,然后单击“下一步”。
4. 单击“修复计算机”。
5. 单击要修复的操作系统,然后单击“下一步”。
6. 在“系统恢复选项”对话框中,单击“命令提示符”。
7. 键入 bootrec /fixmbr,然后按 Enter。


ii>或使用mbrfix程序,网上下载它,存起来,在winpe下,进入所存的目录,
代码:
mbrFix /drive 0 fixmbr /vista /yes

详见yang_hui1986527 彻底清除grub,恢复MBR的两种方法
Mbrfix是款很好的程序,配合MS原装的bootsect.exe,任何windows的启动问题都可以顺利修复。

iii>还有款软件叫diskgenius,也可方便地修复,它可以用于windows下,也可用winpe进入。还可以用来进行硬盘丢失数据恢复http://www.diskman.cc/

3.安装GNU grub或grub2进入MBR:

<i> 对于GNU grub一代,也可安装ubuntu 9.04或以前版本自带的GNU grub进入MBR,ubuntu默认安装,如果没有,在后期手动安装时要指明root分区在哪里,也就是GNU grub去哪个分区找相关的配置文件menu.lst。它会搜索相关分区的/boot/grub/menu.lst。
分区的系统或9.04的LiveCD下:
代码:
$ sudo grub
grub > root (hdX,Y-1) #你的ubuntu分区
grub > setup (hdX) #启动硬盘的MBR
grub > quit

引用:
Windows 位于第一块硬盘的第一个分区,在Linux下表示为sda1,在Grub下表示为(hd0,0),而Linux位于sdaX,用Grub表示为(hd0, X-1)。——Linux下的硬盘分区计数是从sda1开始的,而Grub的硬盘分区计数是从(hd0,0)开始的,所以sdaX就是(hd0,X- 1)。这里X如果在1-4之内,说明Linux分区是主分区,如果X大于4,说明Linux分区是逻辑分区。

上面的不论GNU grub或grub4dos均成立,而GNU grub2认为硬盘从0开始编号,分区从1开始


<ii>对于GNU grub2,sudo grub命令已经不能使用了。
在9.10或以后版本的livecd下:
安装grub进入选择的地方:
代码:
假如你的ubuntu的 / 分区是sda7,又假如 /boot分区是 sda6,用livecd启动,在终端下输入
sudo -i
mount /dev/sda7 /mnt
mount /dev/sda6 /mnt/boot (如果没 /boot 单独分区这步跳过)
grub-install --root-directory=/mnt  /dev/sda
要装入第二硬盘的把sda改为sdb。




需要说明,不论grub1还是grub2,此时不会改动你的menu.lst或grub.cfg,而全新安装ubuntu(第7或8步有个“高级”选单)会安装grub到指定的地方,然后为你配置menu.lst(grub.cfg)。

如果分区状况改变,进不去ubuntu了,下面的情况会生成新的menu.lst 或grub.cfg文件,解决问题


在需要更改的操作系统下直接:
代码:
sudo update-grub


或在对应版本的livecd下:

代码:
假如你的ubuntu的 / 分区是sda7,又假如 /boot分区是 sda6,用livecd启动,在终端下输入
sudo -i
mount /dev/sda7 /mnt
mount /dev/sda6 /mnt/boot (如果没 /boot 单独分区这步跳过)

mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys

chroot /mnt update-grub(生成menu.lst或grub.cfg)

umount /mnt/sys
umount /mnt/dev
umount /mnt/proc
exit


跟着提示走,重启。

4.想把grub4dos写进MBR来启动的,三选一:

i>用bootlace.com在DOS/linux下:DOS:bootlace 0x80 Linux:bootlace /dev/hda

ii>用grub4nt中的grubinst.exe在NT以上的windows/linux命令行下:grubinst (hd0)

iii>用GUI版(图形界面)grubinst_gui.exe在windows下(当然WinPE也行)方便地安装(附件)。

二、MBR->分区

下面讲了一些从MBR到分区的引导的过程,在大的框架方面应该比较清楚了~

主和逻辑分区上各有一个引导扇区,可以不填充任何东西。

现行的分区表要求主+扩展分区<=4,扩展分区不能被主分区间隔开。逻辑分区在扩展分区中可以多个。主分区中只有一个能被激活。这些是需要被注意的。

1.Windows 的MBR会读取主、激活分区的第一扇区内的代码,然后它寻找ntldr文件或bootmgr,这两个文件可以在操作系统下直接看见,若删除再重新拷入,还 可以用。XP和2000系统使用ntldr这个系统盘根目录下的文件,Vista和Win7使用bootmgr。
对XP:xp的MBR程序->主、激活分区的第一扇区内的代码->ntldr
对Vista和win7:MBR程序->主、激活分区的第一扇区内的代码->bootmgr

2. 若GNU grub安装入MBR中,则MBR的GNU grub寻找当时安装它指定的目标分区/boot/grub/menu.lst。(可以使用grub4dos的grldr调用分区中的GNU grub)。GNU grub2去/boot/grub/grub.cfg

3.若grub4dos安装入MBR中,MBR中grub4dos寻找:

第一分区根目录下的grldr,找不到就去其他盘的根目录;
然后grldr寻找:
第一分区下的menu.lst,找不到的话,去找/boot/grub/menu.lst,再找不到就去其他分区,只取最先找到的;

三、分区

1.对XP,ntldr读取同目录的boot.ini,里面可以另外添加其他的如grldr的引导器的相关行。

2.对vista和win7,bootmgr读取同目录Boot文件夹里的bcd文件,这个文件需要用vista下的bcdedit.exe在命令提示符cmd下打开,或者用windows下easybcd来编辑。

3. 对GNU grub,它装入主分区上时,使用grub4dos的grldr配合和grldr放在一起的(最好是这个,清晰明确,在根目录下)menu.lst,编辑 menu.lst加上chainloader +1来调用(menu.lst的第三个)。GNU grub会读取所在分区的/boot/grub/menu.lst用以显示启动列表。

安装:

代码:
$ sudo grub
grub > root (hdX,Y-1)
grub > setup (hdX,Y-1)
grub > quit

X,Y的规定见上文。

4.grub4dos一般安装到分区上的情况不多,而且如果写入ntfs的分区,还不能顺利被识别,一般直接用grldr这个文件就可以了。



四、Grub4dos的menu.lst写法

UUID是硬盘分区的重要标志,linux广为使用,格式化后或重新分区后uuid会变化。

uuid的显示方法:
代码:
$ ls -al /dev/disk/by-uuid


1.直接启动ubuntu内核:

代码:
系统自带的:

title      Ubuntu
uuid      xxxxxxxxxxxxxxxxxx
kernel      /boot/vmlinuz-yyyyyyyyyyyyy root=UUID=xxxxxxxxxxxxxxxxxxx ro quiet splash
initrd      /boot/initrd.img-yyyyyyyyyyyyy
yyyyyyyyyyyyyyy为相应的内核,xxxxxxxxxxxxxxxxx为相应分区的uuid。查看uuid可以用gparted,也可以在终端输入 ls -al /dev/disk/by-uuid。
————————————
只有一个安装linux的分区,图简单和方便,可以:

title      Ubuntu   
find --set-root /vmlinuz
kernel  /vmlinuz  ro ignore_uuid quiet splash
initrd  /initrd.img


2.启动主分区可能存在的GNU grub或GNU grub2:

代码:
title Ubuntu
rootnoverify (hdx,y)
chainloader +1


x为硬盘号,一个硬盘的话,就是0。y为分区号,从0开始,具体请查grub的编号方法,这是重要的基础知识。

3.启动主分区可能存在的ntldr、bootmgr进入windows的启动列表(需要主分区):

代码:
title Windows
rootnoverify (hdx,y)
makeactive
chainloader +1
对xp,也可:chainloader (hdx,y)/ntldr
对vista和7,也可:chainloader (hdx,y)/bootmgr
x,y为相应硬盘号和分区号


4.启动ubuntu liveCD 进行修复或安装(也适合U盘使用,请把grub4dos写进U盘的MBR,放入grldr文件,编辑menu.lst如下)

代码:
title Install Ubuntu

find --set-root /installation.iso
kernel /vmlinuz boot=casper iso-scan/filename=/installation.iso ro quiet splash locale=zh_CN.UTF-8
initrd /initrd.gz


相应的iso文件改成installation.iso,9.10的desktop版的initrd用initrd.lz

5.引用其他menu.lst项

代码:
title       Other menu.lst
configfile    (hdx,y)/boot/grub/menu.lst

引用相应的menu.lst作为次级菜单

5.进入Wubi的Ubuntu,9.04为例,9.10请找出相应的核的全称:

代码:
title      Ubuntu 9.04 wubi
root      (hdx,y)/ubuntu/disks
kernel      /boot/vmlinuz-2.6.28-15-generic root=UUID=xxxxxxxxxxxxxxx loop=/ubuntu/disks/root.disk ro quiet splash
initrd      /boot/initrd.img-2.6.28-15-generic


当然,下面的方法不用找核的全称,也许也可以:
代码:
title      Ubuntu 9.04 wubi
root      (hdx,y)/ubuntu/disks
kernel      /vmlinuz root=UUID=xxxxxxxxxxxxxxx loop=/ubuntu/disks/root.disk ro quiet splash
initrd      /initrd.img


xxxxxxxxxxxxxxxxx解释同上。UUID为ubuntu文件夹所在分区真正的UUID,那个分区其实是一个ntfs或fat32的。

6.创建软盘img的引导项(用来制作方便地进入DOS版 ghost或其他的U盘,需要的人拿走)
代码:
title xxxxxx
map --mem (hd0,0)/xxx.IMG (fd0)
map (fd0) (fd1)
map --floppies=2
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

xxx.img为想要添加的img文件



五、总结

那么,有几种常用的配置windows和ubuntu启动的方法呢?
1、BIOS->xp的MBR或者Vista配置过的MBR->windows引导扇区->ntldr/bootmgr->boot.ini
->(grldr.mbr->)glrdr->menu.lst->ubuntu
->Windows
2、BIOS->MBR中的GNU grub->/boot/grub/menu.lst
->ubuntu
->Windows
3、BIOS->MBR中的Grub4dos->grldr->menu.lst
->ubuntu
->Windows

第一种是最容易变动和恢复的,所以很多人其实不选择把CD上自带的GNU grub装入MBR,而只是装入所在分区,只是为了得到一个配置好的menu.lst或grub.cfg,然后用方法1来引导,这也是推荐的措施。

xp或vista搭配ubuntu9.04或更早以前的为例,具体:

0、恢复windows的引导
从前面的知识,如果windows的那串引导链出了问题,我们可以按需要一点点把它补上。mbrfix.exe重写mbr,bootsect.exe重写windows启动分区的引导扇区。
代码:
bootsect /nt52 C:

具体的,/nt52为xp对应的代码,/nt60为vista和7对应的,C:就是安装到C:盘

1、下载grub4dos最新的包,拿出grldr(vista和7还要grldr.mbr)放到windows分区根目录

2、编辑boot.ini,vista就新建一个。
XP在最后一行回车,加上
代码:
C:\grldr = “Ubuntu”


vista新建:
代码:
[boot loader]
[operating systems]
C:\grldr = “Ubuntu”





Win7用ubuntu9.04或更早(9.10需要参考一下,但是不要下载它的附件)的同学具体请看:
vista 或 win7 下添加 grub4dos 启动项的简便方法(本法和软改 bios 有冲突,请慎用)此为9.04以及以下版本的。

如果win7给您分了一个100MB的“隐藏”分区,请在我的电脑右键-管理-磁盘管理中给它分配一个盘符再打开那个盘,所有的要复制粘贴的就不再是在C:里完成,而是在这个分区,使用后可以把盘符删掉

Win7+ubuntu9.10的同学用本帖子的附件LDRs,用相似xp的方法。9.10使用修改过的grldr,现在就叫g2ldr吧。附件的LDRs里有下载,都是论坛资料。

引用:
boot.ini实在不能用的话,就编辑bcd文件吧。

把那些相应的文件拷到C:下,删掉上面的boot.ini,开始菜单,搜索cmd,用右键管理员模式打开:

  1.在命令界面bcdedit /create /d "Ubuntu" /application bootsector
得到像c:\windows\system32>bcdedit /create /d "Ubuntu" /application bootsector//多启动菜单上显示的名字项{dbff544b-a7c4-11dd-a51d-00155803ebb4} 成功创建。
  2.把{}中的id复制下来,如:dbff544b-a7c4-11dd-a51d-00155803ebb4
  3.再输入下列命令 (注意:自己替换下面{}中的id为第2步得到的id,xxxxx为grldr或g2ldr)
   bcdedit /set {id} device partition=c:
   bcdedit /set {id} path \xxxxx.mbr
   bcdedit /set {id} description "Ubuntu"
   bcdedit /displayorder {id} /addlast

以后删除用bcdedit /delete {id} /f




——————————————————————————————————————————————

附几个解释:

引用:
makeactive

makeactive 用来激活的主分区,现在的grub好像可以直接chainloader +1进入逻辑分区,但以前是需要激活的主分区的。对回复windows的引导,这是一个挺有用的命令。如果安装其他系统没有改变mbr,删除linux, 但是windows却意外启动不了了,那很大可能就是windows的分区未被激活,用livecd的grub命令激活之即可。比如fedora系统会默 认把自己的分区设为激活分区,霸道吧。

详见http://forum.ubuntu.org.cn/viewtopic.php?f=139&t=214256http://forum.ubuntu.org.cn/viewtopic.php?f=139&p=1527805

chainloader +1

chainloader +1用来对makeactive所激活的主分区加以引导,同上:它只能引导主分区,所以通常是用来引导Windows系统,而linux系统可以安装在扩 展分区上的逻辑分区,通常是使用kernel和initrd这种功能更为强大、灵活的引导方式;

对于是否要makeactive,billbear说98后的系统就不需要makeactive了,即使是未激活的主分区也可以load。(未尝试)




六、[附]grub4dos制作一个U盘版WinPE
引用:
1、grldr放入U盘
2、用前面讲的方式把grub4dos写入优盘MBR(看好了!)
3、编辑一个menu.lst,添加也可

代码:
title PE
root (hd0,0)
chainloader /ldrxpe


4、下载一个pe的iso,推荐laomaotao的。
除了auturun.inf,SETUP文件夹,其他全拿出来放在U盘根目录下,把WXPE中的两个文件取出放到U盘根目录,SETUPLRD.bin改名ldrxpe。

开机就可以用了



相关的帖子

xiaoyong:[分享]Linux与Windows双系统下的Grub引导管理器安装——boot.ini与menu.lst的例解
这个帖子讲得很细,同时还给出了很多有用的相关链接。

Grub4dos的wiki,底下有中文的

下载grub4dos最新版

【已解决】想知道windows的系统分区第一扇区到底是什么

Bill大牛的Live Ubuntu Backup V1.2,备份你的 ubuntu 为可启动的 squashfs 文件

grub2基础教程-修订版 smallapple
很好的教程,关于grub2修复的重要语句是从他这里拿来的。详细请见。

14楼及后面有billbear对windows的mbr和grub的mbr引导系统的一些过程阐述,有技术含量



附件:
文件注释: grub_inst。图形化的grub4dosmbr安装器。windows包括winpe下可用。
grubinst-1.1-bin-w32-2008-01-01.rar [62.79 KiB]
被下载 113 次
文件注释: 09.6.20的grub4dos完整包
grub4dos-0.4.4-2009-06-20.zip [809.5 KiB]
被下载 436 次
文件注释: bootsect和mbrfix直接下载
Tools.zip [105.54 KiB]
被下载 81 次
文件注释: 附赠几个ldr~花点时间看明白了再用好吧~
LDRs.zip [242.01 KiB]
被下载 116 次
分享到:
评论

相关推荐

    GRUB for DOS(GRUB4DOS)

    现在接触到的有3种,即GNU Grub Legacy , GNU Grub2 和 Grub for dos(grub4dos)。 GNU GRUB Legacy其实就是原来的 GNU GRUB 0.xx ,最新版是2005年发布的GNU GRUB 0.97。 目前已停止开发,并改名为 GNU GRUB ...

    GRUB4DOS使用大全

    GRUB4DOS 是一种基于 GNU GRUB Legacy 的开源启动加载器,它可以在多种平台上运行,包括 DOS、Windows 和 Linux。GRUB4DOS 的主要特点是它可以模拟软盘镜像或硬盘镜像,虚拟成软驱或硬盘,进而运行其中的操作系统。 ...

    grub4dos v0.44.zip

    Grub4dos是一个优秀的双(多)系统引导软件,使用GRUB4DOS可以很方便的引导各种操作系统,比如DOS、Windows、 Linux等。 GRUB 是一个遵从Multiboot(多重启动)规范的启动管理程序。现在接触到的有3种,即GNU Grub ...

    grub4dos是一个遵从Multiboot(多重启动)规范的启动管理程序

    GRUB 是一个遵从Multiboot(多重启动)规范的启动管理程序。现在接触到的有3种,即GNU Grub Lagecy , GNU Grub2 和 Grub for dos(grub4dos)。...GNU GRUB与GRUB4DOS的不同之处,可参看相关说明文件。

    grub4dos引导U盘启动MaxDos

    **GRUB for DOS (GRUB4DOS)** 是一个基于GNU GRUB的功能强大的启动加载器,能够支持多重启动规范(Multiboot)。这款工具不仅能够在DOS和Linux环境下运行,还能通过其他启动器来启动,甚至可以直接作为主引导记录(MBR)...

    Grub4dos 文档

    4. **Config File**(menu.lst):Grub4dos 的配置文件,用于定义启动菜单和相关选项。 **三、Grub4dos 的配置与使用** 1. **menu.lst** 配置:通过编辑 menu.lst 文件,可以定义启动菜单的各个选项,包括操作系统...

    Grub4Dos.rar

    《Grub4Dos:连接Windows与Linux的桥梁》 在计算机操作系统的世界里,Windows和Linux是两大主流系统,而如何在它们之间灵活切换,成为了很多用户的实际需求。Grub4Dos,作为一款强大的引导装载程序,就是实现这一...

    grub4dos工具

    - **Windows与Linux共存**:GRUB4DOS可以轻松引导多版本的Windows和Linux,只需在menu.lst中添加相应的引导项。 - **隐藏分区引导**:对于隐藏分区上的操作系统,GRUB4DOS同样能够识别并引导。 5. **系统恢复与...

    grub4dos_0.4.4

    GRUB4DOS是一款在个人计算机上广泛使用的引导加载程序,它基于GRUB(Grand Unified Bootloader)并针对DOS环境进行了优化。GRUB4DOS的版本为0.4.4,这是一个较早但仍然广泛应用的版本,因为它稳定且功能丰富。 1. *...

    grub4dos-0.4.4-2009-01-11

    A20只是改造的一个方面,在GRUB4DOS的开发过程中修复的GNU GRUB 0.97的bug还有很多,有些在Changelog中并没有提到。到目前为止,已经把那些严重的BUG排解殆尽了,应该可以比较平滑地使用GRUB4DOS了。 2、磁盘仿真...

    grub4dos标准工具

    【grub4dos标准工具】是一个在IT领域中用于引导管理的重要工具,尤其在系统安装和修复过程中扮演着关键角色。grub4dos是GRUB(Grand Unified Bootloader)的一个衍生版本,专为DOS环境设计,使得用户可以在多操作...

    grub4dos-0.4.4.rar

    - 多系统启动:如果你的电脑上有Windows、Linux和其他操作系统,GRUB4DOS可以设置启动菜单,让用户在开机时选择要启动的系统。 - 故障排除:通过GRUB4DOS的命令行界面,你可以直接在启动时运行诊断工具或修复脚本...

    grub4dos-0.4.5b-2011-12-27.7z

    GRUB4DOS是基于GNU GRUB的引导加载器,它能够识别多种文件系统,并支持从硬盘、光盘、USB设备等多种存储介质启动操作系统。其核心功能包括: 1. **多系统启动**:GRUB4DOS可以引导多种操作系统,如Windows、Linux、...

    grub4dos-0.4.6a.zip

    GRUB4DOS是一款强大的引导装载程序,源自GNU GRUB,专为管理和引导多个操作系统而设计。它在IT行业中扮演着重要角色,特别是在处理复杂的系统环境时,如同时拥有DOS、Windows和Linux等不同操作系统的计算机。GRUB4...

    GNU GRUB 4(version0.4.4)

    GNU GRUB(简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。 GRUB还可以用来安装linux(不用刻盘,直接硬盘安装)……当然也还...

    在Windows下创建grub2 BIOS版本和UEFI版本程序

    1. 安装交叉编译工具链:由于GRUB2是用GNU工具链编译的,你需要在Windows上安装MinGW或Cygwin等工具,以获取GCC编译器和相关工具。 2. 获取GRUB2源码:从GRUB2官方网站或者GitHub仓库下载最新源码,如你提供的`...

    grub4dosv1.1

    GRUB4DOS通过其强大的命令行界面提供了对启动过程的精细控制,同时支持配置文件,使得非程序员也能通过修改配置来定制启动菜单。 压缩包中的文件各有其用途: 1. **g2hdr.bin**:这是GRUB4DOS的一个组件,通常用于...

    grub4dos4.40

    GRUB4DOS是一款强大的引导装载程序,全称为Grand Unified Bootloader for DOS,它扩展了原始的GRUB(Grand Unified Bootloader)的功能,允许用户在同一个系统上实现多操作系统启动,包括Windows 7、Windows 8、...

Global site tag (gtag.js) - Google Analytics