Linux--grub

一、Grub简介

    系统启动引导管理器(bootloader),就是系统启动时在执行POST加电自检功能的BIOS程序之后、操作系统内核运行之前这中间所运行的一段程序,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化及启动过程则完全由内核来控制完成。所以,它的主要作用是加载内核,并将整个系统的控制权移交给内核。常见的bootloader有Windows的ntloader、Linux的lilo、grub及grub2等。其中,在CentOS 5/6系列上使用的是grub,而在CentOS 7开始则使用grub;lilo则常见于手机,因此lilo是使用者最多的一种bootloader。

二、Grub配置

(1)stage

Linux将Boot Loader的程序运行与配置项加载分成三个阶段(stage)来进行:

        stage1:运行Boot Loader主程序,就是从一个本地磁盘加载 stage 2 或者 stage1_5,这个程序必须要被安装在启动区,即MBR中。stage1 是用于引导 Grub 的一个必须的映象文件。因为 MBR 空间有限,只有512字节,所以 stage1 也是512字节。因此在MBR当中仅安装Boot Loader的最小主程序,即 stage1,并没有安装 Boot Loader 的相关配置文件。因为大小的限制,stage1 对 stage2 或者 stage1_5 的位置进行编码。

        stage1_5:在MBR随后的扇区存放,主要用于与 stage2 的分区的文件系统进行交互,让stage1中的 Boot Loader 能够识别stage2所在分区的上的文件系统,通过借助于stage1.5阶段所提供的文件系统驱动,stage1就可以通过加载其中某一种文件系统驱动来识别stage2所在分区的文件系统了。

        stage2:(1) 向用户提供菜单,并提供交互式接口。例如,在启动时可进入菜单,通过键入e键进入编辑模式,可以编辑菜单,此时会读取配置文件;也可以通过键入c键可以进入命令行模式,即进入交互式接口,可以自己手动指定要启动的内核而不读取grub配置文件;

                      (2) 加载用户选择的内核或操作系统。在选择时允许用户传递参数给内核,也可以隐藏菜单的具体内容;

                      (3) 为菜单提供保护机制。可以为编辑菜单提供认证,用户需要通过认证方可编辑指定菜单;也可以为内核或操作系统提供认证,用户需要通过认证方可启动指定的内核或操作系统。

      device.map:定义 grub 装在了哪里
                e2fs_stage1_5:ext4文件系统的定义
                 fat_stage1_5:fat文件系统的定义
                ffs_stage1_5:ffs文件系统的定义
                grub.conf:grub的配置文件
                iso9660_stage1_5:光驱文件系统的定义
                jfs_stage1_5:jfs文件系统的定义
                menu.lst -> ./grub.conf 
                minix_stage1_5:minix文件系统的定义
                reiserfs_stage1_5:reiserfs文件系统的定义
                splash.xpm.gz:启动时在 grub 底下的背景图示
                stage1:tage 1的相关说明
                stage2:tage 2的相关说明
                ufs2_stage1_5:ufs2文件系统的定义    
                vstafs_stage1_5:vstafs文件系统的定义
                xfs_stage1_5:xfs文件系统的定义

由以上得知在 /boot/grub 目录下最重要的是grub的配置文件及各种文件系统的定义,当 Boot Loader 读取了这些文件系统所定义的数据后,就能够识别文件系统并读取该文件系统上的内核文件了。

(2)grub的配置文件

 配置文件:/boot/grub/grub.conf<--/etc/grub.conf,grub.conf是grub的主配置文件,通过这个配置文件,grub才能找到kernel,系统才能正常启动。

CD@DM6PR3$$`)Z4S[SZCIVB.png

default=0
    表示默认的启动条目,假如同时装有多个操作系统,0  表示定义的第一个title系统,1 表示定义的第二个title系统,依次类推。
timeout=5
    表示可供选择的等待时间,如果超过5秒,则使用默认的启动条目default定义的。
splashimage=(hd0,0)/grub/splash.xpm.gz
    定义启动时的gurb背景图片信息,一般为压缩文件。
hiddenmenu
    启动时是否要显示菜单,默认情况下是不显示菜单信息,如果想要显示菜单,可以将该配置注释即可;
title
    定义各个操作系统的名称或系统内核
root 
    表示内核文件存放的位置,这里指定的是分区位置,而非根目录  
(hd0,0)
    识别硬盘设备    
    hd#: 磁盘编号,用数字表示;从0开始编号    
    #: 分区编号,用数字表示; 从0开始编号    
    (hd0,0) 第一块硬盘,第一个分区   
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=e0d35066-8d37-42f2-bdb9-e4416aec281a rhgb quiet    
        内核的名称以及一些启动时的核心参数。由于启动过程中需要挂载根目录,因此就需要指定根目录所在的分区。rhgb表示色彩显示,quiet表示静默模式加载内核。
initrd /initramfs-2.6.32-696.el6.x86_64.img
    虚拟文件系统,指明用于辅助内核完成系统启动的ramdisk文件路径再次在内存缓存

注意: kernel与initrd这两个设置项中,指定的路径都是绝对路径。因为这两个文件都存放在/boot目录。而且/boot所在的分区已经在root (hd[0-n],[0-n])中指定,所以就无需再指明kernel与initrd在哪个分区了。如果boot分区为独立分区,那么前面的/boot省略掉。如果boot分区为非独立分区,那么必须加上/boot。

三、实验

在Linux系统中,出于安全的考虑,只有一个root用户,因此若遗忘root用户的登录密码,就可以借助grub进入单用户模式进行修改密码。

实验1:修改root密码

(1)重启系统,在读秒没完成之前,按任意键进入grub菜单。出现grub菜单时,按↑,↓进行引导,并定位到要进入的操作系统选项,如图进行操作。

2DSK]CCJP1T9NI(SADI~WZK.png

(2)按“↓”进行引导,定位到第二个选项,按“e”进入编辑模式。

$@]X%YOF$F@83NO76GE2{`P.png

