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

Linux 系统的启动,从计算机开机通电自检开始,一直到登陆系统,需要经历多个过程。学习 Linux 的启动过程,有助于了解 Linux 系统的结构,也对系统的排错有很大的帮助。

系统引导过程:通电 -> BIOS自检 -> 磁盘引导 -> grub2文件引导 -> 内核加载 -> 系统初始化镜像

下面依次介绍这些引导过程。

2. BIOS自检

BIOS(Basic Input Output System,基本输出输入系统),完整地说应该是ROM-BIOS,是只读存储器基本输入/输出系统的简写,它实际上是被固化到计算机中的一组程序,为计算机提供最低级的、最直接的硬件控制。准确地说,BIOS是硬件与软件程序之间的一个"转换器",或者说是接口(虽然它本身也只是一个程序),负责解决硬件的即时需求,并按软件对硬件的操作要求具体执行。

BIOS的主要功能

  1. 第一次检查计算机硬件和外围设备(第二次自检由内核完后,后续会讲),例如 CPU、内存、风扇灯。当 BIOS 一启动,就会做一个自我检测的工作,整个自检过程也被称为 POST(Power On Self Test)自检。
  2. 如果自检没有问题,BIOS 开始对硬件进行初始化,并规定当前可启动设备的先后顺序,选择由那个设备来开机。
  3. 选择好开启设备后,就会从该设备的 MBR(主引导目录)中读取 Boot Loader(启动引导程序)并执行。启动引导程序用于引导操作系统启动,Linux 系统中默认使用的启动引导程序是 GRUB。

3. 磁盘引导

为什么需要磁盘引导程序

为什么需要磁盘引导程序而不是直接载入操作系统?或许是因为历史原因,BIOS最初是为最原始的8位PC所创,8位的PC磁盘很小,所以BIOS只能先载入磁盘引导程序然后通过磁盘引导程序导入操作系统。

MBR(Main Boot Record,主引导记录区) 共占用了一个扇区,也就是 512 Byte。其中 446 Byte 安装了启动引导程序,其后 64 Byte 描述分区表,最后的 2 Byte 是结束标记。
在这里插入图片描述
位置:0磁道1扇区的前446个字节
作用:记录grub2引导文件的位置

查看MBR所在的位置

Boot参数下有*号,说明MBR位于该设备。
在这里插入图片描述

模拟系统丢失MBR时的启动情况

若MBR数据丢失,系统会因为找不到启动分区而停止启动,因此模拟此情况。

  1. 删除MBR
    命令:dd if=/dev/zero of=/dev/nvme0n1 bs=446 count=1
    含义:清空/dev/nvme0n1上的MBR数据
    在这里插入图片描述
  2. 重启系统
    命令:reboot

此时系统无法重启。

接下来对该系统进行修复。

系统丢失MBR时的修复

清空MBR后,系统无法重启,若要修复,需将系统的启动方式调整为从光盘(CD-ROM)启动,将光盘中的MBR重新写入磁盘中即可修复此问题。

  1. 此时,重启系统自动进入安装界面。在安装界面的排错选项上按下回车键Enter
    在这里插入图片描述
  2. 选择进入rescue系统
    在这里插入图片描述
  3. 在此模式下选择1,将正确的系统挂载到当前设备上。
    在这里插入图片描述
  4. 根据提示,执行chroot /mnt/sysimage命令
    在这里插入图片描述
    在这里插入图片描述
  5. 将MBR重新写入磁盘
    命令:grub2-install /dev/nvme0n1
    在这里插入图片描述
  6. 退出shell,重启系统。
    命令:exit(注意:需输入两次)

4. grub2文件引导

作用:指定启动分区/boot目录的位置,指定系统启动过程中需要加载的文件,加载操作系统的内核

文件的位置:
Linux7中:/boot/grub2/grub.cfg
Linux8中:/boot/grub2/grub.cfg/boot/loader/entries/xxxxxxxxx.conf

在Linux7中,grub.cfg文件的内容:
在这里插入图片描述
第一个标题的功能:

  • 设置启动分区
    hd0,msdos1指第一块硬盘的第一个分区,即/boot分区
  • 在启动分区中读取内核镜像
  • 在启动分区中读取系统初始化程序镜像
    在这里插入图片描述
    查看一下/boot目录中是否有这两个文件:
    在这里插入图片描述
    正确读取这两个文件后才能启动系统,完成系统的初始化过程。

此功能在Linux8与Linux7中不同。Linux8中需通过两个文件实现文件引导

grub.cfg仅设置启动分区的位置,内核镜像与初始化镜像的读取需其它文件完成。
在这里插入图片描述
在这里插入图片描述
编辑上图中框起来的配置文件:
在这里插入图片描述

模拟系统丢失grub2引导文件时的启动情况

在Linux7中仅需执行命令:rm -fr /boot/grub2/grub.cfg

在Linux8中需执行命令:rm -fr /boot/loader/entries/xxxxxxxxx.conf
在这里插入图片描述
删除正常启动模式下的配置文件后,文件引导自动进入rescue模式,此时仍可以正常启动系统。
在这里插入图片描述
因此,为了模拟系统无法启动的情况,需删除/boot/loader/entries目录下的全部配置文件。
在这里插入图片描述
此时,系统无法进行自动文件引导。
在这里插入图片描述

系统修复

