Fork me on GitHub

CentOS系统GRUB

[toc]

简介

Grub(GRand Unified Bootloader)是统一资源引导器,也就是引导加载器;它的工作是提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM中的特定空间中,然后解压、展开,而后把系统控制权移交给内核

它目前有两个版本:

  1. GRUB 0.X:Grub Legacy
  2. GRUB 1.X:Grub2

Grub启动流程图

Grub Legacy概述

Grub Legacy是最经典的Grub程序。它分为三个部分stage1、stage1_5和stage2

  1. stage1

即写入mbr中存储的bootloader程序。它的任务就是将stage1_5(此时并不能算是磁盘分区/boot/grub/下的stage1_5,因为stage1无法识别文件系统)载入内存执行

  1. stage1_5

位于mbr之后的扇区,通过提供基本文件系统驱动让stage1中的bootloader程序能识别磁盘分区/boot/grub/上的stage2文件并载入内存执行

注意:此处若是boot分区的文件系统类型不属于stage1_5的中的一个,则会借助ramdisk来加载在/lib64/moudles/下额外的文件系统驱动。

  1. stage2

这个程序主要给用户提供一个比较友好的启动菜单,而后去加载位于同一个磁盘分区/boot/的内核文件(例如 vmlinuz-2.6.32-573.el6.x86_64)

Grub的配置文件和功用

配置文件:/boot/grub/grub.conf,保证grub和内核等在一个目录;此外它创建了一个链接文件/etc/grub.conf指向配置文件来保证用户使用配置文件一致性

配置项:

1
2
3
4
5
6
7
8
9
10
default=#:设定默认启动的菜单项:菜单项(title)编号从0开始
timeout=#:指定菜单项等待选项选择的时长;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
hiddemenu:隐藏菜单
password [--md5] STRING:菜单编辑认证;
title TITLE:定义菜单项“标题”,可出现多次;
root(hd#,#):grub查找stage2及kernel文件所在设备分区:为grub的“根”
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件
password [--md5] STRING:启动选定的内核或者操作系统进行认证;

示例:

/boot/grub/menu.lst 或者 /boot/grub/grub.conf CentOS下这两个文件是绑定的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 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 (hd1,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/sdb
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-274.3.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-274.3.1.el5 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-274.3.1.el5.img
title CentOS (2.6.18-238.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-238.el5 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-238.el5.img
title Other
rootnoverify (hd0,3)
chainloader +1

功用

1
2
3
4
5
6
7
8
1. 提供菜单、并提供交互式接口
* e:编辑模式,用于编辑菜单
* c:命令模式,交互式接口
2. 加载用户选择的内核或操作系统
* 允许传递参数给内核;可隐藏此菜单(通过grub.conf中的hiddenmenu)
3. 为菜单提供了保护机制
* 为编辑菜单进行认证(title上定义的password)
* 为启用内核或者操作系统进行认证(title下的password字段)

Grub的命令行接口和编辑功能

  1. 进入grub的命令行界面和编辑界面
  • 启动机器时,按ESC键可进入内核选择界面
  • 按c可进入命令行界面
  • 按e可进入编辑界面
  1. rub的命令行命令和编辑命令

grub的命令行命令

1
2
3
4
5
6
7
help:获取帮助信息
help KEYWORD:获取某一具体命令的帮助信息
find (hd#,#)/PATH/TO/SOMEFFILE:查找文件(内核文件等)
root (hd#,#):设定那个磁盘是根,执行后,fnd不需指磁盘了;
kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件;
initrd /PATH/TO/OMOTRAMFS_FILE:设定为选定的initrd文件
boot:引导启动选定的内核;

grub的编辑命令

1
2
3
4
5
6
b:boot,启动
e:edit,编辑选中的项
o:在选中行的下一行新加一行
O:在选中行的上一行添加一行
d:删除选中行
ESC:可以退出编辑界面进入主界面

grub的安装

  1. grub-install

使用格式:grub-install --root-directory=/PATH/TO/rootDIR DEVICE
示例:grub-install --root-directory=/ /dev/sda3
2. grub命令(shell中输入)

grub> root (hd0,0)

grub> setup (hd0)

本文标题:CentOS系统GRUB

文章作者:行锋

发布时间:2018年12月19日 - 15:12

最后更新:2019年02月14日 - 13:02

原始链接:https://chetaofeng.github.io/2018/12/19/Linux-CentOS系统GRUB/

许可协议: 署名-非商业性使用 转载请保留原文链接及作者

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!