免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1255 | 回复: 1
打印 上一主题 下一主题

启动 GNU/Linux —— GRUB [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-09-28 11:31 |只看该作者 |倒序浏览
使用 GRUB 的好处

LiLo(Linux Loader)是 GNU/Linux 的标准启动工具,经常在系统安装过程中就装好了。可不要光从字面上了解 LiLo 的作用,LiLo 也可以启动安装在同一或不同硬盘上的其他操作系统。

从 MDL 7.1 起,您也可以使用 GNU GRUB 了,即 GRand Unified Bootloader 。GRUB 和 LiLo 相比,有几个长处:

    * 开机时,可以修改启动参数;
    * 小型的 boot shell ;
    * 支持隐藏标志(hidden flag),如果您有多个 MS-DOS/Windows 主分区,这一点就很有帮助;
    * 允许快速(on the fly)修改配置文件(/boot/grub/menu.lst),编辑后不需要额外的命令;
    * 可以通过网络启动无盘客户机。

GNU GRUB 的唯一小毛病就是有自己的一套语法,不过您在短时间内就可以掌握。我估计很多人都更喜欢 LiLo 华丽的启动界面 。如果您更注重功能,而不是形式,那就请阅读下去。

* section index * top
* 安装 GRUB

首先用 rpm -q grub 看看 GRUB 是否已安装。如果尚未安装,可以用 urpmi grub 完成安装。

然后,以‘root’身份运行命令:

grub-install /dev/[device]

‘device’是要用的启动扇区的设备名。大多数情况下是‘hda’,也就是 MBR ( the master boot record of the first IDE hard drive)。

接下来,您将看到的信息类似于:

[some text]
(fd0) /dev/fd0
(hd0) /dev/hda

位于第一个控制器(controller)的软驱,和第一个 IDE 主通道(master channel)上的硬盘。当然,在您的机器下显示可能有所不同。第一部分标识的是 GRUB 的语法,其次是该设备在 Linux 下的表示。GRUB 不区分 SCSI 和 IDE 硬盘,只要将其启动顺序放入帐号就可以了。用一块 SCSI 硬盘的系统的条目如下:

(fd0) /dev/fd0
(hd0) /dev/sda

如果系统有 SCSI 和 IDE 硬盘,且 BIOS 设置为从 SCSI 硬盘启动的话,就是:

(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/hda

如果您您改变了硬盘的启动顺序,那就得修改‘/boot/grub/devices.map’。

万一‘grub-install’脚本出错,您可以用 GRUB shell 来安装启动扇区:

grub
[some text]
grub>; root (hdw,x)
[some text]
grub>; setup (hdy,z)

其中,‘w’、‘x’、‘y’和‘z’都是数字。‘w’标识硬盘,‘x’是目录‘/boot/grub’所在的分区,‘y’是启动扇区所在的硬盘,如果您不想将启动扇区安装到‘y’的 MBR ,就需要‘z’。请注意:GRUB 以‘0’开始计数。
例子一、将 GRUB 安装到第一块 IDE 硬盘的 MBR 上。‘/boot’目录在相同硬盘上:‘/dev/hda3’。

grub>; root (hd0,2)
grub>; setup (hd0)

例子二、将 GRUB 安装到根分区的启动扇区上。根分区在后于 IDE 硬盘启动的 SCSI 硬盘上:‘/dev/sda1’。

grub>; root (hd1,0)
grub>; setup (hd1,0)

基本上,就是这样。重启后,您将看到 grub>; 提示符。键入 help ,将列出所有的可用命令(GRUB 提供了一个全功能的 boot shell ,有命令行历史记录和自动补齐),而 help [command] 将显示指定命令的帮助说明。

如何启动 Linux 呢?显然,您得告诉 GRUB 根分区和内核在哪里。然后您得添加一个参数,用来告诉 Linux 的 init哪里去找内核(情记住:GRUB 和 Linux 对分区的表示语法不同!)。假设根分区是 IDE 硬盘上的第一个主分区,用 kernel 命令就是:

kernel (hd0,0)/boot/vmlinuz root=/dev/hda1

是不是记不清内核所在的分区?很简单,用 find /boot/vmlinuz 就可以了。现在键入 boot ,再按 ENTER ,您的系统就可以启动了。

第一次这样做,感觉不错,但有没有更好的办法呢?继续阅读下去吧……

* section index * top
* 配置 GRUB

GNU GRUB 的配置文件是‘/boot/grub/menu.lst’。您可以通过编辑器,或用‘DrakConf’(Mandrake 控制中心)中的‘DrakBoot’工具,对这个文件进行修改。和‘LiLo’相比,完成编辑后,您不需要再运行额外的命令。想看一下所有可用的 GNU GRUB 命令,只要以‘root’身份在虚拟终端下运行:

grub

这样就开启了 GNU GRUB shell 。然后键入 help 列出所有命令,或用 help [command] 得到指定命令的帮助说明。需要更详细的文档,请看 info grub 。

和‘lilo.conf’一样,‘menu.lst’也有常规部分和包括多个要启动的操作系统/发行套件/内核的条目。典型的常规部分如:

timeout 5
color black/cyan yellow/cyan
i18n (hd0,0)/boot/grub/messages
keytable (hd0,0)/boot/us.klt
default 0

这告诉 GRUB :

    * 启动默认系统前等待五秒钟,
    * 启动菜单用什么颜色,
    * 用哪个启动信息文件,
    * 用哪个主要表格(由 keytab-lilo.pl [key map] >; [file] 生成),
    * 默认启动哪个系统。

(hd0,0) 标识了第一块硬盘上的第一个分区。不管是 EDE 还是 SCSI ,第一块硬盘就是首先启动的那块。GNU GRUB 从 0 开始,按照启动顺序排列硬盘。因此,如果您系统中有一个 IDE 和一个 SCSI 硬盘,第一块就是设置成首先启动的那块,另一块就排在其次。如果您有多个 IDE 或 SCSI 硬盘,the numbering depends on the place of the place of the disk of the controller: either the IDE channel and port (first disk on first port, second disk on first port etc), or the SCSI ID.
分区号也从 0 开始。请注意:不管硬盘上有几个主分区,第一个逻辑分区总是‘4’。

一个 Linux 的条目就象:

title Linux
kernel (hd0,0)/boot/vmlinuz root=/dev/hda1

title 就是在启动菜单中这个条目显示的名称。kernel (hd0,0)/boot/vmlinuz-[...] 告诉 GNU GRUB 从第一块硬盘第一个分区下的‘/boot’目录载入名为‘vmlinuz-[...]’的内核。root=/dev/hda1 是用于 init 的一个启动参数,这里表示的意思一样,但就是用了 init 能懂的特殊语法。您还可以添加任何需要的启动参数。

* section index * top
* 通过 GRUB 启动其他内核/发行套件/操作系统
其他内核

新建一个和上面类似的条目(当然要用不同的‘title’)。
其他 Linux 套件

将 LiLo 安装到该套件根分区的启动扇区(不是 MBR)。在您的 MDL 系统中,对‘/boot/grub/menu.lst’添加一个类似于下面讨论到的条目。
其他操作系统

操作系统如:DOS、BeOS、Win9x/NT 或 OS/2 的条目看起来有些不同:

title Windows
rootnoverify (hd0,0)
makeactive
chainloader +1

rootnoverify (hd0,0) 告诉 GNU GRUB 您用的 Widnows C 盘在哪里,但同时不要试图将其挂载(‘noverify’,可选项)。 makeactive 为分区表设置‘active’标志,启动一些老版本的 DOS/Windows 时需要。chainloader +1 告诉 GNU GRUB 不要试着自己载入 Windows (自身无法完成),而应该将启动进程交给 C 盘的首扇区,那里含有原始的 DOS/Windows 启动程序。
放到软盘上

(Contributed by Marc Indekeu)

下面将 GRUB 安装到软盘上,以备不时之需。我的 MDK 8.1 已安装了 GRUB ,‘/mnt/floppy’是软驱的载入点。

   1.

      插入一张空白软盘,然后在软盘上新建一个‘boot’目录。
   2.

      将‘/boot/grub’目录中的内容复制到软盘:

      cp -R /boot/grub/ /mnt/floppy/boot/
   3.

      以‘root’身份启动‘grub’配置 shell :

      grub
   4.

      在该 shell 下,运行下面两个命令,以使软盘可启动:

      root (fd0)
      setup (fd0)
   5. 输入 quit 以退出 GRUB shell 。

info grub 中有一些配置的例子,比如从 disk 而不是从主分区启动微软的系统。

论坛徽章:
0
2 [报告]
发表于 2004-09-28 13:02 |只看该作者

启动 GNU/Linux —— GRUB

用其他启动工具

如果使用其他启动工具,您仍然需要将 LiLo 或 GRUB 安装到 Mandrake 系统根分区的启动扇区上(也就是‘/boot’目录所在的分区)。因此您得在“专家模式”(expert mode)中作相应设定,不管是选择安装 LiLo 还是 GRUB 。
如果您记不清根分区的设备名,可以回到“分区”(partitioning)安装步骤下,看看‘diskdrake’的分区布局。
如果您想过后使用另一启动工具,上一页中有这方面的建议。如果您想用 Win2000/XP 的启动工具,请阅读 WinSE、Win2k、Mandrake 三系统共存 。

* section index * top
* ‘loadlin’——从 MS-DOS 启动 GNU/Linux

您可以用 loadlin 实现由 MS-DOS 或 Windows 启动菜单进入 GNU/Linux 。如果您不希望改变硬盘的 MBR ,‘loadlin’比起 LiLo 或 GRUB 来是更好的选择。请注意,这个方法对 Windows NT、2000 或 XP 无效。

您可能想知道 GNU/Linux 如何访问‘/boot’目录所在的分区,这通常也就是硬盘的第一个 GNU/Linux 分区。您可以用 mount 命令或 ‘diskdrake’来查看。
如果您想了解 GNU/Linux 的分区命名方式,请阅读“挂载”(Mounting)中的 这一部分 。

Mandrake 光盘中已经没有‘loadlin’,我建议您用另带图形配置界面的 Winux 。当然,如果您坚持用纯的‘loadlin’,这里就有使用介绍:

   1.

      新建一个目录,比如‘c:\linux'’,将‘loadlin.exe’复制到这个目录中。
   2.

      将‘/boot’下的 GNU/Linux 内核映象(vmlinuz-[version])复制到‘c:\linux’,并重命名为‘bzimage’。
   3. 退出 GNU/Linux ,进入 MS-DOS ,在‘c:\’目录下,键入:

      linux\loadlin bzimage root=/dev/[GNU/Linux root partition] ro

      如上所示,‘bzimage’就是内核映象的文件名,‘root’指向 GNU/Linux 的根分区‘/’所在位置,‘ro’表示“只读”(read-only) 。

请注意,以后每次升级内核,您都要把新版的内核映象再放到‘c:\linux\’。

您还可以作更方便的设置,详情还请参阅 starting 'loadlin' via the Windows boot menu 。

* section index * top
* 卸载 LiLo、GRUB 及 GNU/Linux

卸载 Linux 与删除启动程序是两回事。

最佳的处理办法是先在 Linux 中用‘diskdrake’或 cfdisk /dev/[device] (‘device’经常指‘hda’或‘hdb’)删除 Linux 的分区,然后在重启,进入其他操作系统,再删除启动程序。在 DOS/Windows 中,可以用这条命令来完成:

fdisk /mbr

这将用 Windows 启动代码替换原来的 LiLo 或 GRUB 。在 Windows 2000/XP 下,您重启后进入“系统恢复控制台”(system recovery console),然后运行命令:

fixmbr
fixboot [drive]

其中‘drive’是系统盘的盘符。这样,就大功告成了。
在 Mandrake Linux 8.2 及其后继版本中,您也可以用光盘里的 应急系统(rescue system)来重置先前的启动扇区。

如果先删除了启动程序,您也可以在 Windows 或 DOS 下用其自带的‘fdisk’工具。这个程序通常会检测到“不相容”的分区,然后请求将其删除。请注意,Win9x 或 DOS 下运行这个程序将会删除存在的 NTFS 分区!
另一种办法是用 Mandrake 光盘启动 应急系统 (第一屏显示后后按 F1 键,然后输入‘rescue’),接着就可以使用其中的‘fdisk’程序,删除 Linux 分区。
第三种方法就要用到第三方程序,比如“分区魔术师”(Partition Magic)或免费的 Ranish Partition Manager 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP