Linux 运维 —— Linux系统启动引导 常见问题 及 修复方案

一. Linux系统启动引导过程及相关知识点概念

1.1 Linux系统引导过程

  1. 通电
  2. bios初始化
  • 加载BIOS的硬件信息与进行自我检测(自检),并根据设置取得第一个可启动的设备
  1. 读取并执行第一个启动设备内MBR的启动引导程序(gurb2、spfdisk等程序)
  • 指定boot分区所在分区
  • 根据启动引导程序的设置加载 Kernel (内核), Kernel会开启检测硬件与加载驱动程序——完成后,主机硬件已经准备就绪;
  • 在硬件驱动成功后,Kernel会主动调用systemd程序 ——准备软件执行环境,并以default.target流程启动:
  1. 启动systemd初始化进程 (rethat 7 之前版本 inin初始化进程)
  • 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 需要的服务;

1.2 系统启动流程知识点解析

BIOS (Basic Input Output System)

  • 基本输入 / 输出系统 ( BIOS ) 是内置于标准 x86/x86-64 硬件的固件接口 , 将硬件置于已知状态并准备好系统以加载操作系统
  • 启动自我测试与MBR
  • 当该步骤出现问题时会发出蜂鸣声,需要刷bios解决

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 解压缩成为 根目录,内核就能借此加载适当驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统,从而开始后续正常启动流程。

二. 系统启动常见问题的 恢复处理

2.1 MBR 主引导记录修复

2.11 模拟问题 —— MBR 引导文件丢失
# 主机系统磁盘/dev/sda
dd if=/dev/zero of=/dev/vda bs=446 count=1			
# 从/dev/zero复制446字节大小数据文件,覆盖系统/dev/sda上的mbr数据,破坏主引导记录
# mbr 在磁盘记录的数据位置就是0-446字节

在这里插入图片描述
当重启时将会出现以下错误:
在这里插入图片描述

解决方法步骤:

  1. 制作镜像光盘
  2. 选择光盘启动模式
  3. 启动系统,进入挽救模式
  4. grub2-install 安装启动引导程序,在启动分区所在硬盘
  5. 退出挽救模式
  6. 关闭系统,更改启动项为硬盘之后正常启动系统

要解决该问题需要制作镜像光盘,虚拟机制作制作镜像光盘步骤如下:
在这里插入图片描述
之后选择从光盘启动:
在这里插入图片描述
之后启动系统,进入救援模式:
在这里插入图片描述
在这里插入图片描述
在救援模式下需要执行以下命令:

 chroot /mnt/sysimage
 grub2-install /dev/vda   #  grub2-install 安装启动引导程序,在启动分区所在硬盘

之后执行两次 exit 退出:
在这里插入图片描述
关闭系统,更改启动项为硬盘之后再次启动系统发现可以成功进入系统:
在这里插入图片描述

2.2 引导文件以及启动加载文件 丢失的解决方案

/boot/grub2/grub.cfg # 系统引导文件,指定 /boot 位置
/boot/loader/entries/xxxxxxxxx.conf # 指定系统启动时加载文件名称
在这里插入图片描述

2.21 问题模拟<一> —— 引导文件丢失
rm -rf /boot/grub2/grub.cfg			#删除系统引导文件

恢复情景一:当系统没有重新启动时
解决方法:

# 可以执行以下命令恢复系统:
grub2-mkconfig > /boot/grub2/grub.cfg

恢复情景二:当系统被重新启动时:
解决方法步骤:

  1. 首先查看系统分区挂载情况
    在这里插入图片描述
  2. 重启系统发现不能正常进入系统
    在这里插入图片描述
  3. 输入以下命令:
grub > set root='hd0,msdos1'		##此位置不固定,位置指定/boot所在分区
grub > linux16 /vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/vda1 #根分区的设备名称
grub > initrd16 /initramfs-3.10.0-123.el7.x86_64.img
grub > boot

在这里插入图片描述
4. 以上操作可以使系统正常启动,但是是临时的,再次启动还是会出问题,所以进入系统后还是需要执行

grub2-mkconfig > /boot/grub2/grub.cfg
2.22 问题模拟<二> —— grub2相关系统启动加载文件缺失
rm -fr /boot/loader/entries/xxxxxxxxx.conf

