linux系统启动流程及故障修复

一、linux启动流程

1、开机上电

2、BIOS开机自检(检查硬件是否故障)

3、BIOS根据启动项加载硬件设备

4、硬盘如果有系统,会读取到硬盘的引导代码(硬盘前446字节中的一串代码);引导程序(grub2)最主要的作用就是加载系统中的引导配置文件(/boot/grub2/grub.cfg);所以/boot分区就是又叫引导分区

5、选择内核进入系统,grub2程序加载内核及initramfs到内存中

为什么要加载内核?:内核需要挂载根文件系统,然后执行根下的systemd服务来初始化系统环境,比如系统启动后操作环境是字符界面还是图形化界面

initramfs:提供文件系统驱动,提供内核必要的一些驱动;自身是一个小型的操作系统,有自己的文件系统

6、根目录具有文件系统,挂载文件系统需要有文件系统驱动,但是文件系统是在根下的目录中,这是一个死循环(开箱子需要钥匙,钥匙却在箱子里面);所以由initramfs会先将根文件系统挂载到自己本地的/sysroot目录下

7、内核切换到真正的根文件系统(/),执行systemd初始化系统

8、根据启动目标得到一个操作环境

二、内核管理机制

grubby --info=ALL  ----------查看所有的内核信息

grubby --default-kernel   ----------查看默认的启动内核

grubby --set-default-index 内核编号or内核文件绝对路径   ----------设置默认的启动内核

修改内核参数

1、修改配置文件/etc/default/grub,加入参数

GRUB_TIMEOUT=5     设置进入默认启动项的等候时间
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" 用于在grub菜单中显示系统的发行版本名称
GRUB_DEFAULT=saved  设置默认的引导项,saved表示沿用上次的启动项
GRUB_DISABLE_SUBMENU=true  是否要隐藏次菜单
GRUB_TERMINAL_OUTPUT="console" 设置grub的输出设备
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root  rd.lvm.lv=centos/swap rhgb quiet net.ifname=0 biosdevname=0"  设置传递给内核的参数,设定内核的行为
GRUB_DISABLE_RECOVERY="true"  是否禁用恢复模式

net.ifname=0 biosdevname=0 ------修改网卡名称,在分布式系统中需要多个节点保持网卡名称一致时用到

重新生成引导配置文件,永久生效

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

2、开机选择内核菜单,e键修改内核参数,crtl+X正常引导;临时生效

3、grubby 命令添加内核参数;添加的内核参数信息保存在/boot/loader/entries目录下

三、故障处理

1、引导配置文件/boot/grub2/grub.cfg 丢失

并且重启后会出现以下情况

grub.cfg文件记录了内核文件的路径和initramfs文件的路径,文件丢失,这些路径记录也就没有了

解决办法:手动指定内核文件的路径和initramfs文件的路径、根文件系统的路径

hd0 第一块硬盘 

  hd0,msdos1 第一个硬盘的第一个分区

只要是系统盘,第一个分区永远是boot分区

处理流程

指定boot分区并查看内容

指定内核文件,指定根分区, 只读挂载;指定根分区时注意系统盘是nvme还是scsi以及是否做了lvm

指定initramfs文件

进行系统引导

进入系统成功后,之前配置只是临时生效

需要重新生成cfg文件

initramfs是指在Linux内核初始化时所使用的一个临时文件系统。它包含必要的驱动程序、文件系统和工具,以确保内核能够启动并能够访问根文件系统

2、grub2引导程序故障

dd if=/dev/zero of=/dev/sda bs=1 count=446

一般此操作用于修复或重新初始化硬盘的MBR区域(主引导扇区)

MBR:广义的MBR就是指磁盘的第一个扇区,其中包含446字节的主引导程序、64字节的分区表信息、2字节的结束标志

MBR的作用:检查分区表是否正确以及确认哪个分区是引导扇区,会把引导扇区的程序调入内存进行加载

引导扇区:引导扇区是每个分区的第一个扇区

错误原因:硬盘前446字节数据损坏

挂载光盘 使用救援模式

进入救援模式(需要光盘并已经挂载)

救援模式已经找到了咱们的根文件系统,并挂载在它的/mnt/sysimage 目录下

chroot命令 切换根文件系统

使用grub2-install命令安装引导程序

选择错误选项2后,以只读挂载文件系统;可以使用mount -o remont,rw重新以读写挂载

最后使用两次exit退出救援模式,切换启动项到硬盘,从新加载MMR、引导并启动系统

3、root密码忘记

重启系统,选择内核(从rhel9开始,需要使用救援内核进行重置密码操作)

rd.break 打断正常引导流程,进入紧急救援模式

目前shell所处位置为initramfs

真正的根文件系统在sysroot目录下

切换到紧急模式根下,重新以读写方式挂载 /sysroot

使用echo 密码 |  passwd --stdin root 命令修改root密码

创建/.autorelabel文件,防止selinux阻止你的修改root密码操作,并重新给目录文件打标签

4、/etc/fstab文件中内容错误

错误类型

1、设备名字错误

2、文件系统错误

3、挂载点错误

mount -a 检查配置文件错误点,进入配置文件进行修改

5、内核文件丢失

/boot目录下内容丢失

进入光盘救援模式,通过配置yum仓库,安装对应软件包得到缺失的文件

rpm -qf vmlinuz-****  通过一台正常的相同系统机器rpm命令查找内核文件所属软件包

进入紧急救援模式,挂载光盘到本地/media目录

yum install kernel* -y 安装所有以kernel开头的包

生成/boot/grub2目录  grub2-install /dev/nvme0n1:重新安装grub2到系统硬盘上(重新给硬盘写mbr)

生成grub.cfg文件  grub2-mkconfig -o /boot/grub2/grub.cfg

-----------------------------------------------------------------------------------------------------------------------

扩展

系统启动流程

BIOS:硬件检测、初始化、寻找磁盘的引导记录(MBR)

MBR:引导扇区,用于加载引导程序;当计算机启动时,BIOS会读取磁盘的第一个扇区(也就是MBR)到内存中,然后执行其中的引导加载程序。引导加载程序会根据MBR中的分区表信息找到操作系统所在的分区,并读取操作系统内核到内存中执行

GRUB:引导加载程序,多操作系统引导程序,可以读取不同操作系统所在分区的内核

kernel:操作系统和硬件之间的桥梁;硬件控制、进程管理、文件系统管理、驱动管理

init:用于初始化系统进程,是第一个启动的进程,并去启动其它进程;负责初始化系统资源、启动系统服务、管理用户会话,并处理系统的关机与重启

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值