天天看点

RHCE 学习笔记(27) grub 和开机排错

这一节学习了grub的概念,开机调用顺序,如何自定义grub文件,以及对一些常见的系统启动错误如何排错等等。

之前学习了mbr分区的前446个字节存放的是系统引导程序grub,中间64字节是分区表,最后2个字节表示结束。那么什么是grub是怎么工作的呢?

简单的说,开机会经历以下几步:

bios自检,检查硬件;

激活mbr,mbr上不存在文件系统,可以视作硬件一部分,因此可以被直接读取

grub加载到内存,生成一个微系统,微系统内置了精简版的文件系统

通过这个微系统,他会去引导分区,比如默认一般是sda1上去找内核文件如vmlinuz,然后再调用grub的配置文件。

grub的主要把他的配置文件放在了3个地方。

/boot/grub2/grub.cfg  

/etc/grub.d/  

/etc/default/grub    

如下所示。他们的关系是 grub.cfg里面通过 ####begin  ##### 这种格式按照顺序调用/etc/grub.d里面的脚本实现不同的功能。grub.d目录里面有很多数字开头的脚本,按照从小到大的顺序执行。以00__header为例,他又会调用 /etc/default/grub 配置文件来实现最基本的开机界面配置。

RHCE 学习笔记(27) grub 和开机排错

比如说,在/etc/grub2/grub.cfg 文件里面调用 /etc/grub.d/10_linux 来配置不同的内核,这里面有2个 menuentry (菜单入口),所以我们开机的时候会看见两个默认选项,一个是普通模式,一个是救援模式。

RHCE 学习笔记(27) grub 和开机排错

这个是/etc/default/grub 文件。和其他的脚本比较起来,非常简单直观了。后面会举例如何修改

RHCE 学习笔记(27) grub 和开机排错

值得注意的是,千万不要直接去修改 /etc/grub2/grub.cfg 文件。 这个是因为如果后期升级内核,所有的配置都会失效。如果需要自定义这个文件,我们可以修改对应的脚本或者 /etc/default/grub文件,然后通过 grub2-mkconfig 重新生成grub.cfg文件。

下面来看看如何修改一些简单的设定。

例1: 修改启动的等待时间

默认是5秒

RHCE 学习笔记(27) grub 和开机排错

我改成-1,那么开机每次必须手动确认才可以了

RHCE 学习笔记(27) grub 和开机排错

修改之后重新编译一下

RHCE 学习笔记(27) grub 和开机排错

开机就没有自动等待的时间了,必须手动确认

RHCE 学习笔记(27) grub 和开机排错

例2 修改网卡的显示名字,这个前面做网络配置的时候提到过,这里不赘述了。

RHCE 学习笔记(27) grub 和开机排错
RHCE 学习笔记(27) grub 和开机排错

例3: 加密grub

开机界面的时候如果输入e,会打开编辑窗口,我们可以根据需要进入rescue, emergency 或者 shell 模式。如何限制访问。

在00_header 文件末尾,添加以下内容

RHCE 学习笔记(27) grub 和开机排错

重新编译

重启之后 输入e,就需要用户和密码才能进入编辑窗口了

RHCE 学习笔记(27) grub 和开机排错
RHCE 学习笔记(27) grub 和开机排错

在这个编辑窗口,我们可以根据需要进入 rescue,emergency和 shell引导的3种模式。这3种模式对于系统启动排错很有帮助,比如某个服务卡住了无法加载我们可以通过这3种模式来排错。

rescue模式: 在commandline的配置末尾添加 s ,类似rhel6之前的单用户模式

RHCE 学习笔记(27) grub 和开机排错

普通模式需要加载的服务很多,但是这个rescue模式加载的就少很多了,输入管理员密码就可以进入了。这个时候再来看看相关配置和日志等信息。

RHCE 学习笔记(27) grub 和开机排错

emergency 模式和rescue模式类似,不过加载的服务更少,把s改成 emergency就行了

RHCE 学习笔记(27) grub 和开机排错

一样需要输入管理员密码

RHCE 学习笔记(27) grub 和开机排错

那么如果忘记root密码了怎么办?! 

在linux16 的最后一行删除 rhgb quiet, 然后添加 init=/bin/sh, 他会用shell替代默认的daemon进程

RHCE 学习笔记(27) grub 和开机排错
RHCE 学习笔记(27) grub 和开机排错

进来之后改改密码吧,貌似不行。

RHCE 学习笔记(27) grub 和开机排错

原因很简单,根目录加载的权限是ro,只读    

RHCE 学习笔记(27) grub 和开机排错

重新加载成 rw的权限

RHCE 学习笔记(27) grub 和开机排错

这个时候就可以修改密码了

RHCE 学习笔记(27) grub 和开机排错

别忘记了selinux,创建这个文件会自动在开启的时候重新做标签

RHCE 学习笔记(27) grub 和开机排错

重启看看

RHCE 学习笔记(27) grub 和开机排错

开机排错技巧:

例1. 如果grub文件坏了怎么办,比如下面我把前446个字节都写成0覆盖了

RHCE 学习笔记(27) grub 和开机排错

开机的时候会自动尝试从本地,光盘和网络加载引导程序;这里是从我的光盘加载的,因为本地的引导程序已经没有了

选择troubleshooting (查错)

RHCE 学习笔记(27) grub 和开机排错

选择 rescue

RHCE 学习笔记(27) grub 和开机排错

选择continue,注意有耐心多等一下,有的时候会卡个10秒才有反应

RHCE 学习笔记(27) grub 和开机排错

看看提示,本机系统被挂载到/mnt/sysimge里面,确认ok

RHCE 学习笔记(27) grub 和开机排错

按照提示,切换根到本机的系统

RHCE 学习笔记(27) grub 和开机排错

fdisk -l 看看启动分区是哪个,有星号的就是

RHCE 学习笔记(27) grub 和开机排错

重装一下 grub2 到启动分区就可以了

RHCE 学习笔记(27) grub 和开机排错

重启okay

RHCE 学习笔记(27) grub 和开机排错

例2:如果grub引导程序没问题,但是我们把内核文件或者grub.cfg配置文件给删除了怎么办

看看目前有哪些文件,全删了

RHCE 学习笔记(27) grub 和开机排错

重启之后,直接进入grub的救援模式,这表明引导程序木有问题,但是引导文件找不到了

RHCE 学习笔记(27) grub 和开机排错

和前面一样,光盘启动

切换根目录,挂载一下光盘到/iso, 顺便看看/boot目录,里面空荡荡的,内核文件和配置文件都没了

RHCE 学习笔记(27) grub 和开机排错
RHCE 学习笔记(27) grub 和开机排错

没了的话那就从头安装吧,安装内核可以用rpm 或者yum,用yum需要先卸载当前的,再安装; rpm可以强行--force覆盖安装。

用yum 安装

RHCE 学习笔记(27) grub 和开机排错

或者 rpm 也可以(这里我是重复操作了2次,因为由于图形界面的问题,我以为哪里出问题了)

RHCE 学习笔记(27) grub 和开机排错

装完内核之后,重新安装一次 grub2, 输入 grub2-install /dev/sda, 然后重新编译一下grub2就行了

RHCE 学习笔记(27) grub 和开机排错

重启

重启之后,我还遇见了2个问题,第一个问题是启动的时候显示i/o错误,经度娘谷歌确认,关掉软盘驱动即可; 

第二个问题是开机直接进入命令行模式,即使runlevel显示的是5,手动输入startx一样报错。解决方式是重新安装图形化界面

yum grouplist

yum groupinstall 'server with gui'