Linux系统引导过程及引导修复

本文详细解析Linux系统从开机到正常运行的引导过程,包括BIOS初始化、磁盘引导、GRUB2配置、内核加载等关键步骤,并针对常见引导问题提供修复方案。

系统从开机开始的引导步骤

1.通电

2.bios初始化

bios(Basic Input Output System),它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。
bios初始化做的事:
对硬件检测
初始化硬件时钟

这里如果选择启动客户机则为从硬盘启动,选择打开电源时进入固件则会在开机后进入bios界面:

bios界面:

在此界面中用上下左右键可以移动到要选择的选项:

这里移动到boot(启动选项),然后有下面4个选择:

bios界面的启动选项:

  1. 从可移动设备启动
  2. 从硬盘启动
  3. 从光驱启动
  4. 从网卡启动

若想从其中一个设备启动,只需要移动到它然后按shift和加号把它的位置移动到第一行就可以了。这里选择从光驱启动,然后按f10可以保存更改的设置:

选择yes按回车键就可以保存更改了,然后立马就会从光驱启动:

不过若想成功从光驱启动,则需要先在虚拟机设置中选择光盘镜像并保存:

并且在右下角选项中连接光盘:

也可以在从硬盘启动客户机后迅速按esc则可以进入bios界面的启动选项,不过要拼手速,不推荐:

3.磁盘引导 

磁盘是圆形的,离圆心相同距离长度所形成的圆周被称为磁道。
圆的半径划过的区域被称为扇区
mbr=主引导记录=0磁道1扇区446
作用
记录grub2引导文件的位置(记录启动分区(boot分区)所在的位置,让磁头在开机后能转到boot分区,以保证正常开机)
mbr数据丢失,系统会因为找不到启动分区而停止启动

问题模拟:清空/dev/sda上的mbr数据

带*星号的分区 /dev/sda1 分区为boot分区,若执行下图红框内的命令则会使该分区上的mbr数据损坏,而mbr数据丢失系统会因为找不到启动分区而停止启动,重启主机后就无法进入系统:

注意:mbr为0磁道1扇区446,所以这里bs=446,刚好覆盖完mbr的数据

如何修复:

关闭虚拟机后打开虚拟机设置:

选择使用ISO镜像然后选择镜像路径,再选上启动时连接,最后确定:

开启虚拟机后会进入下图界面,然后选中下图红框中内容按回车键: 

选择下图红框中选项,拯救系统,然后按回车键:

然后当前进入的系统是光盘里的正常系统,而不是硬盘里已经损坏的系统。这里是用光盘里的正常系统挽救硬盘里已经损坏的系统

这里把损坏的系统挂载到了这个光驱提供的挽救系统环境的这个目录中

然后选择1选项来继续挽救步骤,会告诉系统已经被挂载红框中的目录了,接着按回车键打开shell:

这里提示如果想进入硬盘里的真实系统则需要执行chroot /mnt/sysimage这个命令

进入硬盘里的真实系统后输入下图中的命令来在boot分区所在的磁盘sda中重新安装上mbr(主引导记录数据),然后输入两次exit来退出挽救程序: 

然后重新启动后系统修复成功:

4.grub2文件引导

rhel8
/boot/grub2/grub.cfg
/boot/loader/entries/xxxxxxxxx.conf
两个文件只要删掉其中一个就无法自动启动系统
/boot/grub2/grub.cfg  主配置文件,指定/boot位置
/boot/loader/entries/xxxxxxxxx.conf  指定系统启动时加载的文件名
系统的boot目录中有系统启动时需要读取的文件,第一个红框为系统的初始化镜像文件,第二个红框为系统启动时必须加载的内核文件
而上面这些文件理论上需要手动指定,但可以配置在文件中指定系统自动读取这些启动文件。
/boot/grub2/grub.cfg    主配置文件,记录了系统启动时需要读取的信息,指定/boot位置
/boot/loader/entries/xxxxxxxxx.conf    子配置文件,指定系统启动时加载的文件
可以看到这个xxx.conf文件中指定了系统启动时加载的内核文件和初始化镜像文件:
而在/boot/grub2/grub.cfg这个文件中,指定了这个xxx.conf文件的位置,所以只要删除掉这两个文件中的任意一个,系统就无法自动启动
模拟问题1
rhel8:
rm -fr /boot/loader/entries/xxxxxxxxx.conf   
修复:

这里直接删掉这个/boot/loader/entries/xxxxxxxxx.conf所在的entries目录

使用这个命令来生成这个文件

add后接内核版本,然后接内核镜像文件路径 ,$表示先执行括号内的命令

uname -r  ##显示内核版本

若不修复这个xxx.conf文件,则开机后无法自动启动系统,需要手动引导:

到下面界面后输入下图红框中三条命令:

第一条:激活 boot 分区(指定boot分区的位置,hd0表示第一块硬盘,msdos1表示第一个分区。这台主机的boot分区为第一块硬盘sda的第一个分区sda1,实际情况需根据boot分区的所在位置输入)(不能输错,输错后可能导致boot后卡住)

第二条:加载内核并只读挂载根分区(/vmlinux-4.18.0-193.el8.x86_64为内核,ro为只读挂载,/dev/sda3为根分区的位置)

第三条:指定系统初始化镜像程序(是el8不是e18)

三条命令输入完毕后输入boot使系统运行

