2017-03-28 11:34:49 qq446252221 阅读数 2790

现今BIOS存在传统的Legacy BIOS和UEFI两种;

Legacy BIOS

存在的历史比较长,使用广泛,最近几年正在被UEFI所替代,主要原因我认为是这种方式的BIOS对X64体系的支持不够友好;再加上硬盘容量已经超过2TB,MBR分区表无法处理,需要用到GPT分区表.

Legacy BIOS的一般启动流程是:
1.由BIOS选择启动设备,如HDD/CDROM等;
2.加载该设备的MBR(主引导记录),MBR中记录了下一步启动的方式,通常是搜索激活的主分区;
3.加载该分区的PBR(分区引导记录),PBR中记录了需要引导分区中的哪个启动管理器,如NTLDR/BOOTMGR/GRLDR等;
4.加载启动管理器,由启动管理器进一步加载OS内核;


UEFI

全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。大约2010年以后生厂的电脑大多数都开始使用UEFI了,只不过版本可能比较低,兼容性没有最近几年的好。

UEFI的启动流程:
1.指定启动设备,如HDD/CDROM等;
2.搜索可识别的分区,通常是FAT32;
3.在该分区的/efi/boot/目录下寻找bootx64.efi或者bootia32.efi;
4.引导bootx64.efi文件,这个文件就是Legacy BIOS中的启动管理器启动管理器进一步加载OS内核;


虽然UEFI在各个方便对比传统BIOS有不少优势,但目前看来使用起来还是有不少困难,比如说支持的引导程序比较少,不支持实模式的DOS系统等。
而且Legacy BIOS和UEFI的运行模式完全不一样,引导文件的格式也不一样,因此在Legacy BIOS和UEFI模式下的引导文件是不能通用的。
再加上MS在UEFI中强行加入Secure Boot这个流氓,啊?


启动管理器(也叫做引导程序,对应的文件叫做引导文件)

常见的启动管理器如下:

1.NTLDR

Windows XP时代的启动管理器,通过/boot.ini文件来管理启动菜单,可以引导grub等其它引导程序。

目前只有Legacy BIOS模式下的引导文件,不支持UEFI启动。


2.BOOTMGR

Windows Vista以后的系统使用和启动管理器,功能上比NTLDR强大一些,支持VHD,WIM文件的挂载。

Legacy BIOS模式下引导文件为/bootmgr,通过/boot/bcd文件来管理启动菜单;

UEFI模式下引导文件为/efi/boot/bootx64.efi,通过/efi/microsoft/boot/bcd文件来管理启动菜单。在UEFI环境下它不能引导其它的启动管理器如grub。


3.GRUB4DOS

多系统引导程序,GNU GRUB 的一个分支,有一个强大的shell,可以通过命令行进行引导。

目前只有Legacy BIOS模式下的引导文件,不支持UEFI启动,一般情况下通过/menu.lst来管理启动菜单;

常用命令:
chainloader   加载MBR
          chainloader /bootmgr  可以导引bootmgr
          chainloader /g2ldr.mbr  可以引导grub2;
          chainloader +1  可以引导当前分区的PBR;
kernel      加载引导程序内核
          kernel /g2ldr 可以引导GRUB2;
boot        引导刚才加载的程序;
map        映射iso等镜像文件;


4.GRUB2.0

多系统引导程序,GNU GRUB的主线项目,有一个强大的shell,可以通过命令行操作。

Legacy BIOS模式下引导文件一般为/g2ldr.mbr,由g2ldr.mbr来引导/g2ldr;通过/grub/grub.cfg来配置启动菜单项。

UEFI模式下引导文件为/efi/boot/bootx64.efi,也可以通过/grub/grub.cfg来配置启动菜单项。

常用命令:

chainloader  Legacy BIOS模式下:没有成功过,总是提示Missing MBR-Helper, UEFI模式下可以加载其它efi格式的程序
linux       加载linux内核
initrd      加载linux的ramdisk
ntldr       加载ntldr,bootmgr,grldr
boot       引导刚才加载的程序
lookback     映射iso等镜像


2005-05-23 21:00:00 wangyihust 阅读数 911

启动管理器是存储在磁盘开始扇区中的一段程序,例如,硬盘的MBR(Master

Boot Record),在系统完成启动测试后,如果系统是从MBR启动,则BIOS(Basic

Input/Output System)将控制传送给MBR。然后存储在MBR中的这段程序将运行。这

段程序被称为启动管理器。它的任务就是将控制传送给操作系统,完成启动过程。
有许多可用的启动管理器,包括GNU GRUB (Grand Unified Boot Loader),

Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT

systems),等等
GRUB是一款功能强大的启动管理器,它能加载多种操作系统,例如Windows, DOS,

 Linux, GNU Hurd, *BSD,等等。

目前,LILO是最流行的启动管理器,被用来管理多个系统的引导。但是,如果使用

了LILO,你必须记住,当你每次改变了它的配置或安装了新的内核,都要重新运行

一下LILO。而且,LILO的灵活性也逊色于GRUB。

2002-01-25 09:27:00 standout 阅读数 871

GNU GRUB启动管理器

http://www.linuxgazette.com/ 01-10-13 15:08 609p hilinux 译


什么是启动管理器?
    启动管理器是存储在磁盘开始扇区中的一段程序,例如,硬盘的MBR(Master Boot Record),在系统完成启动测试后,如果系统是从MBR启动,则BIOS(Basic Input/Output System)将控制传送给MBR。然后存储在MBR中的这段程序将运行。这段程序被称为启动管理器。它的任务就是将控制传送给操作系统,完成启动过程。
