1.GRUB简介
1.1grub与启动引导器
启动引导器是计算机启动过程中运行的第一个真正的软件,通常计算机启动时在通过BIOS自检后读取并运行硬盘的主引导扇中的启动引导器程序,启动引导器再负责加载启动硬盘分区中的操作系统。
1.2 grub的功能
- 提供了真正的命令行交互界面,能够使用户以最大灵活性使用各种参数引导操作系统和收集系统信息。
- 支持LBA模式
- GRUB能够访问ext2分区
2 安装GRUB
安装GRUB有两个层次的含义:
- 安装GRUB软件包
- 安装GRUB到MBR #grub-install /dev/hda
GRUB软件包的安装:
文件名:grub-0.93-4.i386.rpm
#rpm –q grub //查询
#rpm –ivh /mnt/cdrom/RedHat/RPMS/grub-0.93-4.i386.rpm//安装
3 GRUB的操纵界面
3.1 GRUB的启动菜单界面
作用:可以选择GRUB配置文件中预设的启动菜单项,从而实现硬盘中多个操作系统的切换引导。此外还可以进入菜单项编辑界面和GRUB命令行界面。
GRUB启动菜单按键:
- ↑↓在启动菜单项间移动
- Enter:启动当前的菜单项
- e:编辑当前的启动菜单项
- a:添加内核的启动参数
- c:进入GRUB的命令行模式
在此模式下可以对GRUB配置文件中已经存在的启动项做进一步的调整. 例如:对现有行进行编辑、添加删除命令行。
GRUB启动菜单编辑界面按键:
- ↑↓选择菜单项中的行
- b:启动当前的菜单项
- e:编辑当前选中的行
- c:进入GRUB的命令行方式
- o:在当前行后面插入一行
- O:在当前行前面插入一行
- d:删除当前行
- Esc:返回GRUB启动菜单界面,取消对当前启动菜单项所做的任何修改
3.3 GRUB命令行界面
Guub命令行界面提供了方便友好的命令行交互方式,其特点包括:
- 提供在线帮助命令“help”,并且可以获得每条命令的详细帮助
- 可使用左右方向键编辑行命令
- 可以使用上下方向键滚动历史命令
- 可使用“tab”键补全命令
4 GRUB的配置文件
默认的配置文件在/boot/grub/grub.conf,在GRUB成功安装到硬盘主引导扇区后,只要编辑该文件,就可实现对GRUB的配置.无需重写grub到MBR.
GRUB配置文件中包括全局配置和菜单项配置两部分:
4.1 GRUB配置文件的全局命令
- 使用default命令设置GRUB的默认启动项
- 命令格式:default 菜单项序号
- 使用splashimage命令设置GRUB的启动界面
- 命令格式:splashimage 图象文件全路径名 //用于指定某一个文件作为启动菜单的背景图象
- 例:splashimage (hd0,0)/boot/grub/splash.xpm.gz
- 使用timeout命令设置菜单的启动延时
- 命令格式:#timeout 延时秒数
4.2 GRUB的菜单项的配置命令
title 菜单项名称 例:#title windows
4.3 配置linux的启动菜单项
GRUB对于不同的操作系统有不同的引导方式,对linux操作系统GRUB可以直接引导其内核并启动,典型的linux启动彩单配置为:
Title RedHat Linux(2.4.20-8)
root(dh0,0)
kernel/boot/vmlinuz-2.4.20-8 ro root=LABEL=/
initrd/boot/initrd-2.4.20-8.img
linux启动菜单项的配置命令:
- title:定义linux启动菜单项的名称
- root:设置GRUB的根设备(root)为linux内核所在的分区
- kernel:使用kernel命令后跟linux内核文件作为参数,加载linux的内核文件
- initrd:使用initrd命令加载镜像文件
4.4 配置windows的启动菜单项
GRUB不能够直接加载windows系统的内核文件进行引导,而是通过调用windows操作系统自身的启动引导器,通常为windows所在分区的引导扇区
典型的windows启动菜单项配置为:
title win2kp
map(hd0)(hd1)
map(hd1)(hd0)
root(hd1,0)
makeactive
chainloader+1
Windows启动菜单项配置命令:
- title:定义windows启动菜单项的名称
- map:使用map命令交换磁盘或分区在BIOS中的标志符,用于启动在第二个硬盘中的windows
- root:设置真实的windows分区为GRUB的根设备
- Makeactive:设置根设备为活动分区(针对windows不能从非活动分区启动)
- chainloader:使用chainloader命令调用windows分区的启动引导器引导windows系统
5 GRUB的安全设置
主要功能:
- 可以针对启动菜单设置全局口令
- 可对某菜单项使用全局口令
- 可对某菜单项设置独立口令
- 对所有的口令都可以使用MD5进行加密
5.1 设置全局口令琐定启动菜单
全局口令用于设置只允许用户选择启动菜单项进行启动,如进行其他操作需输入设置的全局口令.
- Password命令
- 设置全局口令(设置GRUB的全局口令为12345)
password12345
解锁GRUB启动菜单:
- 在锁定的启动菜单中选者“p”
- 在 “password:”提示符后输入正确的口令,并按回车键确认
- 如口令输入正确,启动菜单解锁后恢复正常的状态
5.2使用全局口令锁定启动菜单项
锁定启动菜单项的步骤为:
- 设置GRUB全局口令
- 在菜单项配置中使用lock命令锁定菜单项
5.3设置独立的口令锁定启动菜单项
5.4使用MD5加密口令
6 GRUB的使用技巧
6.1配置GRUB重复上次启动项
- 在全局配置中使用default saved,用于指定默认启动项为上次保存值
- 在各菜单项配置命令的末尾使用savedefault命令,保存当前启动项为默认启动项
6.2制作GRUB启动软盘
- #mke2fs /dev/fd0
- #mount /mnt/floppy/
- #grub-install –root-directory=/mnt/floppy/`(fd0)`
- #umount /mnt/floppy/
- #reboot
6.3使用GRUB启动软盘恢复被覆盖的硬盘引导系统
- grub>root
- grub>find /boot/grub/grub.conf
- grub>root(hd0,0)
- grub>setup(hd0,0)
配置文件的位置和名称
GRUB 启动引导器的相关文件被缺省保存在“/boot/grub”目录中,其中 menu.lst 文件是 GRUB 的主配置文件,GRUB 在启动时就是根据该文件的配置内容显示启动菜单的。 # ls /boot/grub/ device.map grub.conf minix_stage1_5 stage2 e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5 fat_stage1_5 jfs_stage1_5 splash.xpm.gz vstafs_stage1_5 ffs_stage1_5 menu.lst stage1 xfs_stage1_5 在 Red Hat 系列的 Linux 系统中(包括 CentOS)更习惯于使用文件名 grub.conf 来作为 GRUB 的配置文件。为了保持与其他系统的兼容性和文件的一致性,CentOS 分别在“/boot/grub”和“/etc”两个目录中建立了名为 grub.conf 的符号链接文件指向真正的配置文件“/boot/grub/menu.lst”。 # cd /boot/grub # ls -l menu.lst grub.conf -rw------- 1 root root 595 Mar 31 18:06 grub.conf lrwxrwxrwx 1 root root 11 Mar 31 18:06 menu.lst -> ./grub.conf # ls -l /etc/grub.conf lrwxrwxrwx 1 root root 22 Mar 31 18:06 /etc/grub.conf -> ../boot/grub/grub.conf 因此,无论直接编辑menu.lst文件,还是编辑相应目录中的grub.conf文件都可以达到修改GRUB配置的目的。 CentOS 5 中 GRUB 的缺省配置 CentOS 5 服务器方式缺省安装后,文件 menu.lst 已经进行了缺省的配置。 ## 执行 cat 命令后显示 menu.lst 文件的缺省配置 # cat /boot/grub/menu.lst # grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVolRoot # initrd /initrd-version.img #boot=/dev/hda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-53.el5) root (hd0,0) kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVolRoot initrd /initrd-2.6.18-53.el5.img menu.lst 文件中的内容可以分为三类: ?注释行通常放在文件的首部,以“#”开始,起到说明的作用;由于文件中的注释行在GRUB执行时会被忽略,因此也可以将暂时不使用的配置行加入“#”到行首作为注释,以使其失效而不必急于删除该行。 ?全局配置行通常放在文件首部注释行的后面,其作用范围是整个GRUB运行环境(包括所有菜单项);不包括在title命令区域内的所有行都被视为全局配置行。 ?菜单项配置行以 title 命令开始,直到下一个 title 命令或文件末尾结束,其包括的所有配置行都作用于同一个启动项,该启动项由 title 命令的参数命名;配置文件中可以具有多个菜单项配置,用于多系统启动的配置。 menu.lst 的配置命令 下表列出了一些常用的可在 grub.conf 中使用的配置命令。 GRUB 配置文件举例 选择启动不同的 Linux 内核 要完成对 Linux 操作系统的引导至少要有 title、root、kernel、initrd 四条命令。对于不同的 Linux 操作系统(或同一系统的不同内核版本),需要根据内核文件实际的位置和名称进行启动行的配置,即 title、root、kernel 和 initrd 四条命令的命令参数需要具体设定。 下面是一个更新系统内核后的 GRUB 配置例子,可以选择启动不同的内核。 # 设置默认启动第一个启动项 default=0 配置命令 功能 default <菜单项序号> 设置启动菜单的默认启动项,菜单项序号参数其值从”0”开始,即”0”代表第1个菜单项,”1” 代表第2个菜单项等等。 timeout <延时秒数> 设置 GRUB 菜单的启动延时(以秒为单位),即经过该延时后 GRUB 将自动启动默认的菜单项。当 timeout 命令设置的延时秒数为负数或不设置 timeout 命令时,GRUB 启动菜单将取消启动延时功能,用户需手工选择要启动的菜单项。 title <标题> 设置用来装载一个操作系统的一组特定命令的标题,标题将在 GRUB 启动菜单中显示。 splashimage <图像文件全路名> 指定某文件作为启动菜单的背景图像,该文件必须是 xpm 格式的图像,可以是 gz 压缩文件。 root <GRUB 的设备名称> 设置 GRUB 的根分区(root),通常是文件系统的 boot 分区,即 Linux 内核所在的分区。 rootnoverify <GRUB 的设备名称> 做 root 命令同样的事情,只是不挂装分区(用于启动 Windows 系统)。kernel 用 kernel 命令后跟 Linux 内核文件作为参数,加载 Linux 的内核文件。 initrd 用 initrd 命令加载初始 RAM 磁盘镜像文件。 map 映射磁盘或分区在 BIOS 中的标志符,用于启动在第二个硬盘中的 Windows。 makeactive 设置根设备为活动分区(针对于Windows不能从非活动分区启动)。 chainloader 使用 chainloader 命令调用Windows分区的启动引导器引导 Windows 系统。# 设置 GRUB 菜单的启动延时为 5 秒 timeout=5 # 指定启动菜单的背景图像位于 /boot/grub/splash.xpm.gz splashimage=(hd0,0)/grub/splash.xpm.gz # 设置 GRUB 菜单为隐藏 hiddenmenu # title 命令开始一个菜单项的配置 title CentOS (2.6.18-53.1.13.el5) # 设置 GRUB 的根分区(即 /boot 分区) root (hd0,0) # 设置 Linux 内核及参数 kernel /vmlinuz-2.6.18-53.1.13.el5 ro root=/dev/VolGroup00/LogVolRoot # 设置初始 RAM 磁盘镜像文件 initrd /initrd-2.6.18-53.1.13.el5.img title CentOS (2.6.18-53.el5) root (hd0,0) kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVolRoot initrd /initrd-2.6.18-53.el5.img 具有 Windows 的多系统启动配置 虽然在本书的 CentOS 服务器方式安装中,只安装了唯一的 Linux 操作系统,但是功能强大的 GRUB 启动引导器完全可以实现 Linux 和 Windows 共存的多系统启动。 由于 GRUB 不能够直接加载 Windows 系统的核心文件进行引导,而是通过调用 Windows 操作系统自身的启动引导器(通常为 Windows 所在分区的引导扇区),所以对于 Windows 系统的引导需使用与 Linux 系统引导不同的命令。Windows 的启动菜单配置经常会使用 map、root、makeactive、chainloader 等命令。 1、Linux 和 Windows 分别安装在两块硬盘的情况 在下面的实例中系统中的第一块硬盘中已经按照本书的步骤安装了 CentOS 系统,现在又添加了系统中的第二块硬盘,在该硬盘的第一个主分区中已经安装有能够在本机正常运行的 Windows 系统,剩下的任务就是在 menu.lst 配置文件中添加对 Windows 系统的引导配置内容。 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-53.el5) root (hd0,0) kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVolRoot initrd /initrd-2.6.18-53.el5.img title Windows map (hd0) (hd1) map (hd1) (hd0) # 设置真实的 Windows 分区为 GRUB 的根设备。 rootnoverify (hd1,0) # 设置根设备为活动分区(针对于 Windows 不能从非活动分区启动) makeactive # 调用 Windows 分区的引导记录引导 Windows 系统启动 chainloader +1 由于 Windows 系统自身只能安装到主硬盘(系统中的第一块硬盘)中的活动分区中进行引导启动,因此在配置行中需要使用两条 map 命令双方向的映射两块硬盘在 BIOS 中的标志符(目的是为了迷惑 Windows 系统),并使用 makeactive 将 Windows 分区设置为活动分区,这样“chainloader +1”命令才能够使用 Windows 分区中的引导记录启动 Windows 系统。 2、Linux 和 Windows 安装在同一块硬盘的情况 下面是一个使用 GRUB 选择启动 Windows 或 CentOS 的 grub.conf 的另一个例子。在这个例子中, Windows 系统安装在硬盘的第一个主分区,Linux 的引导系统在磁盘的第一个逻辑分区上。 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-53.el5) root (hd0,5) kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/VolGroup00/LogVolRoot initrd /initrd-2.6.18-53.el5.img title Windows rootnoverify (hd0,0) chainloader +1 ?显示源文件 ?