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         //菜单项显示的时长 
splashp_w_picpath=(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   //要缩进

设置密码后显示: 需要输入密码解锁后才能执行编辑                                   wKioL1b3dFmTjeCDAAARM4-m0PI952.png

输入密码后就能编辑系统:                        wKioL1b3fGWB1YzFAAAdmyra77U770.png

选择内核启动又会叫你输入密码:

wKiom1b3fGCjaHRvAAAB0YTeECw473.png

输入密码后系统正常启动:   这就是grub密码认证机制

wKiom1b3fOXijrMcAAABqPeI8k0783.png     


在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命令行中启动系统:

         wKiom1b3paXTrcvaAAAVoORDvbo955.png

  




             






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:(系统无法启动)

                     把光盘插入光驱中,开启启动光盘:

                    wKioL1b3qoDySRaxAAMk4BYqkrw919.png












一路回车,到最后会显示系统已经挂载在/mnt/sysp_w_picpath,可以把根文件系统切换到/mnt/sysp_w_picpath

wKioL1b3quGgpDXjAAASY3jH8wk110.png

选择Shell start shell,回车

wKiom1b3qu2jIjQ0AAAFt5ogFDQ387.png

进入bash界面,直接运行chroot /mnt/sysp_w_picpath,切换根目录,执行grub-install --root-directory=/ /dev/sda

wKiom1b3rnDBUzaAAAAQIh3YafY685.png

然后exit退出,直接reboot就行。