CentOS7系统MBR、GRUB2、内核启动流程报错问题


目录

🥩Linux启动流程

🥩MBR修复

🍭1、模拟损坏

🍭2、重启测试

🍭3、修复MBR

🍭4、测试系统

🥩GRUB2修复

🍭1、模拟损坏

🍭2、修复GRUB2

🍭3、测试系统

🥩内核修复

🍭1、模拟损坏

🍭2、修复内核

🍭3、测试系统


🦐博客主页:大虾好吃吗的博客

🦐专栏地址:服务器管理

Linux启动流程

在生产环境中系统出现bug,作为一个运维需要知道问题出在哪,查看系统日志/使用测试工具/使用top等系统资源命令查看。另一种情况系统直接崩了,开机无法打开。那我们就需要看下面Linux(CentOS7)启动系统的顺序。根据系统给出的提示修复系统。

来自GPT给出的Linux启动流程可以大致分为以下几个阶段:

  1. BIOS/UEFI阶段:计算机通电后,会首先执行计算机的基本输入输出系统(BIOS)或统一固件接口(UEFI)。在这个阶段,固件会进行硬件自检和初始化工作,并加载引导设备的Master Boot Record(MBR)或EFI系统分区的启动程序。

  2. Bootloader阶段:引导设备的MBR或EFI系统分区的启动程序会加载操作系统的引导加载器,例如Grub或Syslinux。引导加载器会提供一个菜单,让用户选择加载哪个操作系统或启动选项。

  3. 内核加载阶段:一旦用户选择了启动选项,引导加载器会加载Linux内核(通常是一个压缩的镜像文件,如vmlinuz)。加载内核时,引导加载器还会传递一些附加的启动参数,用于配置内核的行为。

  4. 内核初始化阶段:内核被加载后,它会进行一系列的初始化操作,包括检测和配置硬件设备、初始化内存管理、挂载文件系统等。内核还会启动第一个用户空间进程(init进程),该进程负责系统的进一步初始化和启动其它进程。

  5. 用户空间初始化阶段:在内核初始化完毕后,init进程会按照配置文件(通常是/etc/inittab)中的指示,启动一系列的用户空间服务和进程。这些进程包括系统服务(如网络服务、时间服务等)和用户登录界面(如图形界面或命令行界面)等。

  6. 用户登录阶段:一旦用户空间初始化完成,系统会提供一个用户登录界面,用户可以输入用户名和密码来登录系统。一旦登录成功,用户就可以开始使用操作系统提供的各种功能和进行各种操作。

总结:开机BIOS自动检测系统,通过MBR引导通过BRU2菜单选择哪个系统(如双系统),选择启动选项后加载内核文件,systemd初始化。

通过上面我们简单了解了下Linux的启动进程,我们下面模拟损坏并修复。

MBR修复

Linux MBR(Master Boot Record)是系统引导时非常重要的一个数据块,引导环境通常安装在磁盘的第一个扇区。

1、模拟损坏

我们这里使用虚拟环境模拟MBR损坏,MBR损坏通常有两种情况,MBR文件损坏或grub目录被误删。我们现在模拟损坏只需要把磁盘的第一个扇区前446个字节破坏掉,就可以起到MBR损坏的作用。

打开虚拟机,使用漏洞命令模拟损坏。

bash 复制代码
[root@daxia ~]# dd if=/dev/zero of=/dev/sda bs=100 count=1
记录了1+0 的读入
记录了1+0 的写出
100字节(100 B)已复制,0.00072338 秒,138 kB/秒
[root@daxia ~]# sync

2、重启测试

重启后,发现系统自动使用PXE寻找网络中的系统,说明MBR引导找不到系统了。

3、修复MBR

下面我们就开始修复MBR,关闭服务器,挂载系统光盘,进入急救模式。注意:我这里直接关闭了虚拟机,选择iso文件后,默认是启动时连接。开启虚拟机后进入第三选项(急救模式)。

在开启服务器后的操作如下:

Troubleshooting→Rescue a CentOS system→ 1 (注意这有个1表示选择继续)

在急救模式修复,执行下面命令。默认进入的系统可以称为伪系统,而执行chroot /mnt/sysimage 后看到的才能称之为真正的系统。**重启(先exit退出再再执行reboot重启)**测试系统是否正常使用,我这是虚拟环境,你的系统如果有服务或文件,测试起来更好一些。

4、测试系统

