centos

sys.16.2 GRUB Legacy

 

导语

GRUB : GRand  Unified  Bootloader;

grub版本
grub  0.x  : grub  legacy;
grub  1.x  :  grub2;

grub  legacy分为3个阶段
stage1 : mbr;
stage1_5 : mbr之后的扇区,让stage1中的bootloader能识别到stage2所在的分区上的文件系统;
stage2 : 磁盘分区(/boot/grub/);

grub  legacy 配置文件:/boot/grub/grub.conf ; 其链接文件为’/etc/grub.conf’;

stage2及内核等通常放置于一个基本磁盘分区中;

1、grub功用
1> 提供菜单,并提供交互式接口;
      e : 编辑模式,用于编辑菜单;
      c : 命令模式,交互式接口;
2> 加载用户选项的内核或操作系统:允许传递参数给内核;可隐藏此菜单;
3> 为菜单提供了保护机制:
     为编辑菜单进行认证;
     为启用内核或操作系统进行认证;

2、grub 的命令行接口

CentOS 6 : 采用的是 ‘grub legacy’,举例几个命令;
—————————————————————
help  :                               获取帮助信息;
help  KEYWORD  :        详细帮助信息;
find  (hd#,#)/PATH/TO/SOMEFILE  :   在某个磁盘的某个分区查找某文件;
                                                                         其中’hd#’表示第’#’块磁盘,’hd#’后面单独的’#’表示此磁盘的第’#’个分区;’#’从数字0开始标识;
root  (hd#,#)  :              表示挂载某磁盘某分区做为根分区,但此处的根分区与系统正常启动后所说的根分区不是同一概念;
kernel  /PATH/TO/KERNEL_FILE  :           设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的’comline’参数;
initrd  /PATH/TO/INITRAMFS_FILE  :      设定为选定的内核提供额外文件”ramdisk”;
boot  :                             启动系统,引导启动选定的内核;

CentOS 7 : 采用的是 ‘grub 2’,举例几个命令;
———————————————————
help  KEYWORD  :               获取帮助信息;
ls  :                                           列出当前系统已经识别到的磁盘及分区;
search  (hd#,msdos#)  :      意义相当于’CentOS 6’的’find’命令;
set  root=hd#,msdos# :       意义相当于’CentOS 6’的’root’命令;
linux16  /PATH/TO/KERNEL_FILE  :              意义相当于’CentOS 6’的’root’命令;
initrd16  /PATH/TO/INITRAMFS_FILE  :       意义相当于’CentOS 6’的’initrd’命令;
boot  :                                      启动系统,引导启动选定的内核;

CentOS 7 默认的GRUB启动菜单内容:
————————————————

setparams 'CentOS Linux (3.10.0-693.21.1.el7.x86_64) 7 (Core)'
    
    load_video
    set gfxpayload=keep
    insmod gzio
    insmod part_msdos
    insmod xfs
    set root='hd0,msdos1'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 78fbb254-bb6a-4847-8890-4410ccb77410
    else
      search --no-floppy --fs-uuid --set=root 78fbb254-bb6a-4847-8890-4410ccb77410
    fi
    linux16 /vmlinuz-3.10.0-693.21.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
    initrd16 /initramfs-3.10.0-693.21.1.el7.x86_64.img

CentOS 7 grub命令行操作简单截图举例:
————————————————-

1> CentOS 7 的grub菜单界面;

 

 

 

 

2> 列出当前系统已经识别到的磁盘及分区;查找内核文件,可用TAB键补齐文件完整名称;

 

 

 

 

3> 查看’set’命令选项,输入命令后回车即可看到相关选项;PS:不是所有的命令在输入完成后回车都能看到相关选项参数的说明信息;

 

 

 

 

 

3、GRUB 配置文件

3.1  CentOS  6:
———————
配置文件 : /etc/grub.conf —> /boot/grub/grub.conf

default=#                 设定默认启动的菜单项,菜单项(title)编号从数字’0’开始排列;’default=0’表示默认启动第一个’title’定义的内核文件;
timeout=#               设定菜单项等待选项选择的时长;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE                  设定菜单背景图片文件的完整路径;
hiddenmenu           隐藏菜单;
password  [–md5]  STRING                                                           设定菜单编辑认证;’STRING’表示字符串密码;
title  TITLE_NAME                                                                          定义菜单项的标题’TITLE_NAME’;
root  (hd#,#)                                                      grub查找stage2及kernel文件所在的设备分区;此磁盘分区为grub的’根’目录;
kernel  /PATH/TO/VMLINUZ_FILE  [PARAMETERS]         启动内核,后面可带其他启动参数;
initrd  /PATH/TO/INITRAMFS_FILE                                        匹配上面指定的内核对应的ramfs文件;
password  [–md5]  STRING                                                           启动选定的内核或操作系统时进行认证;

备注,上面的md5密码可用如下命令创建:
~]# grub-md5-crypt                  敲回车后会让用户输入2次未加密的密码字符串,再次回车后,会生成加密的密码字符串;

3.2  CentOS  7 :
———————
配置文件完整路径:‘/boot/grub2/grub.cfg’;
‘/etc/grub2.cfg’ 是链接文件,指向源文件’/boot/grub2/grub.cfg’;
‘/boot/grub2/grub.cfg’文件是由命令’grub2-mkconfig’根据’/etc/grub.d’目录下的脚本模板,以及用户对’/etc/default/grub’文件的自定义设置而自动创建;

/etc/grub2.cfg文件头部描述信息:

[root@kouyuushinn ~]# 
[root@kouyuushinn ~]# more /etc/grub2.cfg 
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

/etc/grub.d/目录下默认有如下脚本文件(模板):

-rwxr-xr-x  1 root root  8702 Oct 21  2017 00_header
-rwxr-xr-x. 1 root root  1043 Apr 11  2017 00_tuned
-rwxr-xr-x  1 root root   232 Oct 21  2017 01_users
-rwxr-xr-x  1 root root 10781 Oct 21  2017 10_linux
-rwxr-xr-x  1 root root 10275 Oct 21  2017 20_linux_xen
-rwxr-xr-x  1 root root  2559 Oct 21  2017 20_ppc_terminfo
-rwxr-xr-x  1 root root 11169 Oct 21  2017 30_os-prober
-rwxr-xr-x  1 root root   214 Oct 21  2017 40_custom
-rwxr-xr-x  1 root root   216 Oct 21  2017 41_custom
-rw-r--r--  1 root root   483 Oct 21  2017 README

/etc/default/grub 文件的格式及默认加载的参数如下:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

 

4、进入单用户模式(可重置root密码):

CentOS  6 进入单用户模式(可重置root密码):
1>  如果grub启动菜单有多个内核版本可选择,首先选择title,然后按’e’键
2>  在’kernel’一行的末尾处,加”空格”,然后键入”1″或”s”或”S”或”single”,然后按回车键返回上一层
3>  按’b’键启动系统;
4>  系统启动后,显示登录环境为单用户模式,更改密码后,再次重启系统即可;

CentOS 7 进入单用户模式(可重置root密码):
1>  开机启动后,如果有多个菜单选项,首先选定title,然后按’e’键
2>  在’linux16’这一行,定位到 ‘ro’参数,把’ro’更改成’rw init=/sysroot/bin/sh’; 然后按组合键’ctrl+x’重启系统
3>  系统启动后进入单用户模式,按如下步骤做密码重置操作:
~]#  chroot    /sysroot/
~]#  passwd    root
~]#  touch    /.autorelabel
~]#  exit
~]#  reboot

