Linux启动流程和故障恢复
系列文章目录

第一章 :red hat linux系统下载安装
第二章:Linux用户和组
第三章:Linux文件管理
第四章:Linux目录管理
第五章:Linux文本编辑器
第六章:Linux文件查找与管理
第七章:Linux输入,输出的重定向以及管道
第八章:Linux包管理
第九章:Linux的系统监控以及进程管理
第十章:Linux服务管理以及计划任务
第十一章:Linux启动流程和故障恢复


前言

这章实验相对少一些,主要是理论,但也不要强行记忆,以理解为主,但实验相对之前的内容都有难度的提高,老规矩,记得抓快照。
博客内容是基于rethat8写的,如果用的是比较老的服务器,可能有所不同。
:提前抓好快照,因为可能实验一次性不成功。


一、启动流程

Linux启动流程和故障恢复_linux
这个流程图是基于红帽6的启动流程,7和8的差不多,凑活看吧,博主也是直接从教材上边粘贴过来的。

开机自检(bios)

这个大家如果有重装系统的经历,可能都见过,通过U盘或者快捷键进入bios界面,用虚拟机也可以直接进入
Linux启动流程和故障恢复_根目录_02
一般就会出现这样的界面。Linux启动流程和故障恢复_ios_03
这个可理解为硬件上的一个操作系统,存储时间什么的,这个是不能断电的,台式机里会有一颗纽扣电池为其供电,大该能坚持几年,我家的一台老电脑好几年没开,再开机时间就调不对了,就是主板电池也就是那个纽扣电池亏电太久了,已经无法在充电使用了,后来换了电池就能继续使用了。

Linux启动流程和故障恢复_ios_04

MBR引导

Linux启动流程和故障恢复_ios_05
MBR中有512个字节,其中头446叫Bootloader装一些引导的东西,比如下一步grup的菜单,这个就是硬盘里的第一个扇区,我们可以用命令查看。

fdisk -l

Linux启动流程和故障恢复_故障恢复_06

GRUB菜单

通过Bootloader的引导进入GRUB菜单,会进入到/boot/grub2/grub.cfg以及/boot/loader/entries/文件夹,这里面存储着内核的信息,用来下一步加载内核

内核加载

内核信息所在文件夹,.conf用来存储信息

ll /boot/loader/entries/

Linux启动流程和故障恢复_ios_07
还有/boot/grub2/grub.cfg
红帽8把这部分信息分到了两个地方,较安全由提升,有一个损坏就无法启动了。

Linux启动流程和故障恢复_linux_08
这是拿shell脚本写的,我也看不懂,你就知道里面放着内核信息就可以了。
他们·是由/etc/grub.d/的文件生成的,也就是说如果这个grub文件损坏了或者丢失了,可以从/etc/grub.d重新生成。
Linux启动流程和故障恢复_ios_09

第一个程序

在红帽6及以前第一个线程都是/sbin/init,到了7以后架构变了换成了systemd可以通top命令查看

Linux启动流程和故障恢复_重启_10
以前是通过读取inittab配置信息来启动,现在都归到systemd所以那张图里剩下的都不用看。

systemd

可以使用systemctl设置默认启动项,比如登陆可视化界面还是字符界面,这个的参数就非常多了。
登陆类型一般有五个可以用init来转换
0:关机
1:单用户模式
2:多用户无网络(字符)
3:多用户(字符)
4:保留
5:图像化界面
6:重启
举个例子

init 0 = halt -p
init 6 =reboot
init 3#进入字符界面

用systemctl set-default可以设置默认登陆界面,六个界面就是我分别框住的。
Linux启动流程和故障恢复_重启_11

systemctl set-default runlevel3.target 

Linux启动流程和故障恢复_ios_12
然后重启虚拟机。
Linux启动流程和故障恢复_故障恢复_13
他会自动进入3模式,用init 5可以转到图形界面
Linux启动流程和故障恢复_重启_14
到这里Linux就完全启动了,systemctl的参数很多啊,不仅仅可以设置默认启动默认,具体还有什么等用到再说。

二、故障恢复

1.破解密码

比如你密码忘了或者被入侵了,但这个有一个局限,必须得直接接触物理机,如果用Xshell远程连接是不行的。
现在咱们在根下边建一个文件用于区分

Linux启动流程和故障恢复_重启_15
现在reboot重启电脑
Linux启动流程和故障恢复_根目录_16
在这个界面可以通过方向键停止下一步开机,按e进行编辑。
之后进入这个界面

Linux启动流程和故障恢复_重启_17
通过光标移动,将光标移动到内核的最后输入 rd.break console=tty0
如图所示
Linux启动流程和故障恢复_故障恢复_18
按 Ctrl+x继续启动
之后可以直接进入字符界面
Linux启动流程和故障恢复_linux_19
咱们通过ls-l查看根目录Linux启动流程和故障恢复_linux_20
会发现没有咱们刚刚创建的文件,这其实是类似Windows的PE一样,只是一个小镜象。真正的系统根目录在/sysroot目录下