进入后默认是登录页面,选择用户名登录,因为我这个没有开始创建文件,也没有服务,只能测试出系统正常开机,你做第二遍的时候记得搭建一些服务。

GRUB2修复

1、模拟损坏

注意:挂载光盘

我们先找到grub2菜单文件的存放位置,删除文件达到模拟损坏的条件。这回我们想着先创建一个文件,后面修复后查看是否还有。grub2目录在boot下,删除它后关机。

bash 复制代码
[root@daxia ~]# mkdir /daxia
[root@daxia ~]# vim /daxia/test.txt
[root@daxia ~]# cat /daxia/test.txt 
aaaaaaaaaa
bbbbbb
ccccccc
daxia
[root@daxia ~]# cd /boot/grub2/
[root@daxia grub2]# ls
device.map  fonts  grub.cfg  grubenv  i386-pc  locale
[root@daxia grub2]# rm -rf *
[root@daxia grub2]# ls
[root@daxia grub2]# init0

可以自己重启测试一下,我这里就省略了。

2、修复GRUB2

启动前先修改为光盘启动,否则还是找不到grub2菜单。

选择boot→找到光盘按小键盘+把启动顺序设置为第一位→f10保存退出。

这时又来到了急救模式,选择3→第二页选择2(可以看上面MBR修复)→输入 1(表示继续),后面可能让你按回车键进入一个shell。

输入下面命令修复GRUB2菜单

退出后还是需要进入BIOS修改启动顺序。(f10保存退出)

3、测试系统

进入后默认是登录页面,选择用户名登录,查看之前创建的目录和文件是否丢失,顺便查看一下grub2

bash 复制代码
[root@daxia ~]# ls /daxia/
test.txt
[root@daxia ~]# cat /daxia/test.txt 
aaaaaaaaaa
bbbbbb
ccccccc
daxia
[root@daxia ~]# ls /boot/grub2/
fonts  grub.cfg  grubenv  i386-pc  locale

通过上面查看,系统修复了文件不会丢失。就好比windows,系统的C盘坏了,但是D盘、E盘里的文件会消失吗(有其他特殊情况),这样一整会不会对系统的理解又深了一个层次。你要是没搞懂,可以多做几遍,要还是没懂,那就是我的问题了。

内核修复

1、模拟损坏

注意:挂载光盘

内核文件丢失其实可以和上面一起说,步骤基本相同,下面就简单讲讲。删除boot目录下的内核文件。vmlinuz-3.10.0-1160.el7.x86_64 内核文件

bash 复制代码
[root@daxia ~]# cd /boot/
[root@daxia boot]# ls
config-3.10.0-1160.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-e09f912b047c4b689d2483741b68d6d3.img
initramfs-3.10.0-1160.el7.x86_64.img
symvers-3.10.0-1160.el7.x86_64.gz
System.map-3.10.0-1160.el7.x86_64
vmlinuz-0-rescue-e09f912b047c4b689d2483741b68d6d3
vmlinuz-3.10.0-1160.el7.x86_64
[root@daxia boot]# rm -rf vmlinuz-3.10.0-1160.el7.x86_64 

自行测试一下,启动后选择系统进不去

2、修复内核

关机后进入BIOS,继续选择光盘启动(上面有,过程略)。

进入急救模式,我这里显示了boot(直接按回车),然后选项3→2→按键1(跟上面操作一样进入急救模式)。

3、测试系统

到这里就是最后一步,修改BIOS的启动项,进入系统测试是否文件丢失。

相关推荐
听风吟丶21 小时前
Java HashMap 深度解析:从底层结构到性能优化实战
java·开发语言·性能优化
KakiNakajima21 小时前
浅谈幂等性基本实现原理【kaki备忘录】
java
柯南二号21 小时前
【后端】【Java】一文详解Spring Boot RESTful 接口统一返回与异常处理实践
java·spring boot·状态模式·restful
南龙大魔王21 小时前
spring ai Alibaba(SAA)学习(二)
java·人工智能·spring boot·学习·ai
ZBritney21 小时前
JAVA中的异常二
java·开发语言
方安乐21 小时前
linux常用命令
linux·运维·服务器
汤姆yu21 小时前
基于springboot的运动服服饰销售购买商城系统
java·spring boot·后端
柯南二号21 小时前
【后端】【Java】一文深入理解 Spring Boot RESTful 风格接口开发
java·spring boot·restful
vortex521 小时前
/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2:Linux 动态链接的核心引擎
linux·gnu
Jul1en_21 小时前
【Spring】实现验证码功能
java·后端·spring