恢复情景一:当系统没有重新启动时

                    内核版本号                 内核镜像
kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

在这里插入图片描述

恢复情景二:当系统被重新启动时:

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

2.3 内核文件丢失的解决方案

内核文件

/boot/vmlinuz-$(uname -r)                      # 内核文件 

uname -r  # 查看内核版本号   ,输出结果:4.18.0-80.el8.x86_64

在这里插入图片描述

2.31 模拟问题—— 内核文件丢失
rm -rf /boot/vmliunz-3.10.0-123.el7.x86_64		#删除内核文件

在这里插入图片描述
恢复情景一:当系统没有重新启动时

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

恢复情景二:当系统被重新启动时:
重启后无法进入系统:报错
在这里插入图片描述
解决方法步骤:

  1. 进入挽救模式,执行以下命令:
 chroot /mnt/sysimage				            #更改根环境
 mount /dev/cdrom /media			            #挂载光盘到/media中
 cd /media/BaseOS/Packages					    #打开安装包所在位置
 cp kernel-3.10.0-123.el7.x86_64.rpm /mnt		#复制内核安装文件到/mnt中
 cd /mnt
 rpm2cpio kernel-3.10.0-123.el7.x86_64.rpm | cpio -id	#将安装包解开并输出为目录
 cp /mnt/lib/modules/4.18.0-80.el8.x86_64/vmlinuz  /boot/vmlinuz-$(uname -r)   #复制缺少的内核文件到/boot目录
 exit
 exit

在这里插入图片描述
2. 关机,调整启动项后再次启动发现可以正常进入系统

2.4 系统初始化镜像丢失的修复方案

系统初始化镜像:/boot/initramfs-3.10.0-123.el7.x86_64.img

2.41 问题模拟方式 —— 虚拟文件系统文件缺失
rm -fr /boot/initramfs-xxxxx.img         # 系统初始化镜像文件

恢复情景一:当系统没有重新启动时

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)       #生成系统初始化镜像

在这里插入图片描述
恢复情景二:当系统被重新启动时:
启动系统时不能启动:报错
在这里插入图片描述
解决步骤:

  1. 重启,进入挽救模式
 chroot /mnt/sysimage
 mkinitrd /boot/initramfs-$(uname-r).img $(uname -r)
 exit
 exit

在这里插入图片描述
2. 关机重启系统即可恢复正常

2.5 系统启动级别的修复及root用户密码破解

2.51 系统启动级别概念

init

  • 0                  关机
    
  • 1                  单用户
    
  • 2                  无图形网络模式
    
  • 3                  无图形网络模式
    
  • 4                  无图形网络模式
    
  • 5                  有图形网络模式
    
  • 6                  重启
    
2.52 模拟问题<一>—— 反复重启,无法正常开机启动
systemctl set-default reboot.target			#设置系统开机重启,进入反复重启死循环

解决方法步骤:

  1. 系统开机时,按上/下键,停止读秒
    在这里插入图片描述
  2. 按 进入编辑模式
    在这里插入图片描述
  3. 选择内核启动行
 linux16 /vmlinuz-xxxxxxxx ro xxxxxxxxxxxxx  改为:
 linux16 /vmlinuz-xxxxxxxx ro xxxxxxxxxxxxx  5         # 有图形的系统启动初始化模式
  1. 启动系统 ctrl+x
    在这里插入图片描述
  2. 重新设定启动 systemctl set-default graphical.target
    在这里插入图片描述
2.53 root用户密码破解

模拟问题 —— 当系统root用户密码忘记之后…
解决方法步骤:

  1. 开机上下键停止读秒
  2. 按< e > 进入编辑模式
  3. 选择内核启动行
	linux16 /vmlinuz-xxxxxxxx ro xxxxxxxxxxxxx  改为:
	linux16 /vmlinuz-xxxxxxxx rw rd.break		##在内核启动完成后终止系统初始化程序的执行

在这里插入图片描述

  1. 启动系统执行命令行,之后即可使用新密码登陆系统
 chroot /sysroot		                #进入真实系统
 echo redhat | passwd --stdin root		#其中 redhat 为新密码
 touch /.autorelabel	                ##重新初始化selinux,当selinux未开启时不需要操作
 exit
 exit
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值