Linux启动流程分析以及系统恢复处理

< 一 > 启动流程一览

  1. 加载BIOS的硬件信息与进行自我检测(自检),并根据设置取得第一个可启动的设备;
  2. 读取并执行第一个启动设备MBR启动引导程序gurb2、spfdisk等程序);
  3. 根据启动引导程序的设置加载Kernel (内核),Kernel会开启检测硬件与加载驱动程序 ——完成后,主机硬件已经准备就绪;
  4. 在硬件驱动成功后,Kernel会主动调用systemd程序 ——准备软件执行环境,并以default.target流程启动:
  • systemd 执行 sysinit.target 初始化系统及 basic.target 准备操作系统;
  • systemd 启动 mulit-user.target 下的本机与服务器服务;
  • systemd 执行 mulit-user.target 下的 /ect/rc.d/rc.local 文件;
  • systemd 执行 mulit-user.target 下的 getty.target 及登录服务;
  • systemd 执行 graphical 需要的服务;

BIOS (Basic Input Output System)  ,启动自我测试与MBR

MBR (Master Boot Record ,主引导记录),代表该磁盘的最前面可安装 boot loader 的那个区块

boot loader , 启动引导程序

  • BIOS 会指定启动的设备好让我们可以读取磁盘中的操作系统内核文件时,我们必须要以一个启动引导程序(boot loader)来处理内核文件加载(load)的问题;
  • boot loader 程序安装在,启动设备的第一个扇区(sector)中,也就是 MBR
  • boot loader 加载 kernel 与 initramfs (init ram filesystem,它是一个cpio格式的内存文件系统打包),在内存中让 initramfs 解压缩成为 根目录,内核就能借此加载适当驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统,从而开始后续正常启动流程。

 fdisk -l 命令 查看启动设备

linux reboot系统对app 的影响_加载

< 二 > 启动恢复

挽救模式的进入

  • 主机设置-开机启动时连接光驱-加载系统镜像文件
  • 打开电源时进入固件 —— BIOS界面-CD device 启动设备  /   重新启动客户机 ——【Esc】+ 光标选定  -BIOS -CD device 启动设备

linux reboot系统对app 的影响_加载_02

linux reboot系统对app 的影响_加载_03

linux reboot系统对app 的影响_linux_04

linux reboot系统对app 的影响_重启_05

linux reboot系统对app 的影响_操作系统_06

linux reboot系统对app 的影响_重启_07

1 ) 磁盘引导 

问题模拟方式 ——  当MBR内的数据丢失,系统会因为找不到启动分区而停止启动

  • 主机系统磁盘/dev/sda
  • dd if=/dev/zero of=/dev/sda bs=446 count=1         # 清空系统/dev/sda上的mbr数据

 

linux reboot系统对app 的影响_linux_08

恢复方式:

  • 用光盘进入系统挽救模式
  • chroot /mnt/sysimage grub2-install /dev/xxxxxx     # 重新安装grub2到系统磁盘上               

linux reboot系统对app 的影响_重启_09

2 ) grub2启动引导程序 

/boot/grub2/grub.cfg                                                  #  指定/boot位置
/boot/loader/entries/xxxxxxxxx.conf                          # 指定系统启动时加载文件名称

linux reboot系统对app 的影响_加载_10

 

问题模拟方式 —— grub2相关系统启动加载文件缺失

  • rm -fr /boot/loader/entries/xxxxxxxxx.conf

恢复方式 1 (未重启时):

  • kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

                                      内核版本号                      内核镜像

linux reboot系统对app 的影响_操作系统_11

恢复方式 2 (重启时):


• set root='hd0,msdos1'
• linux16 /vmlinuz-3.10.0-957.el7.x86_64 ro root=/dev/nvme0n1p2
• initrd16 /initramfs-4.18.0-80.el8.x86_64.img
• boot

3 ) 内核文件

