关于PC的启动引导器(Bootloader)

关于PC的启动引导器Bootloader
作者:febird, 转载请注明出处

启动引导器就是就是提供给BIOS的一个用于装载磁盘(或者其他存储介质)上的操作系统的一个程序。

通常放在硬 盘的MBR(Main Boot Record主引导记录),它位于磁盘的0柱面0磁道1扇区,在文件系统之外(当然高级的引导加载器可以放置在文件系统里面作为多级引导,也有的可以放在物理分区的引导块), 但是每一个可启动设备通常都有一个MBR,里 面包含了从该设备启动系统的可执行代码,通常作用有:初始化内存,解释文件系统,加载操作系统内核等等作用。

因为MBR引导代码大小有限制,高级的引导器通常还有其他部分,例如Grub 阶段1.5 阶段2 的stage文件,grub4Dos的 grldr、grub.exe,NTLoader的ntldr等等。

高级的引导器还有启动配置文件,例如grub的menu.ls,NTloaer的 boot.ini 、syslinux的syslinux.cfg,lilo的lilo.conf,这些都方便我们配置启动引导器。

下面分别一下常见的几种引导加载器

一. 用于DOS或Win98的引导代码

必须放在MBR,需要IO.SYS,如果需要引导进入DOS Shell 则必须有command.com
如果使用了CONFIG.SYS 配置文件,则command.com可以为其他文件名
DOS的启动代码不支持多重启动,除非你进入 command.com之前在AUTOEXEC.BAT或者CONFIG.SYS 中 执行了grub.exe 或者 DEVICE=grub.exe 命令,这样就会进入Grub4Dos的管辖(Grub4Dos里会有详细说明)。

如下面的CONFIG.SYS写就可以实现用(路径可能有变化):

REM 下面的一行用来切换到 GRUB
device=GRUB\grub.exe –bypass –time-out=8 –config-file=grub\menu.lst

DEVICE=FebirdDOS\ECHO.SYS W/e/l/c/o/m/e /t/o MS-DOS 7.10…
DEVICE=FebirdDOS\ECHO.SYS C/o/p/y/r/i/g/h/t M/i/c/r/o/s/o/f/t C/o/r/p. A/l/l /r/i/g/h/t/s /r/e/s/e/r/v/e/d.
DEVICE=FebirdDOS\HIMEM.SYS
DEVICE=FebirdDOS\EMM386.EXE NOEMS
DEVICEHIGH=FebirdDOS\SETVER.EXE
DEVICEHIGH=FebirdDOS\POWER.EXE
REM DEVICEHIGH=FebirdDos\VIDE-CDD.SYS /D:IDE-CD
REM COUNTRY=001,437,FebirdDos\COUNTRY.SYS
SHELL=COMMAND.COM /P /E:640
DOS=HIGH,UMB,AUTO
FCBS=4,0
FILES=30
BUFFERS=20,0
LASTDRIVE=26
STACKS=9,256

二.用于WindowsNT/2000/xp的 NTloader Vista 的 bootmgr

必须放在MBR , 需要 ntldr, ntdetect文件 (如果需要Bootloader的其他语言支持,需要相应的bootfont文件)

NTLoader在MBR中的那段代码,可以使用 fdisk /mbr 来给第一块硬盘增加 (fdisk 好像没有选择硬盘 写入mbr的命令开关)

如果Windows的引导被其他 引导程序覆盖,例如被Grub覆盖,或者被DOS的覆盖,那么你需要通过可启动软盘,光盘,移动硬盘等附带FDISK工具的微型系统盘来执行fdisk /mbr

如果磁盘MBR原来是写的DOS/WIN98的,安装NT系统(包括XP,2000等)后,Windows会将原来的MBR保存为 BOOTSECT.SYS. 然后再在Boot.ini中配置多重启动,例如可以用NTLoader加载Grub4DOS的grldr来进入 Grub4DOS具体配置请看“Boot.ini详解

值得注意的是,如果使用NTLoader,NTLDR文件(包括需要的NTDETECT,boot.ini,bootfont) 可以和WINDOWS分开 放在不同的磁盘分区,并且WINDOWS可以放在逻辑分区,但是NTLDR文件必须放在”主分区”,并且该分区为”激活”(因为NTLoader的MBR 部分代码会查找 磁盘“活动分区”上的 ntldr文件)。

还有就是multi(0)disk(0)rdisk(0)partition(1)\WINDOWS 这句中的 partition 是从1开始的,先编号主分区,然后再编号逻辑分区,并且忽略扩展分区。这个和Linux和Grub的计算方法不一样,Grub是扩展分区当成一个主分区也进行编号,但是并没有实际意义。
例如 有一块硬盘,第一个分区是主分区,第二个分区是扩展分区(里面包含若干个逻辑分区),第三个分区又是主分区而且在这个分区里面有我们需要启动的Windows,那么partition的()里面应该填2, 然而 grub里面这个分区从0开始应该是2 (hd0,2).