5、安装grub legacy (CentOS 6)

第一种方式grub的第一阶段中mbr的前446字节遭到破坏,且系统尚未做重启操作环境下;
~]# grub-install   –root-directory=ROOT   /dev/DIS                       ‘ROOT’为boot的父目录,即根目录;’/dev/DISK’表示根分区所在的磁盘;

第二种方式grub的第一阶段中mbr的前446字节遭到破坏,且系统尚未做重启操作环境下;
此方式有前提条件:必须存在’stage1 , stage1_5 , stage2′;
~]#  grub
grub> root   (hd#,#)
grub> setup   (hd#)

第三种方式grub的第一阶段中mbr的前446字节遭到破坏,但已做系统重启操作,此时只能进入’rescue’模式进行修复;
在进入救援模式过程中,需要做一下基础环境的交互式设置,其中有个步骤会去扫描硬盘中是否有操作系统,如果有操作系统,
且能被识别,则会提示原系统已被挂载到某个路径下,下面用’/mnt/sysimage’为例;

bash-4.1# chroot   /mnt/sysimage/                                              切换根目录;
sh-4.1# grub-install    –root-directory=/    /dev/sda                根分区在磁盘’sda’上;
sh-4.1# exit
sh-4.1# reboot

6、 grub2命令举例:
———————
CentOS  7 系统,设定grub菜单的编辑认证:
[root@kouyuushinn ~]#
[root@kouyuushinn ~]# grub2-setpassword
Enter password:
Confirm password:
[root@kouyuushinn ~]#

设置密码之后,重启系统;在启动菜单界面,如果需要需要编辑某title中的内容,需要输入系统的账号密码;

 

 

 

 

查看系统的grub是在哪个分区上:
[root@kouyuushinn ~]#
[root@kouyuushinn ~]# grub2-probe   -t   device   /boot/grub
/dev/sda1
[root@kouyuushinn ~]#

Leave a Reply

Your email address will not be published. Required fields are marked *