在Linux7中需执行命令:grub2-mkconifg > /boot/grub2/grub.cfg
在这里插入图片描述
在Linux8中需执行命令:
kerne-install add 内核版本号 内核镜像
kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz

以上修复方法均为不小心删除文件且系统未重启时使用,若删除文件后将系统重启了,则要执行手动修复,以Linux8的系统为例进行说明。

删除引导文件后,系统无法正常启动,会进入以下界面:
在这里插入图片描述
手动配置引导文件的位置后启动系统。
在这里插入图片描述
其中各个命令的含义如下:
set root='hd0,msdos1' 设置启动分区的位置
linux /vmlinuz-4.18.0-80.el8.x86_64 ro root=/dev/nvme0n1p3 读取内核镜像,并将镜像以只读方式挂载在nvme0n1p3上。注意:具体挂载在哪个盘上要看之前根目录在哪个盘上,系统不同,挂载的位置也不尽相同。
initrd /initramfs-4.18.0-80.el8.x86_64.img读取初始化镜像
boot启动系统(若之前的配置均正确无误,执行此命令后系统能正常启动)

Linux7与Linux8系统的手动引导过程相同。

此时虽然能正确完成启动,但无法永久记录此次引导过程,查看/boot/loader/entries/目录,其下并无配置文件。
在这里插入图片描述
因此开机前进行的配置仅是一个临时配置,永久解决此问题仍需使用kernel-install add命令进行引导过程的修复。
在这里插入图片描述
不同的系统内核版本号不相同,可将上述命令中的内核版本具体信息修改为$(uname -r)
在这里插入图片描述
使用kernel-install add命令增加配置文件后,系统开机时可以自动引导文件。

5. 内核加载

内核加载需要读取的文件:/boot/vmlinuz-$(uname -r)

我们可以看到在文件引导的过程中系统就读取了/boot/vmlinuz-$(uname -r)文件加载内核。

内核加载的作用:根据grub设定的内核映像所在路径,系统读取内存映像。

模拟系统丢失/boot/vmlinuz-$(uname -r)文件

命令:rm -fr /boot/vmlinuz-$(uname -r)

删除镜像文件后重启系统,启动失败。
在这里插入图片描述

系统修复

系统丢失/boot/vmlinuz-$(uname -r)文件后若重新启动系统,可以从rescue模式启动。但是这样系统永远无法在正常模式下成功启动,并不算真正的修复。

此时的系统要想真正修复就需要重装内核

  1. 从CD-ROM启动系统
    在这里插入图片描述
  2. 进入排错模式
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 将镜像挂载在mnt目录下
    命令:mount /dev/cdrom /mnt
    在这里插入图片描述
  4. 重装内核
    在这里插入图片描述
  5. 退出shell,关闭系统。
    在这里插入图片描述
  6. 将系统的启动方式修改为—从硬件启动系统
    在这里插入图片描述
    在这里插入图片描述
    此时,系统成功启动。

6. 系统初始化镜像

系统初始化镜像的文件位置:/boot/initramfs-$(uname -r).img
作用:加载系统时钟、加载SELinux、加载系统的主机信息、加载/etc/fstab文件中的磁盘挂载策略、加载磁盘配额、初始化系统程序、开启开机启动服务、开启虚拟控制台、开启图形。

以初始化系统程序为例进行说明。

  1. 进入/etc/systemd/system目录,该目录中均为与初始化系统程序相关的文件
    在这里插入图片描述
  2. 查看控制系统模式的文件–default.target
    在这里插入图片描述
    default.target是一个软连接,它指向graphical.target文件,说明现在的系统为图形化模式。当系统不是图形化模式时,default.target指向其它文件(如下图)。
    在这里插入图片描述
  3. 查看开机启动的服务
    这个目录中包含系统所有开机启动的程序,它们均以软连接的方式指向程序的真实位置。
    在这里插入图片描述

模拟系统丢失/boot/initramfs-$(uname -r).img文件

命令:rm -fr /boot/initramfs-(系统版本号).img
在这里插入图片描述
丢失此文件后重启系统,启动失败。

在这里插入图片描述

系统修复

命令:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
在这里插入图片描述

  1. 从CD-ROM启动系统
    在这里插入图片描述
  2. 进入排错模式
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 修复系统
    命令:mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
    在这里插入图片描述
  4. 退出shell,关闭系统。
    在这里插入图片描述
  5. 将系统的启动方式修改为—从硬件启动系统
    在这里插入图片描述
    在这里插入图片描述
    此时,系统成功启动。

模拟default.target指向reboot.target导致系统无法启动的情况

  1. 将系统的默认模式该为reboot模式
    命令:systemctl set-default reboot.target
    在这里插入图片描述
  2. 执行reboot命令,系统无法正常启动(无限重启)。

系统修复

  1. 在开机选择界面按e编辑进入到引导文件编辑模式
    在这里插入图片描述
  2. 手动更改系统启动模式
    在这里插入图片描述
  3. Ctrl-x开启系统
  4. 查看系统的默认启动模式,发现它并未修改,因此需手动将其修改为graphical.target
    在这里插入图片描述

参考文献:

  1. https://blog.csdn.net/wangdetian168/article/details/2210508
  2. https://blog.csdn.net/zt_xcyk/article/details/53669383
  3. http://c.biancheng.net/view/1015.html
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值