关于Vista的Bootmgr,没有太多的感受,主要还是我自己的电脑没有使用这个的原因。通过BCEdit等工具可以方便的修改Vista的多重启动。

三.GNU Grub/ LILO/ SysLinux

GNU Grub是一个相当强大的启动管理器,下面简单做一下说明,Grub可以安装在MBR,Linux的根分区,以及其他介质上面(比如软盘,光盘等),通常情况安装在MBR上比较方便,因为这样不需要安装其他的引导加载器,但是这会覆盖原来的MBR,不过好在安装Linux的时候会直接分析原来安装过的启动项(例如Windows),Grub Bootloader分为几个部分,第一部分为stage0,通常是放在MBR中或者根分区的 引导块中。stage1,stage1.5,stage2等等都分别放在文件系统中的,而且stage1.5 还有相应的不同的版本以适应不同的文件系统。
GNU Grub就是文件太多,不够简洁(当然也有它的好处),关于Grub能够讲很多,这里看详细介绍与使用: Grub详解

SysLinux, LILO也是一个比较常、主流的引导装载器,配置起来和 Grub大同小异,也可以用来引导诸多系统,由于平时我没有怎么使用,可以看这个关于LILO的详细的使用说明

四.Grub4Dos

上面讲到的Grub适合使用在Linux,BSD,Unix里,Grub4Dos吸取了GNU Grub的所有优点之后,最大的特点就是他还可以运行在 DOS平台,Grub4Dos是在Grub源码基础之上开发的,Grub4Dos青出于蓝胜于蓝,应用范围相当广泛,功能更加强大。

下载的 Grub4Dos通常包含 下面几个文件,grldr,grub.exe, bootlace.com menu.lst等。

Grub4Dos可以被其他的Bootloader二次引导

1.被 DOS 引导,就是上面写DOS引导程序的提到时候的,使用Device命令或者直接执行grub.exe。

2. 被NTLoader引导,这时grldr就相当于ntldr,只要在boot.ini中加入 一行 例如 C:\grldr=”BOOT GRUB ” (文件系统可以是 FAT32或者NTFS)

另外,grldr还可以通过 Vista的 bootmgr来加载

3. 被GNU Grub 引导
可以在Grub的menu.lst里面通过类似下面的代码。这时候 grub.exe作为内核加载,IMG是可启动软盘镜像

kernel (hd0,0)/grub.exe –config-file=”map (rd) (fd0); map –hook; chainloader (fd0)+1; rootnoverify (fd0)”
initrd (hd0,0)/DOS.IMG
boot

也可以不加任何参数加载:
kernel (hd0,0)/grub.exe
boot

4.从已经启动运行的Linux中转到 grub
kexec -l grub.exe
kexec -e

5.被LILO中引导
image=/boot/grub.exe
label=grub.exe

6. 被 SysLinux引导
label grub.exe
kernel grub.exe

Grub4Dos可以作为主引导程序,写入MBR,用来加载,grldr

将Grub4Dos写入MBR的方法是使用 bootlace.com,该程序运行于DOS环境和Linux环境,

bootlace.com [OPTIONS] DEVICE_OR_FILE

在Linux下写入硬盘MBR,类似:

bootlace.com /dev/hda

在DOS下类似 :

bootlace.com 0×80

Grub4Dos使用扩展的 kernel, chainloader 和 map 命令可以实现更多更强大的功能,具体请看Grub4Dos的README

关于Grub4Dos网络上有一个教程,我的Live Skydrive有下载 : grub4dos.chm

五.MacOS Darwin BootLoader

尽管 Mac OS X 可以通过 EFI启动,Mac OS X的”达尔文 ” Bootloader 在PC上面 也是可以发挥得很好 ,Darwin BootLoader也是既可以写入 MBR,也可以写入 分区的”启动扇区”

Darwin的 standalone 文件夹提供了基本上所有的 引导相关文件:

BOOT0 , BOOT1h, BOOT1u, BOOT ,BOOTEFI, CDBOOT ,BOOT.cat,CHAIN0,BOOTHELP.TXT

BOOT0用于写入MBR, BOOT1h BOOT1u 和 BOOT 共同构成了DARWIN的启动 其中BOOT1h写入HFS+文件系统的Mac的启动扇区,BOOT1U写入UFS文件系统的Mac,BOOT则写在不为人知的地方。 BOOTEFI 是EFI方式启动的启动文件, CDBOOT 和 BOOT.cat 用于光盘启动, CHAIN0 用于 GRUB等 链式启动。

后来有人做的的tboot是用来启动逻辑盘里的Mac。

大多数在普通PC机上面安装破解版的MacOS的一般都会是多系统,所以不会将Darwin Bootloader安装在MBR,都会选择安装在分区“引导块”,所以我这里只说一下我总结的一些,很多都是积累了很多前人的经验,我使用的是 uphuck 和 iTOAK.

