grub启动程序配引导置及命令行接口详解

Linux系统的启动引导程序有LiLo和grub,但由于LiLo的缺陷–只能识别0-1023范围的柱面构成的分区中的内核文件,因此逐渐被grub代替,但目前的安卓手机都是使用LiLo程序引导的

grub的版本:

grub的版本分为:

  1. grub 0.X (grub legacy)
  2. grub 1.X (grub 2)

目前centos 5和centos 6使用的就是 grub legacy 版本
centos 7使用的是 grub2 版本的启动引导程序

grub的三个阶段

  1. stage 1: 用于启动Boot loader 来加载stage2的内容至内存中
  2. stage 1_5:用于识别内核和stage2所在分区的文件系统格式类型,帮助引导stage2
  3. stage 2: 读取 grub.conf 配置文件,并实现引导功能的扩展

Linux系统中,与系统启动相关的文件均存储在/boot目录下.如grub vmlinuz initramfs等等

与grub相关的配置文件

与grub相关的配置文件包括:/etc/grub.conf/boot/grub/grub.conf
/etc/grub.conf是指向/boot/grub/grub.conf的软连接,grub程序在引导启动时会读取这个配置文件,并按照这个文件的配置参数引导启动系统

文件内容如下:

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=2c1d3c99-493f-483b-9abf-c4c7171e4598 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-696.el6.x86_64.img

defaule: 表示有多个grub引导菜单时,选择哪一个作为默认启动引导菜单,
defaule=0:表示默认选择第一个选项进行配置
timeout: 表示选择菜单的时间,如果过了这个时间没有选择则表示使用默认选项
splashimage: 指定引导菜单中的背景图片的路径
titile: 指定选项的名称
root: 表示kernel和initrd文件所在的分区路径,而不是”根分区”;其格式为:

root(hd#,#)  第一个 # 表示第几块硬盘,第二个 # 表示同一个硬盘上的分区,都是从0开始

kernel: 通常是用于指定要运行的内核文件路径,如:/vmlinuz-2.6.32-642.el6.x86_64;另外也可在其后设置相关的内核参数,如:ro表示只读,root表示指定根分区所在路径,关闭selinux等等;
initrd: 为内核运行指定其可用的ramdisk文件,其版本须和内核版本一致

grub程序的功能

  1. 提供引导菜单,并提供交互式的命令行接口;在菜单界面,按e可进入编辑模式,用于编辑菜单,按c可进入命令行模式
    这里写图片描述
  2. 加载用户选择的内核或操作系统,并允许传递相应的内核参数给内核;可选择隐藏此菜单
  3. 为菜单提供保护机制,可 编辑菜单 设置认证 为启用内核 操作系统进行认证, 在系统开启过程中,有几秒的过渡页面,可按任意键进入菜单页面
    这里写图片描述

grub的命令行接口

在菜单页面按c即可进入命令行接口,在此命令行接口,我们可以配置相关的grub设置.
grub常用的指令有:

help:查看命令帮助;
root (DEVICE):指定系统和内核文件所在的分区,如root(hd0,0)。
find  (hd0,0) /path/to/file:用于查找对应分区下的文件。常用于当不确认内核文件在哪个分区时,可使用此命令确认文件所在路径;支持tab补全;
kernel /path/to/kernel_file:用于指定要运行的内核文件。
initrd /path/to/kernel_file:指定initrd文件;
boot:以当前配置好的grub配置启动系统;

这里写图片描述

grub保护机制

grub程序提供系统保护机制,防止恶意用户随意通过当用户模式修改root密码或启动其他内核

设置认证方式为: 在相应的grub.conf配置文件中添加 passwd –md5 STRING
以下为grub菜单的编辑认证

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
#用户在grub菜单界面要输入相应的密码才能对进入相关的编辑模式或命令行模式
password --md5 $1$3WOVb/$a0JViRBPU3q.ibdBsuFSn/  
title CentOS 6 (2.6.32-642.el6.x86_64)
        root (hd0,0)
     # 此为对应的内核启动提供密码认证
        password --md5 $1$3WOVb/$a0JViRBPU3q.ibdBsuFSn/
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-642.el6.x86_64.img

这里写图片描述

grub的安装

  1. 使用grub-install命令

    grub-initall [--root-directory=DIR] DEVICE
    
    DEVICE: 安装的目标磁盘
    
    --root-director=DIR: 指定grub映像文件的存放位置,默认为当前系统根目录.
    
    grub-install 会在指定的目录下创建 boot/grub 的层级目录
    并生成相关的grub文件在DIR/boot/grub/ 目录下
    
  2. 在grub命令行下安装grub
    输入grub进入grub命令行

[root@localhost ~]# grub   #进入grub命令行

grub> root (hd0,0)  #指定grub命令行

grub> setup (hd0,0) #安装grub

grub> quit      # 退出grub命令行

在grub程序出现损坏时,我们可以利用上述方法进行修复

模拟grub损坏,但系统未重启,对grub进行修复:

# 通过重复读写数据破坏硬盘的MBR
[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=400
1+0 records in
1+0 records out
400 bytes (400 B) copied, 0.000281298 s, 1.4 MB/s
# 在系统重启前使用修复安装grub
[root@localhost ~]# grub-install /dev/dsa

通grub命令行来修复grub程序

[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=400
[root@localhost ~]# grub

grub> root (hd0,0)

grub> setup (hd0,0)

模拟grub损坏后,系统重启了的情况下修复grub

  1. 利用安装光盘进入救援模式进行grub修复
    • 系统无法正常启动
      这里写图片描述
    • 进入救援模式
      这里写图片描述
    • 在完成相关的硬件检测及引导程序,依次设置语言、键盘及是否启动网络,接着系统会查找根分区,随后选择continue以读写的方式挂载根文件系统。
      这里写图片描述
    • 选择Start shell,点击OK
      这里写图片描述
    • 启动shell后,输入chroot /mnt/sysimage,然后使用grub-install修复grub。
      格式如下:
bash-4.1# chroot /mnt/sysimage
sh-4.1# grub-install /dev/sda
sh-4.1# exit

至此grub已修复完成,系统应能正常启动。

  1. 将损坏的硬盘拆卸挂载到其他Linux系统上进行修复

猜你喜欢

转载自blog.csdn.net/lv8549510/article/details/80713849
今日推荐