GRUB: Grand Unified Bootloader 统一引导加载器
功能:提供一个菜单,允许用户选择要启动的系统版本,把用户选定的内核装载至内存的特定空间中,解压展开然后把控制权移交给内核。
Centos6:grub 0.X:Grub legacy 传统版本
Centos7:grun 1.X:Grub2 重写版本
grub引导系统分为三部分:
1、stage1:bootloader 识别stage2并把stage2放置到内存中
2、stage1.5:文件系统接口,让stage1能够识别stage2上的文件系统
3、stage2:磁盘分区(/boot/grub),提供交互式接口,加载内核
stage1是存放在bootloader中的,stage1.5和stage2是存放在磁盘分区上面,这使得程序员不用局限于MBR上的446bytes,使得引导程序可以提供菜单,可以提供不同的操作系统或者内核选项。
stage2的功能:
1、提供菜单、并提供交互式接口
e:编辑模式,用于编辑菜单
c:命令模式、交互式接口
2、加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
3、为菜单提供了保护机制
为编辑菜单进程认知
为启动内核或操作系统进行认证
配置文件:/boot/grub/grub.conf 链接至 /etc/grub.conf
[root@localhost local]# cat /etc/grub.conf # 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/sda3 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 //默认启动的菜单项,菜单项的编号从0开始 timeout=5 //菜单项显示的时长 splashimage=(hd0,0)/grub/splash.xpm.gz //指明菜单的背景图片 hiddenmenu //隐藏菜单 #passwd [--md5] string //加密菜单,只有输入密码才会显示菜单 passwd --md5 $1$Izzki$abzYPEVRpdH52b0vGIkBS0 title CentOS 6 (2.6.32-573.el6.x86_64) //定义菜单名称 root (hd0,0) //grub查找stage2及kernel文件所在的设备区 kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=98a6a73c-6b57-479f-947f-2d201a17c950 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet //启动的内核 initrd /initramfs-2.6.32-573.el6.x86_64.img //内核匹配的initramfs文件 #passwd [--md5] string //启动选定的内核或操作系统时的认证 passwd --md5 $1$Izzki$abzYPEVRpdH52b0vGIkBS0 //要缩进
选择内核启动又会叫你输入密码:
输入密码后系统正常启动: 这就是grub密码认证机制
在grub菜单时可以按C编辑菜单:
如何识别设备:
(hd#,#)
hd#:磁盘编号,数字表示,从0开始编号
#:分区编号,用数字表示,从0开始编号
(hd0,0)表示第一块磁盘上的第一个分区
grub的命令行接口
help:获取帮助列表
help Keyword:详细帮助信息
find (hd0,0)/vmlinuz-2.6.32
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#) 设置那个设备为根文件,grub所在的分区,
kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件:额外还可以添加许多内核支持使用的cmdline参数
后面加 init=/path/to/init(指定启动哪个init),selinux=0(禁用selinux功能)参数
initrd /path/to/initramfs_file:
设定为选定的内核提供额外文件的ramdisk;
boot:引导启动选定的内核
示例:在grub命令行中启动系统:
root (hd0,0):指定根文件系统,其实就是grub所在的分区(/boot)
kenerl /vmlinuz-2.6.32-573.e16.x86_64 ro(只读) root=/dev/sda3(真正的根分区)
initrd /inittramfs-2.6.32-573.e16.x86_64.img //指定ramfs的文件
boot /引导启动的内核
进入单用户模式:
1、编辑菜单选项(选择title然后按e选项)
2、选定内核,回车,在最后面加上
1,s,S或者single 回车
3、按‘b’选项重启系统就进入了单用户模式
如果忘记了root密码可以进入此模式更改
进入紧急救援模式修复grub stage1:(系统无法启动)
把光盘插入光驱中,开启启动光盘:
一路回车,到最后会显示系统已经挂载在/mnt/sysimage,可以把根文件系统切换到/mnt/sysimage
选择Shell start shell,回车
进入bash界面,直接运行chroot /mnt/sysimage,切换根目录,执行grub-install --root-directory=/ /dev/sda
然后exit退出,直接reboot就行。
原文:http://lanxianting.blog.51cto.com/7394580/1757251