/boot/vmlinuz-$(uname -r)                      # 内核文件  
uname -r  # 查看内核版本号   ,输出结果:4.18.0-80.el8.x86_64

linux reboot系统对app 的影响_加载_12

问题模拟方式 —— /boot/vmlinuz 内核文件缺失

  •  rm -fr /boot/vmlinuz-$(uname -r)

linux reboot系统对app 的影响_操作系统_13

 

恢复方式 1 (未重启时):

  • 拆解内核文安装包并复制内核压缩镜像到/boot

 恢复方式 2 (重启时):

  • 挽救模式
  • chroot /mnt/sysimage
  • mount /dev/cdrom /media
  • cd /media/BaseOS/Packages
  • cp kernel-core-4.18.0-80.el8.x86_64.rpm /mnt/
  • cd /mnt
  • rpm2cpio kernel-core-4.18.0-80.el8.x86_64.rpm | cpio -id
  • cp /mnt/lib/modules/4.18.0-80.el8.x86_64/vmlinuz  /boot/vmlinuz-$(uname -r)
  • exit
  • exit

linux reboot系统对app 的影响_加载_14

 4 ) 虚拟文件系统文件

/boot/initramfs-4.18.0-80.el8.x86_64.img

问题模拟方式 —— 虚拟文件系统文件缺失

  • rm -fr /boot/initramfs-xxxxx.img

 恢复方式 1 (未重启时):

  • mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

linux reboot系统对app 的影响_加载_15

恢复方式 2 (重启时):

  • 挽救模式
  • chroot /mnt/sysimage
  • mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
  • exit
  • exit

linux reboot系统对app 的影响_引导程序_16

 

5 ) 系统启动级别

  • 0                  关机
  • 1                  单用户
  • 2                  无图形网络模式
  • 3                  无图形网络模式
  • 4                  无图形网络模式
  • 5                  有图形网络模式
  • 6                  重启

问题模拟方式 —— 无法正常开机启动

  • systemctl set-default reboot.target

linux reboot系统对app 的影响_加载_17

恢复方式  (重启时):

  • 在开机选择界面按< e >进入到引导文件编辑模式
  • 在内核加载选项最后加入启动级别5
  • < ctrl > + < x >                                             # 保存设置 ,启动系统
  • systemctl set-default graphical.target         # 进入系统  ,更改启动设置  

linux reboot系统对app 的影响_加载_18

6 ) 超级用户密码遗忘

恢复方式  (重启时):

  • 开机选择界面按<e>进入到引导文件编辑模式
  • 在内核加载选项最后删除到ro选项
  • 更改编辑 ro---->rw  内容
  • 加入rd.break参数,终止系统启动进入单用户模式

• < ctrl > + < x >                                         # 保存设置 ,启动系统
• chroot /sysroot
• echo 123| passwd --stdin root                  # 重置root用户密码
• touch /.autorelabel                                  # 当 /.autorelabel文件存在selinux会重新初始化
• cp kernel-core-4.18.0-80.el8.x86_64.rpm   /mnt/
• cd /mnt
• rpm2cpio kernel-core-4.18.0-80.el8.x86_64.rpm | cpio -id
• cp /mnt/lib/modules/4.18.0-80.el8.x86_64/vmlinuz  /boot/vmlinuz-$(uname -r)
• exit
• exit

linux reboot系统对app 的影响_重启_19

linux reboot系统对app 的影响_加载_20

linux reboot系统对app 的影响_引导程序_21

 

7 )综合实验练习

问题模拟方式

  • rm -fr /boot/*

恢复方式  (重启时):

  • grub2-install /dev/sda
  • grub2-mkconfig > /boot/grub2/grub.cfg
  • rpm -ivh kernel-core-xxxx.rpm 

linux reboot系统对app 的影响_引导程序_22

linux reboot系统对app 的影响_操作系统_23

 

linux reboot系统对app 的影响_操作系统_24