- 论坛徽章:
- 0
|
GRBU最早是在1995年由Erich Boleyn编写的,其最初目的是为了能够从Utah Mach4微内核系统(即是现在的GNU Mach)中启动引导GNU Hurd操作系统。现在GRUB的基本目的是用于引导符合Multiboot标准的操作系统,Multiboot是一个用于定义符合多引导标准的操作系统规范,这个标准十分全面,但是目前支持它的操作系统仍不多,主要是GNU Hurd,所以现在仍不能达到GRUB所设想的操作系统引导界面大一统的局面,虽然这一天似乎很遥远,但是我们现在仍然可以享受GRUB给我们带来的强大功能和高度的灵活性。
下面我们来看看GRUB的特点和安装使用方法:
一. GRUB的技术特点:
1. 支持多可执行文件格式
GRUB支持各种a.out格式和ELF格式。
2. 支持不符合Multiboot标准的内核
GRUB能够直接支持多种并不符合Multiboot标准的自由操作系统内核(主要是FreeBSD,NetBSD,OpenBSD和 linux)。也能通过chainload间接引导非开放的其他操作系统。 瑞和数码
3. 支持操作系统模块装载。
4. 提供文本格式可手工修改的配置文件。
5. 菜单界面
6. 灵活的命令行界面
7. 多文件系统识别
能够透明地识别多种文件系统,现在能够识别的文件系统有BSD FFS,DOS FAT16,FAT32,Minix fs和Linux ext2fs.这个范围仍然在扩展。
8. 支持压缩文件的解压缩。
能够解压缩被gzip压缩的文件,并且这个识别和解压过程是自动的和对用户透明的,这个功能大大地减少了文件的大小,减少了load的时间,这个功能对于软盘上的系统尤其有用。
可能有些内核模块在装载时就要求是压缩状态,这时解压此模块可能会画蛇添足,所以GRUB提供了另一个不进行解压缩的模块装载命令。
9. 可以读取任何已安装的设备上的数据
支持读取软盘,硬盘上的数据,不依赖于根设备上任何的设置。
瑞和数码
10. 和磁盘定位的表示方法无关。
11. 能够使用BIOS所检测到的所有RAM.
GRUB通常能够找到PC兼容机上的全部RAM,它采用一种先进的BIOS查询技术来找到所有的内存空间。
12. 支持硬盘的LBA模式
GRUB通过支持LBA模式,突破1024柱面的限制,能够访问8GB以外的全部硬盘空间。
13. 支持网络
虽然GRUB是一个基于磁盘的引导程序,但是它也支持网络功能,你可以通过TFTP协议从网络上得到操作系统映象文件并引导。
GRUB的后继版本可能会包括一个内置的可编程语言来支持各种内核的引导参数,这还只是一个操作系统引导器吗?;),并且计划加入对非PC体系结构的支持。
二. 如何在LINUX下安装和使用GRUB
1. 下载并安装GRUB包:
你可以到<ftp://alpha.gnu.org/gnu/grub/grub-0.5.94.tar.gz>得到GRUB,然后: U盘之家
# zcat grub-0.5.94.tar.gz | tar xvf -
会生成一个目录grub-0.5.94,再:
# cd grub-0.5.94
# ./configure
# make install
这样GRUB就安装好了,下面你需要在你的硬盘或者软盘引导区上安装GRUB引导代码。
a. 制作GRUB引导软盘:
# cd /boot/grub
# dd if=stage1 of=/dev/fd0 bs=512 count=1
# dd if=stage2 of=/dev/fd0 bs=512 seek=1
b. 制作GRUB硬盘引导:
重启动用GRUB引导软盘引导,或者你不想重启动也可以执行/usr/sbin/grub。两种情况都会进入命令行界面。 然后,我们首先要设置GRUB的“根设备”,也就是告诉GRUB安装所在的分区:
grub> root (hd0,0)
这里牵涉到GRUB的设备命名规则,将在下面介绍,此处(hd0,0)是指第一块硬盘的第一个分区。
如果你不能够确定安装GRUB所在的分区号的话,可以通过find指令查找: www.gzusb.com
grub> find /boot/grub/stage1
GRUB将会查找文件/boot/grub/stage1并显示包含这个文件的设备名,当然就是我们安装GRUB所在的分区。下面就可以写引导记录了:
grub> setup (hd0)
这条命令将会在第一块硬盘的MBR安装GRUB引导,如果你不想在MBR安装GRUB,而是希望将GRUB安装在分区的引导扇区的话,你可以用下面指令指定安装设备:
grub> setup (hd0,0)
这将会在第一块硬盘的第一个分区的引导扇区安装GRUB。
OK,现在你就可以重新启动由GRUB引导你的系统。
2. GRUB的设备命名规则:
首先GRUB对设备的命名必须包含在小括号内,GRUB不区分IDE硬盘和SCSI硬盘,统一使用hdx,其中x指定BIOS中硬盘的编号,从零开始计数,而且通常计算机内的IDE 硬盘编号在SCSI硬盘前。GRUB用fdx指定软盘设备,x是软盘驱动器号。具体命名规则如下:
(fd0):第一软驱,GRUB还可以引导软盘上的操作系统
(hd0,1): 第一块硬盘的第二个分区。
(hd1,4): 第二块硬盘的第一个扩展分区,扩展的分区是从4开始编号的。
(hd0,2,a): 专用于FreeBSD,FreeBSD有一个slice概念,把一个分区进一步分为几个slice,此处指明是第一块硬盘的第三个分区中的slice a。你也可以用(hd0,a),这样GRUB就会在第一块硬盘上找到第一个FreeBSD分区的slice a。
让我们再来看看GRUB对于磁盘文件的命名方法:
(hd0,1)/vmlinuz,很简单只要指定分区号和文件的绝对路径名就可以了。 U盘之家
3. 现在来看看如何用GRUB引导我们的多操作系统,用GRUB引导后可以进入命令行模式或者菜单模式,你可以通过灵活的命令行模式选择引导各个分区的操作系统,指定引导参数。
GRUB支持三种引导方法,第一种是直接引导操作系统内核,第二种是通过chainload进行间接引导。
对于GRUB能够支持的LINUX,FreeBSD,OpenBSD,NetBSD,GUN Mach可以通过直接引导完成,不需要其他的引导扇区了,但是对于GRUB不直接支持的操作系统,需要用第二种方法chainload来完成。另外 GRUB还支持网络引导,我们分别来看看这几种引导方法:
(a) 直接引导:
通常步骤如下:
1.用root命令设置包含操作系统内核的根设备
2.用kernel命令装载内核映象文件,如果这个内核引导的时候有参数的话,可以直接将参数加在内核文件名的后面。
3.用module或modulenounzip装载内核模块。 U盘之家
4.boot开始引导。
(b) chainload引导:
1.首先设置GRUB的根设备,用:
grub> rootnoverify (hdx,y)
2.开始引导
grub> chainloader +1
此处';+1';是指示GRUB读入分区的第一个扇区的引导记录。
3.执行boot开始引导
以上是一般的chainloader方式,对于DOS和WINDOWS,可以简单地用两条指令进行引导:
chainloader (hdx,y)+1,然后boot,其中x,y用来指明所在分区号。
(c) 从网络引导:
为了使GRUB能够支持从网络引导,你需要在编译时打开网络支持选项,关于这个你可以参考源文件目录里的 `netboot/README.netboot为了从网络引导,你首先要在网络设置两个服务,首先是动态IP配置服务,可以是BOOTP,DHCP或 RARP服务器,另一个是TFTP服务。
然后分别针对不同的服务器BOOTP,DHCP或RARP(三个选一个)运行 bootp,dhcp,rarp。如果一切设置无误的话GRUB就会给出IP,IP netmask和TFTP服务器的IP和网关的IP地址。最后,从网上得到操作系统的映象文件,网络的设备名称是(nd).如下例:
www.gzusb.com
grub> bootp
Probing... [NE*000]
NE2000 base ...
Address: 192.168.110.23 Netmask: 255.255.255.0
Server: 192.168.110.14 Gateway: 192.168.110.1
grub> root (nd)
grub> kernel /tftproot/gnumach.gz root=sd0s1
grub> module /tftproot/serverboot.gz
grub> boot
4. 多操作系统引导实例:
GNU/Hurd
--------
因为GNU/Hurd是符合Multiboot规范的操作系统,所以非常容易引导:
grub> root (hd0,2)
如果你不记得Hurd所在的分区号的话,可以用find /boot/gnumach查找。
grub> kernel /boot/gnumach root=hd0s1
grub> module /boot/serverboot
grub> boot
GNU/Linux
---------
grub> root (hd1,3)
grub> kernel /vmlinuz root=/dev/hda1
如果你需要指定内核启动参数的话,可以直接加到命令的最后面如:
grub> kernel /vmlinuz root=/dev/hda1 vga=ext 瑞和数码
如果你使用initrd的话,在kernel命令之后执行:
grub> initrd /initrd
grub> boot
FreeBSD
-------
GRUB能够直接装载.ELF和a.out两种格式的内核,但是由于FreeBSD的内核引导接口有时有较大的变动,
所以,对FreeBSD最安全的引导方法是引导/boot/loader
grub> root (hd0,a)
grub> kernel /boot/loader
grub> boot
NetBSD,OpenBSD,NetBSD
-------------------------------------
这三种系统的引导指令序列一样,如下:
1. ';root';设置根设备.
2. `kernel';装载内核.
3. `boot';引导.
DOS/Windows
-----------
grub> rootnoverify (hd0,0)
grub> chainloader +1
grub> boot
SCO UnixWare
------------
grub> rootnoverify (hd1,0)
grub> chainloader --force +1
grub> makeactive //注意这条指令将设置UnixWare分区为活动分区,这样要求你的GRUB安装在MBR,否则下次启动时将直接进入UnixWare而不会进入GRUB grub> boot
www.gzusb.com
当然,如果每次引导都需要敲入命令的话实在是太麻烦了,因此,类似于 LILO,GRUB提供了一个菜单方式,你需要一个配置文件将这些命令放入配置文件中就可以实现菜单方式的多引导,当然在菜单方式下你可以切换到命令模式下。GRUB引导时查找/boot/grub/menu.lst,如果存在这个文件的话,就根据这个文件生成一个引导菜单,menu.lst文件格式很简单,如下示例:
5. 菜单设置文件格式
# 等待用户选择菜单项的时间(以秒计),超时则引导默认的选项
timeout 30
# 默认选项,第一项
default 0
# 如果第一项出错,则启动下面的后备选项
fallback 1
# 引导 GNU Hurd,其中title就是菜单中显示的提示字符串
title GNU/Hurd
root (hd0,0)
kernel /boot/gnumach.gz root=hd0s1
module /boot/serverboot.gz
# 引导 Linux
title GNU/Linux
U盘之家
root (hd1,0)
kernel /vmlinuz root=/dev/hdb1
# 引导Mach (kernel映象文件放在软盘)
title Utah Mach4 multiboot
root (hd0,2)
pause Insert the diskette now!!
kernel (fd0)/boot/kernel root=hd0s3
module (fd0)/boot/bootstrap
# 引导 FreeBSD
title FreeBSD 3.4
root (hd0,2,a)
kernel /boot/loader
# 引导 OS/2
title OS/2
root (hd0,1)
makeactive
chainloader +1
# 引导 Windows NT 或者 Windows95,98
title Windows NT / Windows 95,98 boot menu
rootnoverify (hd0,0)
chainloader +1
# 安装 GRUB 到硬盘MBR
title Install GRUB into the hard disk
root (hd0,0)
setup (hd0)
# 改变显示菜单的颜色
title Change the colors
color light-green/brown blink-red/blue
6. GRUB的用户界面介绍
GRUB的用户界面有三种:命令行模式,菜单模式和菜单编辑模式 www.gzusb.com
(a) 命令行模式:
进入命令行模式后GRUB会给出一个命令提示符`grub>`,此时就可以键入命令,按回车执行。此模式下可执行的命令是在menu.lst中可执行的命令的一个子集。此模式下允许类似于Bash shell的命令行编辑功能: |
|