有许多可用的启动管理器,包括GNU GRUB (Grand Unified Boot Loader), Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT systems),等等。下面我将讨论GNU GRUB以及它的使用方法。

什么是GRUB?
    GRUB是一款功能强大的启动管理器,它能加载多种操作系统,例如Windows, DOS, Linux, GNU Hurd, *BSD,等等。
    目前,LILO是最流行的启动管理器,被用来管理多个系统的引导。但是,如果使用了LILO,你必须记住,当你每次改变了它的配置或安装了新的内核,都要重新运行一下LILO。而且,LILO的灵活性也逊色于GRUB。
    GRUB使用灵活。它的最新版本,0.5.96.1,支持的文件系统包括ext2(Linux使用的一种文件系统),FFS(Fast File System used by *BSD UNIX),ReiserFS(一种为Linux开发的新型日志文件系统,以被融入2.4.1内核中,minix(一种为MINIX系统开发的老式文件系统,在早期的Linux中也使用)。使用GRUB,你甚至不用引导操作系统,就能“看”到这些文件系统。例如,假如你想查看一下存放在文本文件中的日期和时间,而又不想引导整个操作系统,你可以使用GRUB shell(提示“grub>”),键入如下命令:

grub> cat (partition number)/home/god/filename.txt.

    你可以看到与文件有关的所有信息,包括日期和时间。
    GRUB最好的应用是,你可以方便的引导不在列表中的任何分区上的任何内核。例如,如果你没有将新编译的内核加在启动列表中,而你又需要引导它,你可以将它先加在列表中,重新启动后使用。但是使用GRUB后,可以简单到只使用GRUB shell就可以加载所需要的内核映象。
    现在我将解释使用GRUB的三个基本步骤:编译、安装和配置。

第一步:编译和安装GRUB
    可以从ftp://alpha.gnu.org/pub/gnu/grub 下载GRUB的源代码。
    可以用命令“tar -xvzf filename.tar.gz”解开压缩文档。我得到的文件是grub-0.5.96.1.tar.gz,所以我这样做:

# tar -xvzf grub-0.5.96.1.tar.gz

    这个命令将解开的文件和目录放在一个名为grub-0.5.96.1的目录中。现在运行如下命令:

[root@heaven ~/grub-0.5.96.1 ]# ./configure

    如果你想定制GRUB,使之包含流行的文件系统和对网卡的支持,或者删除你不需要的网卡,可以运行如下命令:

[root@heaven ~/grub-0.5.96.1 ]# ./configure --help

    这个命令将输出所有的命令选项。现在可以使用—enable和—disable选项增加或删除对特定网卡的支持。(注意:GRUB支持网络启动)
    为了开始编译过程,键入如下命令:

[root@heaven ~/grub-0.5.96.1 ]# make

    为了将所有文件进行正确的安装,键入命令:

[root@heaven ~/grub-0.5.96.1 ]# make install

    至此你已经为安装GRUB真正做好了准备。
    将GRUB的相关文件保存在诸如/boot/grub的目录中不失为一个好主意。为此,按如下步骤:
    1.默认状态下,GRUB所有文件将安装在/usr/share/grub/i386-pc或者/usr/local/share/grub/i386-pc目录下,这只取决于你的shell变量的设置。
    2.建立一个叫做/boot/grub的目录,然后拷贝下列文件到这个目录:
stage1
stage2
*_stage1_5

    稍候我将解释这些文件。同时也要把GRUB(可能在/usr/sbin或者/usr/local/sbin目录下)拷贝到/boot/grub目录下。
    安装GRUB之前,你需要了解GRUB是怎样识别你的硬盘和分区信息的。首先,计数是从0开始的,而不是从1。在Linux中,你的连接到主控制器上的第一块硬盘被称为“had”。在GRUB中即为“hd0”。同样的,在GRUB中,你的第一个软驱是“fd0”。这样,第一块硬盘上的第一、二、三个分区分别为“hd0,0”、“hd0,1”、“hd0,2”。注意:逗号是GRUB分区命名法的必要组成部分。
    为了将逗号隔开的部分整合在一起,需要使用括号。例如:(hd0,0) (hd0,1) (hd0,2)等等。(hd0,0)是第一块硬盘上的第一个分区。类似的,(hd1,5)是第二快硬盘上的第六个分区,(hd2,0)是第三块硬盘上的第一个分区。
message. This may take a long time.

第二步:安装GRUB
    安装GRUB可以分为三个单独的步骤:
    1.将“stage1”安装到MBR中。
    2.设置“stage2”的地址或者位置。
    3.设置一个菜单或选项,用来决定启动哪一个操作系统。
    使用下面的命令开始安装GRUB。

[root@heaven /boot/grub ]# ./grub

    这个命令根据BIOS的设置检测硬件设备,同时产生一些输出信息。这会花较长的时间。
    end_request: I/O error, dev 02:00 (floppy), sector 0
    GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
    注意:虽然它让人感到非常惊奇,GRUB确实有简洁的界面—就象支持行编辑一样。TAB列出可能的命令列表。其它情况下TAB会列出设备或文件名。看到这些你会很惊奇吧。类似下面的提示会出现:

grub>

    现在,我假设你将Linux安装在了第一块硬盘的第一个扩展分区中或者/dev/hda5中。记住GRUB的命名规则,将上面的名字改为(hd0,4)。键入下面的命令:
grub> install (hd0,4)/boot/grub/stage1 (hd0) (hd0,4)/boot/grub/stage2 p (hd0,4)/boot/grub/menu.conf
    现在让我们分析一下这个命令的细节。

    install
    一个内置的命令,它告诉GRUB将(hd0,4)/boot/grub/grub/stage1安装到hd0的主引导纪录中。
    (hd0,4)/boot/grub/stage2
    告诉GRUB stage2映象的位置。
    p with the the following options: (hd0,4)/boot/grub/menu.conf
    为菜单的显示设置配置文件。稍候我将讨论这个配置文件的结构。
    下面是对这个命令用法的总结:
    1.nstall
    2.ource_of_stage1
    3.where_to_install
    4.source_of_stage2
    5.p source_of_configuration_file
    现在,你完成了硬盘上的基本安装工作。

在软盘上的安装:
    为了在软盘上安装GRUB,你要会用“dd”命令,并且了解它是如何工作的。为了做一张GRUB启动盘,你要将stage1和stage2文件放到软盘的开始扇区中。
    
    安装stage1到软盘上:
    插入一张已格式化的软盘,键入命令:
[root@heaven /boot/grub ]# dd if=stage1 of=/dev/fd0 bs=512 count=1
    命令的详细说明如下:
if=input file
i.e., stage1
of=output file
i.e., floppy drive (this may be different on your computer)
bs=bytes to read and write
Here it is 512 bytes.
count=how many times to perform this operation
    每次拷贝“bs”数目的块到目标地址。
    安装stage2到软盘

[root@heaven /boot/grub ]# dd if=stage2 of=/dev/fd0 bs=512 seek=1

    这里的步骤同stage1的相同,除了一个seek选项外。Seek选项将调过一个“bs”。例如,在上面的命令中bs的值是512,这样seek=1意味着将跳过软盘上前512个字节,从513字节开始。这将使得第一步操作不会覆盖stage1的前512字节。
现在你完成了基本的软盘驱动器安装。

第三步:配置GRUB
    在这一节,我们来看一下如何在启动后进入各种操作系统,如何建立menu.conf文件。
    我们就从GRUB支持的启动过程开始。可以有两种方法来完成启动过程:
    ·A.通过调用内核本地启动
    ·B.连续启动或者将控制转给另一个引导器
    
    A模式启动过程
    1.置跟设备或者告诉GRUB你的根文件系统。
    2.诉GRUB你的内核影像的位置,然后将参数传送给内核。
    3.重新启动,试一下。
    为了启动Linux,我将内核以bzImage的文件名放在/boot/目录中,跟文件系统是/dev/hda5,或者GRUB中的(hd0,4)。我的启动过程如下:
    1.root (hd0,4) [This sets the root partition]
    2.kernel /boot/bzImage root=/dev/hda5 [This sets the kernel]

    B模式启动过程(这种模式假设当前的分区中安装了另一个启动管理器,例如LILO或者NTLDR):
    1.设置根分区但不要安装它
    2.激活这个分区
    3.配置需要启动的分区的第一个扇区
    4.重新启动,看一下效果。
    我们在试试启动安装在/dev/hda1或者(hd0,0)的widows。启动windows的过程如下:
    1.rootnoverify (hd0,0)
    2.makeactive
    3.chainloader +1 [+1 sets the first sector of the current root partition]
    4.boot [transfers the control and quits GRUB]
    menu.conf文件:它用于建立启动多操作系统时的菜单。建立menu.conf并不难。它使用简单的英语,就象你在这一节看到的那样。
    所有的菜单项目都以没有逗号分隔的“title TITLENAME”开头。你可以随意设置TITLENAME。
    设置Linux启动菜单步骤如下:
    1.设置标题
    2.设置根分区
    3.设置内核的相应参数
    4.启动

    一个菜单例子:
title Debian GNU/Linux 2.2 kernel 2.4.1
root (hd0,4)
kernel /boot/bzImage.2.4.1
boot
#----

    前面有#的行是一个注释。

    建立启动Windows 或者 DOS的菜单:
title Windoze
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

    如果你安装了两个版本的Windows—一个是你自己用的,另一个给你的家人用的—这样第二个就无法安装,因为有提示说Windows已经安装了。
    有一种简单的方法可以安装两个版本的Windows,即在启动时隐藏一个分区而使用另一个。你甚至可以为你的分区设置密码保护,这样可以避免别人错误的加载你的分区。下面介绍如何完成两个Windows的安装,hda1和hda2 或者 (hd0,0) 和 (hd0,1),用到的命令有lock, password, hide 和 unhide。
    
    建立windows 项目"My Entry":
title My Entry
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

    为了更好的使用lock命令,你需要在配置文件开头使用password命令。Password命令的语法如下:password secret(“secret”就是密码)。任何时候你都可以通过按p键儿输入密码。

    建立Windows 项目"Family Entry"
title Family Entry
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot
----
 
    任何人都可以启动这个项目,而无须输入密码。
    这有一个使用password命令的有趣的窍门。为了在缺省菜单列表或配置文件中隐藏某些项目,你可以使用下面的命令加载一个定制的列表:

password secret

    在这个命令中,“secret”是密码,而/boot/grub/secret-list.conf是密码文件。这样做之前,你要先进入到根目录或者给出全路径名。例如:

password secret (hd0,4)/boot/grub/secret-list.conf

    还有一个更重要的命令是“map”。当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windows,就可以使用map命令。例如,你能够将hd0映射为hd1,将hd1映射为hd0。换句话说,你可以虚拟的交换两个硬盘而启动所需要的操作系统。命令形式如下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
   
    启动FreeBSD:
title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#----

    这里我们调用了FreeBSD的启动管理器。Root (hd0,4,a)由四个参数,是因为FreeBSD对一个单独分区进行了虚拟分割。我们称根分区为“a”。如果FreeBSD占据了整个第二块硬盘,这里就应该是root (hd0,a)。这样,就不是调用内核而是调用FreeBSD的启动管理器,它要比调用内核更易使用。
    (注意:我推荐在使用OpenBSD和GNU/Hurd之前,要先试一下链式加载。)
    现在你已经完成了基本的GRUB编译、安装和配置。你对GRUB了解的越多,就越会发现GRUB是一种控制启动的易用和高效的方法。

各种GRUB命令:
    default xx
    表明xx是缺省的启动项目
    timeout yy
    表明在yy秒后缺省启动项目将启动
    fallback zz
    在第一个启动项目失败后,过了timeout时间后,就将启动zz项目。
    color
    这个命令将生成彩色菜单。它的语法是:color normal current_selection。这两个域都可以有两个值,形如foreground/background。例如:

color green/black or light-gray/blue

    你也可以使用相关的数字。
    记住:所有的值都是从0开始,所以0是第一个。
    在我的下一篇文章中,我将会讲到对GNU/Hurd and OpenBSD的测试,也许还有一些网络启动的内容。但是你必须要等至少三个月或更多的时间,到是我会谈一下我的测试结果。等着看吧。
    讨论和错误请直接发到我的信箱:jskohli@fig.org 。

2008-03-18 22:46:00 huahuamoon 阅读数 593
GNU GRUB启动管理器
什么是启动管理器?
     启动管理器是存储在磁盘开始扇区中的一段程序,例如,硬盘的MBR(Master Boot Record),在系统完成启动测试后,如果系统是从MBR启动,则BIOS(Basic Input/Output System)将控制传送给MBR。然后存储在MBR中的这段程序将运行。这段程序被称为启动管理器。它的任务就是将控制传送给操作系统,完成启动过程。
有许多可用的启动管理器,包括GNU GRUB (Grand Unified Boot Loader), Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT systems),等等。下面我将讨论GNU GRUB以及它的使用方法。