如果启动代码写在 MBR ,必须保证 MacOS 分区是活动分区并且 Mac应安装在比较靠前的分区(1024之前)柱面,”活动分区” 可以通过分区工具 PM来做,或者是用Mac 启动盘提供的 fdisk

>fdisk -e /dev/rdisk0 #rdisk0指第一个硬盘
>flag X #将X分区激活
>update #更新分区表
>write #更改生效
>quit

想想要自己的MacOS分区(ufs,hfs)系统被其他Bootloader启动,Darwin的启动代码最好写在分区“引导块”上,同时Mac应安装
在比较靠前的分区(1024之前)柱面,这样才可以通过 chain0,tboot或者 grub 的 chainloader +1
等方式来启动。如果引导块没有写入这个引导代码,则可以通过光盘自带的工具startfiletool来解决.Mac OSX 的分区可以通过光盘进入
命令行,然后执行下面的命令

> unmount /Volumes/MacDriveName

> dd if=/usr/standalone/i386/boot1h of=/dev/rdisk0s1 bs=446 count=1
>starupfiletool /dev/rdisk0s1 /usr/standalone/i386/boot
>bless -drive /disk0s1 -setboot -verbose

Mac OSX 启动时,可按F8进入交互模式,输入:
[device] [arguments]

其中
device: rd= (e.g. rd=disk0s2)
rd=* (e.g. rd=*/PCI0@0/CHN0@0/@0:1)
kernel: kernel name (e.g. “mach_kernel” – must be in “/” )
例如:
mach_kernel rd=disk0s1 -v “Graphics Mode”=”4096x4096x32@85″

========

The End

相关日志

本文发表于星期三, 一月 9th, 2008 at 下午 6:22 文章归类于 Linux, 软件应用. 标签: , .
你可以去 留下评论, 或者

暂无评论

沙发.

我有话说

没有自己的个性头像?去搞一个吧,很简单的,只要去Gravtar登记一下就OK啦,绑定Email后就可以在全球使用的。

标注有 黑体 的域是必填的. 你的电子邮件地址是 永远 不会公开或者转交给第三方.

下面的HTML标记可用:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
URIs 必须书写完整 (例如: http://www.febird.net) 并且所有的标签都应该正确关闭.

换行符与段落标记将自动产生.

大家要注意了,XX言论 可能 会被和谐哦.

  1. 我的网络


  2. 标签云

  3. 推荐服务

  4. 分类目录


  5. 最近文章

    1. 2011年度小结
    2. 美国主机与翻墙
    3. Archos101平板安装openAOS系统
    4. 折腾能力下降
    5. 新浪微博与腾讯QQ正面竞争已经展开
    6. Google Talk 和 Google Voice 的终极整合
    7. “无法访问Windows Installer服务”解决方法
    8. 跨平台的移动应用开发框架-PhoneGap
    9. 七月
    10. 在电脑上K歌的设置
    11. 中国通货膨胀的原因
    12. 关于家族字辈
    13. 15款免费云存储服务
    14. 基于PHP的开源在线OA软件 Feng Office
    15. 在WordPress中展示Facebook相册
    16. MusicBrainz Picard–MP3自动标签匹配工具
    17. 荧光灯为啥不能直接装在普通调光台灯上
    18. 打电话时”已关机”和“无法接通”的区别
    19. Ubuntu下使用WindowsMediaCenter遥控器控制XBMC
    20. 非常酷的开源Media Center-XBMC
  6. 最近评论

    1. ninee's avatarninee
      不错,有收获,有计划!
    2. febird's avatarfebird
      你说的是 Virtual-WiFi ? 只要是通过Windows的“共享网络连接"功能的,作为网关的那块网卡就支持NAT功能,也就起到了路由器的作用。 至于说一块网卡怎么能生成两个接口,那是网卡的一种模式,可以理解为AP-STA模式。
    3. jk's avatarjk
      问一下啊。。。W7下系统就能自动有一个虚拟网卡。通过它可以共享网络。那么这个虚拟网卡和物理网卡是怎么连的?我觉得是NAT吧。问一下。还有我G+上加你了。
    4. febird's avatarfebird
      哥的地盘,要开始实名制了。
    5. 就不告诉你's avatar就不告诉你
      公子啊,第5条是亮点啊~
    6. 龙龙Fred's avatar龙龙Fred
      那我一定要试一试
    7. NoAnyLove's avatarNoAnyLove
      对,GoAgnet是个不错的解决方案,不仅免费,而且速度也快,基本上可以达到你的带宽的全速(但是好像不能超过500 KB/s ,话说,国内个人用的带宽还很少有能达到这个速度的),比许多收费的SSH和VPN还要快。用于看Youtube绝对死最好的选择,访问一些美国网站也不是问题
    8. a nerd's avatara nerd
      GoAgent不就解决了