且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-08-14 11:08:48

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://beanxyz.blog.51cto.com/5570417/1604763

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


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


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


  1. BIOS自检,检查硬件;

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

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

  4. 通过这个微系统,他会去引导分区,比如默认一般是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'





本文出自 “麻婆豆腐” 博客,请务必保留此出处http://beanxyz.blog.51cto.com/5570417/1604763