什么是GRUB?
    GRUB是一款功能强大的启动管理器,它能加载多种操作系统,例如Windows, DOS, Linux, GNU Hurd, *BSD,等等。
    目前,LILO是最流行的启动管理器,被用来管理多个系统的引导。但是,如果使用了LILO,你必须记住,当你每次改变了它的配置或安装了新的内核,都要重新运行一下LILO。而且,LILO的灵活性也逊色于GRUB。
    GRUB 使用灵活。它的最新版本,0.5.96.1,支持的文件系统包括ext2(Linux使用的一种文件系统),FFS(Fast File System used by *BSD UNIX),ReiserFS(一种为Linux开发的新型日志文件系统,以被融入2.4.1内核中,minix(一种为MINIX系统开发的老式文件系统,在早期的Linux中也使用)。使用GRUB,你甚至不用引导操作系统,就能“看”到这些文件系统。例如,假如你想查看一下存放在文本文件中的日期和时间,而又不想引导整个操作系统,你可以使用GRUB shell(提示“grub>”),键入如下命令:

grub> cat (partition number)/home/god/filename.txt.

    你可以看到与文件有关的所有信息,包括日期和时间。
    GRUB 最好的应用是,你可以方便的引导不在列表中的任何分区上的任何内核。例如,如果你没有将新编译的内核加在启动列表中,而你又需要引导它,你可以将它先加在列表中,重新启动后使用。但是使用GRUB后,可以简单到只使用GRUB shell就可以加载所需要的内核映象。
    现在我将解释使用GRUB的三个基本步骤:编译、安装和配置。

第一步:编译和安装GRUB
    可以从ftp://alpha.gnu.org/pub/gnu/grub 下载GRUB的源代码。
    可以用命令“tar -xvzf filename.tar.gz”解开压缩文档。我得到的文件是grub-0.5.96.1.tar.gz,所以我这样做:

# tar -xvzf grub-0.5.96.1.tar.gz

    这个命令将解开的文件和目录放在一个名为grub-0.5.96.1的目录中。现在运行如下命令:

[root@heaven ~/grub-0.5.96.1 ]# ./configure

    如果你想定制GRUB,使之包含流行的文件系统和对网卡的支持,或者删除你不需要的网卡,可以运行如下命令:

[root@heaven ~/grub-0.5.96.1 ]# ./configure --help

    这个命令将输出所有的命令选项。现在可以使用—enable和—disable选项增加或删除对特定网卡的支持。(注意:GRUB支持网络启动)
    为了开始编译过程,键入如下命令:

[root@heaven ~/grub-0.5.96.1 ]# make

    为了将所有文件进行正确的安装,键入命令:

[root@heaven ~/grub-0.5.96.1 ]# make install

    至此你已经为安装GRUB真正做好了准备。
    将GRUB的相关文件保存在诸如/boot/grub的目录中不失为一个好主意。为此,按如下步骤:
    1.默认状态下,GRUB所有文件将安装在/usr/share/grub/i386-pc或者/usr/local/share/grub/i386-pc目录下,这只取决于你的shell变量的设置。
    2.建立一个叫做/boot/grub的目录,然后拷贝下列文件到这个目录:
stage1
stage2
*_stage1_5

    稍候我将解释这些文件。同时也要把GRUB(可能在/usr/sbin或者/usr/local/sbin目录下)拷贝到/boot/grub目录下。
     安装GRUB之前,你需要了解GRUB是怎样识别你的硬盘和分区信息的。首先,计数是从0开始的,而不是从1。在Linux中,你的连接到主控制器上的第一块硬盘被称为“had”。在GRUB中即为“hd0”。同样的,在GRUB中,你的第一个软驱是“fd0”。这样,第一块硬盘上的第一、二、三个分区分别为“hd0,0”、“hd0,1”、“hd0,2”。注意:逗号是GRUB分区命名法的必要组成部分。
    为了将逗号隔开的部分整合在一起,需要使用括号。例如:(hd0,0) (hd0,1) (hd0,2)等等。(hd0,0)是第一块硬盘上的第一个分区。类似的,(hd1,5)是第二快硬盘上的第六个分区,(hd2,0)是第三块硬盘上的第一个分区。
message. This may take a long time.

第二步:安装GRUB
    安装GRUB可以分为三个单独的步骤:
    1.将“stage1”安装到MBR中。
    2.设置“stage2”的地址或者位置。
    3.设置一个菜单或选项,用来决定启动哪一个操作系统。
    使用下面的命令开始安装GRUB。

[root@heaven /boot/grub ]# ./grub

    这个命令根据BIOS的设置检测硬件设备,同时产生一些输出信息。这会花较长的时间。
    end_request: I/O error, dev 02:00 (floppy), sector 0
    GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
    注意:虽然它让人感到非常惊奇,GRUB确实有简洁的界面—就象支持行编辑一样。TAB列出可能的命令列表。其它情况下TAB会列出设备或文件名。看到这些你会很惊奇吧。类似下面的提示会出现:

grub>

    现在,我假设你将Linux安装在了第一块硬盘的第一个扩展分区中或者/dev/hda5中。记住GRUB的命名规则,将上面的名字改为(hd0,4)。键入下面的命令:
grub> install (hd0,4)/boot/grub/stage1 (hd0) (hd0,4)/boot/grub/stage2 p (hd0,4)/boot/grub/menu.conf
    现在让我们分析一下这个命令的细节。

    install
    一个内置的命令,它告诉GRUB将(hd0,4)/boot/grub/grub/stage1安装到hd0的主引导纪录中。
    (hd0,4)/boot/grub/stage2
    告诉GRUB stage2映象的位置。
    p with the the following options: (hd0,4)/boot/grub/menu.conf
    为菜单的显示设置配置文件。稍候我将讨论这个配置文件的结构。
    下面是对这个命令用法的总结:
    1.install
    2.source_of_stage1
    3.where_to_install
    4.source_of_stage2
    5.p source_of_configuration_file
    现在,你完成了硬盘上的基本安装工作。

在软盘上的安装:
    为了在软盘上安装GRUB,你要会用“dd”命令,并且了解它是如何工作的。为了做一张GRUB启动盘,你要将stage1和stage2文件放到软盘的开始扇区中。
    
    安装stage1到软盘上:
    插入一张已格式化的软盘,键入命令:
[root@heaven /boot/grub ]# dd if=stage1 of=/dev/fd0 bs=512 count=1
    命令的详细说明如下:
if=input file
i.e., stage1
of=output file
i.e., floppy drive (this may be different on your computer)
bs=bytes to read and write
Here it is 512 bytes.
count=how many times to perform this operation
    每次拷贝“bs”数目的块到目标地址。
    安装stage2到软盘

[root@heaven /boot/grub ]# dd if=stage2 of=/dev/fd0 bs=512 seek=1

    这里的步骤同stage1的相同,除了一个seek选项外。Seek选项将调过一个“bs”。例如,在上面的命令中bs的值是512,这样seek=1意味着将跳过软盘上前512个字节,从513字节开始。这将使得第一步操作不会覆盖stage1的前512字节。
现在你完成了基本的软盘驱动器安装。

第三步:配置GRUB
    在这一节,我们来看一下如何在启动后进入各种操作系统,如何建立menu.conf文件。
    我们就从GRUB支持的启动过程开始。可以有两种方法来完成启动过程:
    ·A.通过调用内核本地启动
    ·B.连续启动或者将控制转给另一个引导器
    
    A模式启动过程
    1.配置设备或者告诉GRUB你的根文件系统。
    2.告诉GRUB你的内核影像的位置,然后将参数传送给内核。
    3.重新启动,试一下。
    为了启动Linux,我将内核以bzImage的文件名放在/boot/目录中,跟文件系统是/dev/hda5,或者GRUB中的(hd0,4)。我的启动过程如下:
    1.root (hd0,4) [This sets the root partition]
    2.kernel /boot/bzImage root=/dev/hda5 [This sets the kernel]

    B模式启动过程(这种模式假设当前的分区中安装了另一个启动管理器,例如LILO或者NTLDR):
    1.设置根分区但不要安装它
    2.激活这个分区
    3.配置需要启动的分区的第一个扇区
    4.重新启动,看一下效果。
    我们在试试启动安装在/dev/hda1或者(hd0,0)的widows。启动windows的过程如下:
    1.rootnoverify (hd0,0)
    2.makeactive
    3.chainloader +1 [+1 sets the first sector of the current root partition]
    4.boot [transfers the control and quits GRUB]
    menu.conf文件:它用于建立启动多操作系统时的菜单。建立menu.conf并不难。它使用简单的英语,就象你在这一节看到的那样。
    所有的菜单项目都以没有逗号分隔的“title TITLENAME”开头。你可以随意设置TITLENAME。
    设置Linux启动菜单步骤如下:
    1.设置标题
    2.设置根分区
    3.设置内核的相应参数
    4.启动

    一个菜单例子:
title Debian GNU/Linux 2.2 kernel 2.4.1
root (hd0,4)
kernel /boot/bzImage.2.4.1
boot
#----

    前面有#的行是一个注释。

    建立启动Windows 或者 DOS的菜单:
title Windoze
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

    如果你安装了两个版本的Windows—一个是你自己用的,另一个给你的家人用的—这样第二个就无法安装,因为有提示说Windows已经安装了。
     有一种简单的方法可以安装两个版本的Windows,即在启动时隐藏一个分区而使用另一个。你甚至可以为你的分区设置密码保护,这样可以避免别人错误的加载你的分区。下面介绍如何完成两个Windows的安装,hda1和hda2 或者 (hd0,0) 和 (hd0,1),用到的命令有lock, password, hide 和 unhide。
    
    建立windows 项目"My Entry":
title My Entry
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----

    为了更好的使用lock命令,你需要在配置文件开头使用password命令。Password命令的语法如下:password secret(“secret”就是密码)。任何时候你都可以通过按p键儿输入密码。

    建立Windows 项目"Family Entry"
title Family Entry
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot
----
 
    任何人都可以启动这个项目,而无须输入密码。
    这有一个使用password命令的有趣的窍门。为了在缺省菜单列表或配置文件中隐藏某些项目,你可以使用下面的命令加载一个定制的列表:

password secret

    在这个命令中,“secret”是密码,而/boot/grub/secret-list.conf是密码文件。这样做之前,你要先进入到根目录或者给出全路径名。例如:

password secret (hd0,4)/boot/grub/secret-list.conf

     还有一个更重要的命令是“map”。当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windows,就可以使用map命令。例如,你能够将 hd0映射为hd1,将hd1映射为hd0。换句话说,你可以虚拟的交换两个硬盘而启动所需要的操作系统。命令形式如下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
   
    启动FreeBSD:
title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#----

     这里我们调用了FreeBSD的启动管理器。Root (hd0,4,a)由四个参数,是因为FreeBSD对一个单独分区进行了虚拟分割。我们称根分区为“a”。如果FreeBSD占据了整个第二块硬盘,这里就应该是root (hd0,a)。这样,就不是调用内核而是调用FreeBSD的启动管理器,它要比调用内核更易使用。
    (注意:我推荐在使用OpenBSD和GNU/Hurd之前,要先试一下链式加载。)
    现在你已经完成了基本的GRUB编译、安装和配置。你对GRUB了解的越多,就越会发现GRUB是一种控制启动的易用和高效的方法。

各种GRUB命令:
    default xx
    表明xx是缺省的启动项目
    timeout yy
    表明在yy秒后缺省启动项目将启动
    fallback zz
    在第一个启动项目失败后,过了timeout时间后,就将启动zz项目。
    color
    这个命令将生成彩色菜单。它的语法是:color normal current_selection。这两个域都可以有两个值,形如foreground/background。例如:

color green/black or light-gray/blue

    你也可以使用相关的数字。
    记住:所有的值都是从0开始,所以0是第一个。
 
2005-03-21 08:12:00 IcYdRIP 阅读数 1070
什么是启动管理器?
    启动管理器是存储在磁盘开始扇区中的一段程序,例如,硬盘的MBR(Master Boot Record),在系统完成启动测试后,如果系统是从MBR启动,则BIOS(Basic Input/Output System)将控制传送给MBR。然后存储在MBR中的这段程序将运行。这段程序被称为启动管理器。它的任务就是将控制传送给操作系统,完成启动过程。
有许多可用的启动管理器,包括GNU GRUB (Grand Unified Boot Loader), Bootmanager, LILO (LInux LOader), NTLDR (boot loader for Windows NT systems),等等。下面我将讨论GNU GRUB以及它的使用方法。
 
什么是GRUB?
    GRUB是一款功能强大的启动管理器,它能加载多种操作系统,例如Windows, DOS, Linux, GNU Hurd, *BSD,等等。
    目前,LILO是最流行的启动管理器,被用来管理多个系统的引导。但是,如果使用了LILO,你必须记住,当你每次改变了它的配置或安装了新的内核,都要重新运行一下LILO。而且,LILO的灵活性也逊色于GRUB。
    GRUB使用灵活。它的最新版本,0.5.96.1,支持的文件系统包括ext2(Linux使用的一种文件系统),FFS(Fast File System used by *BSD UNIX),ReiserFS(一种为Linux开发的新型日志文件系统,以被融入2.4.1内核中,minix(一种为MINIX系统开发的老式文件系统,在早期的Linux中也使用)。使用GRUB,你甚至不用引导操作系统,就能“看”到这些文件系统。例如,假如你想查看一下存放在文本文件中的日期和时间,而又不想引导整个操作系统,你可以使用GRUB shell(提示“grub>”),键入如下命令:
 
grub> cat (partition number)/home/god/2003106110531.htm.txt.  
 
    你可以看到与文件有关的所有信息,包括日期和时间。
    GRUB最好的应用是,你可以方便的引导不在列表中的任何分区上的任何内核。例如,如果你没有将新编译的内核加在启动列表中,而你又需要引导它,你可以将它先加在列表中,重新启动后使用。但是使用GRUB后,可以简单到只使用GRUB shell就可以加载所需要的内核映象。
    现在我将解释使用GRUB的三个基本步骤:编译、安装和配置。
 
第一步:编译和安装GRUB
    可以从ftp://alpha.gnu.org/pub/gnu/grub 下载GRUB的源代码。
    可以用命令“tar -xvzf 2003106110531.htm.tar.gz”解开压缩文档。我得到的文件是grub-0.5.96.1.tar.gz,所以我这样做:
 
# tar -xvzf grub-0.5.96.1.tar.gz
 
    这个命令将解开的文件和目录放在一个名为grub-0.5.96.1的目录中。现在运行如下命令:
 
[root@heaven ~/grub-0.5.96.1 ]# ./configure
 
    如果你想定制GRUB,使之包含流行的文件系统和对网卡的支持,或者删除你不需要的网卡,可以运行如下命令:
 
[root@heaven ~/grub-0.5.96.1 ]# ./configure --help
 
    这个命令将输出所有的命令选项。现在可以使用―enable和―disable选项增加或删除对特定网卡的支持。(注意:GRUB支持网络启动)
    为了开始编译过程,键入如下命令:
 
[root@heaven ~/grub-0.5.96.1 ]# make
 
    为了将所有文件进行正确的安装,键入命令:
 
[root@heaven ~/grub-0.5.96.1 ]# make install
 
    至此你已经为安装GRUB真正做好了准备。
    将GRUB的相关文件保存在诸如/boot/grub的目录中不失为一个好主意。为此,按如下步骤:
    1.默认状态下,GRUB所有文件将安装在/usr/share/grub/i386-pc或者/usr/local/share/grub/i386-pc目录下,这只取决于你的shell变量的设置。
    2.建立一个叫做/boot/grub的目录,然后拷贝下列文件到这个目录:
stage1
stage2
*_stage1_5
 
    稍候我将解释这些文件。同时也要把GRUB(可能在/usr/sbin或者/usr/local/sbin目录下)拷贝到/boot/grub目录下。
    安装GRUB之前,你需要了解GRUB是怎样识别你的硬盘和分区信息的。首先,计数是从0开始的,而不是从1。在Linux中,你的连接到主控制器上的第一块硬盘被称为“had”。在GRUB中即为“hd0”。同样的,在GRUB中,你的第一个软驱是“fd0”。这样,第一块硬盘上的第一、二、三个分区分别为“hd0,0”、“hd0,1”、“hd0,2”。注意:逗号是GRUB分区命名法的必要组成部分。
    为了将逗号隔开的部分整合在一起,需要使用括号。例如:(hd0,0) (hd0,1) (hd0,2)等等。(hd0,0)是第一块硬盘上的第一个分区。类似的,(hd1,5)是第二快硬盘上的第六个分区,(hd2,0)是第三块硬盘上的第一个分区。
message. This may take a long time.  
 
第二步:安装GRUB
    安装GRUB可以分为三个单独的步骤:
    1.将“stage1”安装到MBR中。
    2.设置“stage2”的地址或者位置。
    3.设置一个菜单或选项,用来决定启动哪一个操作系统。
    使用下面的命令开始安装GRUB。
 
[root@heaven /boot/grub ]# ./grub
 
    这个命令根据BIOS的设置检测硬件设备,同时产生一些输出信息。这会花较长的时间。
    end_request: I/O error, dev 02:00 (floppy), sector 0
    GRUB version 0.5.96.1 (640K lower / 3072K upper memory)
    注意:虽然它让人感到非常惊奇,GRUB确实有简洁的界面―就象支持行编辑一样。TAB列出可能的命令列表。其它情况下TAB会列出设备或文件名。看到这些你会很惊奇吧。类似下面的提示会出现:
 
grub>  
 
sorry for forgetting where I got it, if you know, tell me, thanks
 
 现在,我假设你将Linux安装在了第一块硬盘的第一个扩展分区中或者/dev/hda5中。记住GRUB的命名规则,将上面的名字改为(hd0,4)。键入下面的命令:
grub> install (hd0,4)/boot/grub/stage1 (hd0) (hd0,4)/boot/grub/stage2 p (hd0,4)/boot/grub/menu.conf
    现在让我们分析一下这个命令的细节。
 
    install
    一个内置的命令,它告诉GRUB将(hd0,4)/boot/grub/grub/stage1安装到hd0的主引导纪录中。
    (hd0,4)/boot/grub/stage2  
    告诉GRUB stage2映象的位置。
    p with the the following options: (hd0,4)/boot/grub/menu.conf  
    为菜单的显示设置配置文件。稍候我将讨论这个配置文件的结构。
    下面是对这个命令用法的总结:
    1.install  
    2.source_of_stage1  
    3.where_to_install  
    4.source_of_stage2  
    5.p source_of_configuration_file
    现在,你完成了硬盘上的基本安装工作。
 
在软盘上的安装:
    为了在软盘上安装GRUB,你要会用“dd”命令,并且了解它是如何工作的。为了做一张GRUB启动盘,你要将stage1和stage2文件放到软盘的开始扇区中。
     
    安装stage1到软盘上:
    插入一张已格式化的软盘,键入命令:
[root@heaven /boot/grub ]# dd if=stage1 of=/dev/fd0 bs=512 count=1
    命令的详细说明如下:
if=input file
i.e., stage1  
of=output file  
i.e., floppy drive (this may be different on your computer)  
bs=bytes to read and write  
Here it is 512 bytes.  
count=how many times to perform this operation  
    每次拷贝“bs”数目的块到目标地址。
    安装stage2到软盘
 
[root@heaven /boot/grub ]# dd if=stage2 of=/dev/fd0 bs=512 seek=1
 
    这里的步骤同stage1的相同,除了一个seek选项外。Seek选项将调过一个“bs”。例如,在上面的命令中bs的值是512,这样seek=1意味着将跳过软盘上前512个字节,从513字节开始。这将使得第一步操作不会覆盖stage1的前512字节。
现在你完成了基本的软盘驱动器安装。
 
第三步:配置GRUB
    在这一节,我们来看一下如何在启动后进入各种操作系统,如何建立menu.conf文件。
    我们就从GRUB支持的启动过程开始。可以有两种方法来完成启动过程:
    ・A.通过调用内核本地启动
    ・B.连续启动或者将控制转给另一个引导器
     
    A模式启动过程
    1.置跟设备或者告诉GRUB你的根文件系统。
    2.诉GRUB你的内核影像的位置,然后将参数传送给内核。
    3.重新启动,试一下。
    为了启动Linux,我将内核以bzImage的文件名放在/boot/目录中,跟文件系统是/dev/hda5,或者GRUB中的(hd0,4)。我的启动过程如下:
    1.root (hd0,4) [This sets the root partition]  
    2.kernel /boot/bzImage root=/dev/hda5 [This sets the kernel]  
 
    B模式启动过程(这种模式假设当前的分区中安装了另一个启动管理器,例如LILO或者NTLDR):
    1.设置根分区但不要安装它
    2.激活这个分区
    3.配置需要启动的分区的第一个扇区
    4.重新启动,看一下效果。
    我们在试试启动安装在/dev/hda1或者(hd0,0)的widows。启动windows的过程如下:
    1.rootnoverify (hd0,0)  
    2.makeactive  
    3.chainloader +1 [+1 sets the first sector of the current root partition]  
    4.boot [transfers the control and quits GRUB]  
    menu.conf文件:它用于建立启动多操作系统时的菜单。建立menu.conf并不难。它使用简单的英语,就象你在这一节看到的那样。
    所有的菜单项目都以没有逗号分隔的“title TITLENAME”开头。你可以随意设置TITLENAME。
    设置Linux启动菜单步骤如下:
    1.设置标题
    2.设置根分区
    3.设置内核的相应参数
    4.启动
 
    一个菜单例子:
title Debian GNU/Linux 2.2 kernel 2.4.1
root (hd0,4)
kernel /boot/bzImage.2.4.1
boot
#----
 
    前面有#的行是一个注释。
 
    建立启动Windows 或者 DOS的菜单:
title Windoze  
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
 
    如果你安装了两个版本的Windows―一个是你自己用的,另一个给你的家人用的―这样第二个就无法安装,因为有提示说Windows已经安装了。
    有一种简单的方法可以安装两个版本的Windows,即在启动时隐藏一个分区而使用另一个。你甚至可以为你的分区设置密码保护,这样可以避免别人错误的加载你的分区。下面介绍如何完成两个Windows的安装,hda1和hda2 或者 (hd0,0) 和 (hd0,1),用到的命令有lock, password, hide 和 unhide。
     
    建立windows 项目"My Entry":  
title My Entry
lock
unhide (hd0,0)
hide (hd0,1)
rootnoverify (hd0,0)
makeactive
chainloader +1
boot
#----
 
    为了更好的使用lock命令,你需要在配置文件开头使用password命令。Password命令的语法如下:password secret(“secret”就是密码)。任何时候你都可以通过按p键儿输入密码。
 
    建立Windows 项目"Family Entry"  
title Family Entry
unhide (hd0,1)
hide (hd0,0)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot
----
 
    任何人都可以启动这个项目,而无须输入密码。
    这有一个使用password命令的有趣的窍门。为了在缺省菜单列表或配置文件中隐藏某些项目,你可以使用下面的命令加载一个定制的列表:
 
password secret
 
    在这个命令中,“secret”是密码,而/boot/grub/secret-list.conf是密码文件。这样做之前,你要先进入到根目录或者给出全路径名。例如:
 
password secret (hd0,4)/boot/grub/secret-list.conf
 
    还有一个更重要的命令是“map”。当你有两块硬盘,一个无法从第二块硬盘启动的操作系统,例如Windows,就可以使用map命令。例如,你能够将hd0映射为hd1,将hd1映射为hd0。换句话说,你可以虚拟的交换两个硬盘而启动所需要的操作系统。命令形式如下:
grub> map (hd0) (hd1)
grub> map (hd1) (hd0)
    
    启动FreeBSD:
title FreeBSD 4.0
root (hd0,4,a)
kernel /boot/loader
boot
#----  
 
    这里我们调用了FreeBSD的启动管理器。Root (hd0,4,a)由四个参数,是因为FreeBSD对一个单独分区进行了虚拟分割。我们称根分区为“a”。如果FreeBSD占据了整个第二块硬盘,这里就应该是root (hd0,a)。这样,就不是调用内核而是调用FreeBSD的启动管理器,它要比调用内核更易使用。
    (注意:我推荐在使用OpenBSD和GNU/Hurd之前,要先试一下链式加载。)
    现在你已经完成了基本的GRUB编译、安装和配置。你对GRUB了解的越多,就越会发现GRUB是一种控制启动的易用和高效的方法。
 
各种GRUB命令:
    default xx  
    表明xx是缺省的启动项目
    timeout yy  
    表明在yy秒后缺省启动项目将启动
    fallback zz  
    在第一个启动项目失败后,过了timeout时间后,就将启动zz项目。
    color  
    这个命令将生成彩色菜单。它的语法是:color normal current_selection。这两个域都可以有两个值,形如foreground/background。例如:
 
color green/black or light-gray/blue
 
    你也可以使用相关的数字。
    记住:所有的值都是从0开始,所以0是第一个。
    在我的下一篇文章中,我将会讲到对GNU/Hurd and OpenBSD的测试,也许还有一些网络启动的内容。但是你必须要等至少三个月或更多的时间,到是我会谈一下我的测试结果。等着看吧。
 

GRUB启动管理器

阅读数 36

没有更多推荐了,返回首页