模拟问题2: 
rm -fr /boot/grub2/grub.cfg    
修复:
在删除掉这个grub文件后,只需在/boot目录中执行这个命令,而这个命令输出的结果则为grub文件中应当存在的内容,于是可以直接这样生成grub文件

5.内核加载

加载内核作用
/boot/vmlinuz-$(uname -r)
系统初始化硬件设备
只读挂载在/分区
问题出现
rm -fr /boot/vmlinuz-$(uname -r)
恢复
误删内核文件后此时若尚未关机
复制系统中usr下的内核文件到/boot中即可

图中的uname -r命令意为查看版本号,$表示优先执行括号内的命令

若不修复,重启后会出现下图情况:

选择打开电源时进入固件: 

选择以光驱方式打开:

选择troubleshooting按回车键: 

选择到拯救系统后按回车键:

输入1以继续运行拯救系统然后回车键打开shell: 

先执行chroot /mnt/sysimage/命令进入磁盘中的系统,然后执行刚才在刚才在主机未关闭时在shell内的修复操作——复制模板文件到 /boot 下再输入两次exit即可修复:

然后在做完后记得关机后在开机时打开固件换回从硬盘启动系统

6.系统初始化镜像 

文件:/boot/initramfs-4.18.0-80.el8.x86_64.img
加载系统时钟
加载selinux
加载系统主机信息
加载/etc/fstab文件中磁盘挂在策略
加载磁盘配额
初始化系统程序开启开机启动服务
开启虚拟控制台
开启图形
问题出现:
rm -fr /boot/initramfs-xxxxx.img  误删系统初始化镜像
恢复
若此时还未关机:
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

需要先关闭selinux(否则加载会比较缓慢):

若删掉文件,再用mkinitrd命令重新制造一个系统镜像文件即可: 

引导方式:

不修复,重启系统会报错:

关闭系统,选择开机进入固件,然后进入以光驱打开,跟上一个修复操作相同,然后直到来到这个界面回车键打开shell后: 

输入下图命令,第二条命令即为刚才在系统未关闭时在shell内的修复命令:

然后在做完后记得开机时打开固件换回从硬盘启动系统

7.系统启动级别

0 关机
1 单用户
2 无图形网络模式
3 无图形网络模式
4 无图形网络模式
5 有图形网络模式
6 重启
问题出现:
systemctl set-default reboot.target    指定了系统启动级别为6:重启
恢复
在开机选择界面按<e>进入到引导文件编辑模式
在内核加载选项最后加入启动级别5
ctrl+x
systemctl set-default graphical.target

查看系统启动级别:

在这个system目录中,有个软链接——default.target,它链接到的文件就为当前系统启动级别文件,可以看到当前是graphical,即启动级别为5,有图形的网络模式:

在这个system目录中,在这个multi-user.target.wants目录中,若存在某个服务的软链接则这个服务才会开机自启动:

设定服务开机自启动时其实就是往multi-user.target.wants这个目录中生成了个服务文件的软链接

问题模拟:

某些软件安装之后会设定系统启动级别为6,此时系统会一直重启,无法正常使用

设置启动级别为6(重启),则系统会一直重启,无法正常使用:

在这个界面按e修改启动选项: 

在这里输入5(系统启动级别为5:有图形网络模式),然后按ctrl+x键即可正常开机:

这里需输入想设置的启动级别,来正确使用系统

注意:开机后如果不更改系统的启动级别,则下次重启后依然无法正常使用

这里修改系统的启动级别为有图形的网络模式:

这里更改后,会移除原来的default.target文件到reboot.target的链接,会创建default.target文件到graphical.target的链接,这就表示修改系统的启动级别从重启模式到有图形的网络模式:

8.超级用户密码忘记

恢复
1.在开机选择界面按<e>进入到引导文件编辑模式
2.在内核加载选项最后删除到ro选项
3.更改ro---->rw
4.加入rd.break参数终止系统启动进入单用户模式
5.ctrl+x启动
6.chroot /sysroot
7.echo lee| passwd --stdin root
8.touch /.autorelabel ##/.autorelabel文件存在selinux会重新初始化cp kernel
core-4.18.0-80.el8.x86_64.rpm /mnt/
exit
exit

问题模拟:

超级用户密码忘记。

比如在安装系统时设定了root用户密码,安装完系统后忘记root用户的密码

修复:

在这个界面选择电源键:

选择restart:

在这个界面按e进入启动选项: 

把内核启动选项这行删到红框位置: 

从刚才的红框内的r开始写成下图红框内的内容,然后按ctrl+x即可:

把原先的ro参数更改为rw参数,并加入rd.break参数使内核启动完成后不进行后续的初始化程序,这样系统会进入单用户模式

下来进入到这个界面后按回车键打开shell: 

在shell中依次输入下图命令:

chroot /sysroot/ 执行后会切换到真实的根目录

第二条命令表示修改密码为westos,修改密码后才能登录(因为忘了密码)

第三条命令:此时如果selinux处于开启状态,用单用户模式修改过密码后selinux会阻止新密码生效。所以第三条命令表示建立此文件让selinux重启,在重启selinux后新密码才能生效

注:如果当前selinux的状态为关闭状态(disabled),则无需执行这第三条命令

然后输入两次exit后会进入用户登录界面,输入刚修改的密码即可登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值