(3)输入1之后回车返回grub模式,按b进入单用户模式。

2(_PZ6CFT2{5D$VV0@0K3RN.png

(4)进入shell环境,输入passwd,重新更改root密码,输入完成后,使用reboot命令重启系统。

ZOJG1A676JOFZD2~EU97VLN.png

(5)输入用户名和新密码,启动系统。

N]Q1U]QOTJ1WA@_W12SFWK3.png

实验2:  删除/boot下的所有文件,并恢复

(1)删除/boot下的所有文件,并重启系统

[C))OR~%~2Z_@NABAE)S_VH.png

(2)在进度条没完成之前,右手按鼠标左键,同时左手按ESC键,进入Boot  Menu,使用↓进行引导,定位到3. CD-ROM  Drive 选项,回车。

UJ8(VR%)$[O$W7Q5W6_JQH0.png

(3)使用↓进行引导,定位到选项resuce(救援模式),回车

(4)依次“yes”“yes”“no”“yes”“continue”“OK”......,直至进入shell编辑模式,回车。

S64]OVSR(9L22Z_C]G)8FMV.png

_W([FH{U53%%(6C[NU5GLG1.png

(5)切换根目录,安装grub.

chroot /mnt/sysimage
grub-install /dev/sda

P8_LWFDX_6OF63LL$]M0YM9.png

(6)挂载光盘,复制vmlinux到/boot目录下,创建initrd系统。

mount /dev/cdrom /media
cp /media/isolinux/vmlinux /boot
mkinitrd /boot/initrd-$(uname -r).img $(uname -r)

MP0QERFK6{C[GYT@6(MM×××1.png

(7)进入/boot/grub/目录下,使用vim命令编辑grub.conf文件,内容如下:

WKLZ0H@ATS{ZWNLOO`[J76P.png

注:脚本里的UUID指的是/boot目录下的UUID,别搞错了。

(8)输入两次exit命令,退出shell编辑模式,重启系统,回车。

(H])OO)81~3A13NJU39_@7S.png

实验3:给grub加密

grub也有自己的保护机制,只有通过认证才能修改grub.conf信息。可以通过一些方式来对grub.conf进行保护:

   1、在第一个title之上添加 password --md5 ************ 主要用于保护编辑功能;
    2、在某个title内添加 password --md5 ************ 主要用于保护内核;
生成密码的命令:grub-md5-crypt

(1)输入grub-md5-crypt命令,生成明文密码

CEFR2[CDMYLSI%U4JHTDJLV.png

(2)在grub.conf里添加密码

{7(XR2RMH_)`]D6ZH8)~$)0.png

(3)重启系统,在读秒没完成之前,按任意键进入grub菜单,在下方有下一步提示。

VC)8~8JY`R}ADP[XC)F2{@L.png

(4)根据提示,输入p之后提示输入密码

FH%)1_OF)(TTK%QX2P]WI18.png

(5)输入密码完成认证就出现正常编辑grub的配置界面。

0A8C_O3KZ~9272CRW~]%{~Y.png

grub的界面支持命令行接口,在grub界面可以按照提示输入e、b、c等命令继续相应的编辑,在对应的title中输入c可以进入命令行模式,在命令行中可以输入一些信息:

help:获得帮助
    find:文件查找,通常用于定位文件,方法find (hd#,#)/
    root
    kernel
    initrd
    boot

实验四:手动在grub命令行接口启动系统

grub> root (hd0,0)                                  进入root第一个磁盘,第一个分区
grub> kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=/dev/sda2           挂载内核和root根目录
grub> initrd /initramfs-2.6.32-696.el6.x86_64.img                  挂载虚拟文件系统
grub> boot                                                                    启动系统

在grub界面输入“c”命令进入grub编辑界面,依次输入以上命令就可以手动在grub命令行接口启动系统。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章