Linux启动流程和故障恢复_根目录_21
现在的挂载默认是只读挂载,我们需要重新设置可读可写挂载,不然没法修改密码。

mount -o remount,rw /sysroot/

将 /sysroot/设置为根目录

chroot /sysroot/

Linux启动流程和故障恢复_linux_22现在看可以看到系统根目录以及被挂载到/上了。现在就可以直接修改密码了。
Linux启动流程和故障恢复_ios_23
通过这样破解密码,需要打标,具体是什么这是也不用说了,直接说怎么做吧。

touch /.autorelabel

然后两次使用exit退出即可进系统,时间可能会长一点。
之后就可以用新密码进入了。
Linux启动流程和故障恢复_故障恢复_24

2.反破解密码

刚刚演示破解密码,看以看到这个过程没有什么密码验证,简单来说,只要能接触到物理机就可以破解密码,感觉不是很安全,所以接下来就是加密。
这个需要修改grub2.cfg文件,前面说了,grub2.cfg由/etc/grub2.d/下的文件生产,然后重新生成grub2即可.
在文件夹下随便找一个进行修改
Linux启动流程和故障恢复_重启_25
在结尾追加以下内容。
Linux启动流程和故障恢复_ios_26

cat << EOF
set superusers="用户"
passwoed 密码
EOF

之后保存
重新生成grub2

grub2-mkconfig -o /boot/grub2/grub.cfg

重启虚拟机
Linux启动流程和故障恢复_linux_27
重启按e之后会需要输入账号密码,不然无法进行下一步.

3.光盘修复

这个一般用于所用启动文本甚至内核/boot都被干掉了,但是数据还在,还得抢救以下,最后的杀手锏。需要先挂上光盘,或者其他启动镜像,虚拟机就以光盘为例。
Linux启动流程和故障恢复_重启_28
干掉内核和启动项

#干掉内核
rm -rf /boot/*
#干掉MBR的前446个字节
dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1

之后reboot,首先进入BIOS界面吧关盘启动优先级调到最高,并保存退出。
Linux启动流程和故障恢复_ios_29
直接F10或者从exit退出
Linux启动流程和故障恢复_ios_30
由于找不到引导项,会进入以下这个界面。
Linux启动流程和故障恢复_linux_31
这是第一章安装系统是出现的界面,它找不到引导信息,会认为你没有装系统,如果不是必须抢救数据,直接选第一个重装就好了,但现在还要抢救一下,所以咱们选第三个进入救援模式。
Linux启动流程和故障恢复_ios_32
接下来选第二个

Linux启动流程和故障恢复_故障恢复_33
这一大堆,我也看不懂,输入1按回车。

Linux启动流程和故障恢复_根目录_34
最后一行,按回车获得一个shell,按回车我们就进入镜像了。
Linux启动流程和故障恢复_根目录_35
可以看看到根目录下没有我们创建的文件,所以这只是物理的根目录。
真正的根目录在/mnt/sysimage,这是因为根分区还在,有可能找到会被默认挂载到这里,如果分区信息都没了,要从写fastable文件,这个这里就不说了。
Linux启动流程和故障恢复_故障恢复_36
现在重新把根目录挂上来。

chroot /mnt/sysimage/

Linux启动流程和故障恢复_故障恢复_37
挂载光盘

mount /dev/cdrom /mnt/cdrom/

这里看不懂的看一去看我的包管理那章。
Linux启动流程和故障恢复_linux_38
恢复MBR引导,就是修复那446字节。

grub2-install /dev/nvme0n1

Linux启动流程和故障恢复_根目录_39
重装kernel

rpm-ivh /mmt/cdrom/Base0S/Packages/kernel--core-4.18.3-385.e18.x86_64.rpm --force

这里依旧可以使用tab键自动补齐,不用全部都自动敲。
这里会重新生成内核,需要几分钟,如果不小心用Ctrl+C退出,可以将/boot文件夹再次清空,之后再重装内核就可以了。
Linux启动流程和故障恢复_故障恢复_40
重新生成grub.cfg
kerne-install add 内核版本号 内核镜像
可以用 uname -r查看内核信息

kernel-install add 4.18.B-385.e18.xd6_64 /lib/modules/4.18.0-385.el8.x86_64/vmlinuz
grub2-mkconifg > /boot/grub2/grub.cfg

Linux启动流程和故障恢复_ios_41
之后两次使用exit然后等待几分钟就可以开机。

Linux启动流程和故障恢复_根目录_42
最后记得将光盘启动的优先级降低。

总结

这次博客就到这里,看起来简单的一篇博客,博主是失败了十几次,辛亏提前抓了快照,不然实验都无法完成,此次实验是基于红帽8完成的,如果是7或者6方法可能会有所不同,所以不要强求,要学会变通。