一. 了解一下x86 的引导过程
机器加电启动后,BIOS 开始检测系统参数, 如内存的大小, 日期和时间, 磁盘设备以及这些磁盘设备引导的顺序。通常情况下,BIOS 都是被配置成首先检查软驱或光驱(或两者都检查),然后再尝试从硬盘引导。假如在这些可移动的设备中,没有找到可引导的介质,那么BIOS 通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。装载操作系统的这个程序就是启动装载程序boot loader 。
LINUX 里的boot loader 便是LILO 或者是GRUB 。
装载GRUB 和操作系统的过程,包括以下几个操作步骤:
1. 装载基本的引导装载程式 (stage1) 。 s tage1 只有512 字节,stage1 通常装载到主引导扇区里面, 对于硬盘就是MBR 了,stage1 的主要功能就是装载第二引导程式 (stage2). 这主要是归结于在主引导扇区中没有足够的空间用于其他东西了。
2. 装载第二引导装载程式 (stage2) 。 这第二引导装载程序实际上也是引出更高级的功能 , 以允许用户装载入一个特定的操作系统。在 GRUB 中,这步是让用户显示一个菜单或是输入命令。 由于stage2 很大(100KB 左右), 所以他一般位于文档系统之中( 通常是boot 所在的根分区) 。
3 、装载在一个特定分区上的操作系统,如linux 内核。GRUB 把机器的控制权移交给操作系统。
不同的是,微软操作系统都是使用一种称为链式装载的引导方法来启动的,主引导记录仅仅是简单地指向操作系统所在分区的第一个扇区。
二.grub 下的设备名称
-
硬盘都是用hd 开始(Grub 并不区分普通的 IDE 硬盘、当下流行的 SATA 硬盘和 SCSI 硬盘等 ) 。
(hd0,0) ,表示C 盘,(hd0,1),(hd0,2),(hd0,3) 表示另外的3 个主分区(基本分区)。
(hd0,4) ,表示D 盘。
总的来说对于硬盘 , 采用 (hdx,y) 的形式来表示, x 、 y 都是从 0 开始计数的, x 表示硬盘号, y 表示分区号。
-
软盘用 fd 开头。
linux 和grub 的命名不大一样:1. 分区号是从1 算起 2. 硬盘号用a,b,c 等表示。 3. 区分硬盘类型( 普通IDE 硬盘为hd ; SATA,SCSI 硬盘为sd) 。
(hd0,0) | (hda,1) |
(hd0,4) | (hda,5) |
(hd0,5) | (hda,6) |
|
|
(hd1,0) | (hdb,1) |
... | .... |
三.GRUB 的根文件系统
一些用户常困惑于GRUB 中根文件系统(root filesystem) 这一术语的用法。GRUB 的根文件系统与Linux 的根文件系统是没有关系的!
四.grub 的接口
当 GRUB 环境开始载入第二步引导装载程序时,它寻找自己的配置文件( menu.lst )。当找到配置文件后,它使用这个配置文件建立一个要载入的操作系统的菜单列表, 然后显示引导菜单接口。如果配置文件没有被找到,或者如果配置文件不能读取,那么 GRUB 将载入命令行接口。
(一)菜单接口
在菜单接口上,按[e] 键,对高亮菜单项中的命令进行编辑。按[c] 键载入一个命令行接口。添加( 加在当前行后面,用[o] 键;加在当前行前,用[0]) ,编辑( 用[e] 键) ,删除( 用[d] 键) 。
在所有的改变都完成后,用键来执行这些命令,并引导操作系统。[Esc] 键来放弃
命令行接口
(二)命令接口
以下是几个常用命令:
boot - 引导先前已经被指定并载入的操作系统或链式装载程序。
chainloader - 将指定的文件作为一个链式装载程序载入。为了获取在一个指定分区第一扇区内的文件,使用+1 作为文件名。
displaymem - 显示当前内存的使用情况,这个信息是基于BIOS 的。这个命令有助于确定系统在引导前有多少内存。
initrd - 使用户能够指定一个在引导时可用的初始RAM 盘。当内核为了完全引导而需要某些模块时,这是必需的。
install p - 安装GRUB 到系统的主引导记录。这个命令允许系统重启时出现GRUB 接口。
(警告:install 命令将覆盖主引导扇区中的其他信息。如果命令被执行,那么除了GRUB 信息之外的其他用于引导其他操作系统的信息都将丢失。在执行这条命令前,确定你对它有正确的了解。)
kernel - 当使用直接载入方式引导操作系统时,kernel 命令指定内核从GRUB 的根文件系统中载入。
比如 kernel /vmlinuz root=/dev/hda5
Vmlinuz 是内核。。它从GRUB 的根文件系统载入的,如(hd0,0) 。同时,后面一个选项被传给内核。它指出当Linux 内核载入时,内核的根文件系统应该是位于hda5 ,第一个IDE 硬盘的第五个分区。
五.Menu.lst 的命令
color - 设定在菜单中使用的颜色,一种是作为前景色,一种作为背景色。可以简单地使用颜色名称,如red/black 。比如:
color red/black green/blue
default - 默认项目的标题名称。如果菜单接口超时,那它将被载入。
fallback - 当这个命令被使用时,如果第一次尝试失败,那么这个项目的标题名称将被试用。
hiddenmenu - 这个命令被使用时,它不显示GRUB 菜单接口,在超时时间过期后载入默认项。用户通过按[Esc] 键,可以看到标准的GRUB 菜单。
timeout - 这个命令设定了在GRUB 载入由default 命令指定的项目前的时间间隔,以秒为单位。
splashimage - 它指定在GRUB 引导时所使用的屏幕图像的位置。
title - 设定用来装载一个操作系统的一组特定命令的标题。
字符# 用来在菜单配置文件放置注释。(T002)
六。例子
这是个非常基本的用于引导Red Hat Linux 或Microsoft Windows 2000 的GRUB 菜单配置文件可能如下所示:
default=linux
timeout=10
color=green/black light-gray/blue
# section to load linux
title linux
root (hd0,1) 这里制定了 grub 的根。并且挂载。
kernel /vmlinuz root=/dev/hda5 内核是grub 根下的vmlinuz 。
并且内核载入后,内核的根是在/dev/hda5
boot
# section to load Windows 2000
title windows
rootnoverify (hd0,0) rootnoverify 就是指定根,但是不要挂载。
chainloader +1 使用(hd0,0) 的第一扇区来引导。