Linux系统启动流程

Posted 徐中祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统启动流程相关的知识,希望对你有一定的参考价值。

详细查看:https://www.cnblogs.com/linhaifeng/articles/13274099.html

一、Linux系统启动流程

理解Linux操作系统启动流程能有助于后期在企业中更好的维护Linux服务器能够快速定位系统问题。

Linux系统启动流程图:

img

Linux系统启动流程详细说明:

1、加载Bios

当你打开计算机电源,计算机会首先加载基本输入输出系统(Basic Input Output System )BIOS系统。

BIOS程序一般被存放在主板ROM(只读存储芯片)之中、即使在关机或掉电以后该程序也不会丢失。

BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机就知道应该去读取哪个硬件设备了。

2、读取MBR

读取硬盘上磁道的第一个扇区被称为MBR,也就是Master Boot Record即主引导记录、它的大小是512字节 前446存放的就是grub程序的一部分、里面却存放了预启动信息、分区表信息。

系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了

3、GRUB引导

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。

Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。系统读取内存中的grub配置信息,并依照此配置信息来启动不同的操作系统。

4、加载Kernel

根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。

系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。

5、设定Inittab运行等级

内核加载完毕,会启动Linux操作系统第一个守护进程init,然后通过该进程读取/etc/inittab文件,/etc/inittab文件的作用是设定Linux的运行等级,Linux常见运行级别如下:

•0:关机模式
•1:单用户模式
•2:无网络支持的多用户模式
•3:字符界面多用户模式
•4:保留,未使用模式
•5:图像界面多用户模式
•6:重新引导系统,重启模式

6、加载rc.sysinit

 # 读取完运行级别,Linux系统执行的第一个用户层文件/etc/rc.d/rc.sysinit,该文件功能包括:设定PATH运行变量、设定网络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。

7、加载内核模块

# 读取/etc/modules.conf文件及/etc/modules.d目录下的文件来加载系统内核模块。该模块文件,可以后期添加或者修改及删除。

8、启动运行级别程序

根据之前读取的运行级别,操作系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。其中以S开头表示系统即将启动的程序,如果以K开头,则代表停止该服务。S和K后紧跟的数字为启动顺序编号。

img
img

9、读取rc.local文件

操作系统启动完相应服务之后,会读取执行/etc/rc.d/rc.local文件,可以将需要开机启动的任务加入到该文件末尾,系统会逐行去执行并启动相应命令。
img

# rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里

10、执行/bin/login程序

执行/bin/login程序,启动到系统登录界面,操作系统等待用户输入用户名和密码,即可登录到Shell终端,如图3-7所示,输入用户名、密码即可登录Linux操作系统,至此Linux操作系统完整流程启动完毕。

img

# 此时系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。

二、启动级别设置

# Linux启动级别有
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 
运行级别2:多用户状态(没有NFS) 
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式 
运行级别4:系统未使用,保留 
运行级别5:X11控制台,登陆后进入图形GUI模式 
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

# 设置启动级别为 3
Linux系统默认启动等级为5、可已使用init命令切换启动级别。
[root@steven ~]# init 3


# 对于传统的设置方法
通过查看CentOS7的/etc/inittab文件。

# 将系统修改为多用户命令行界面
systemctl set-default multi-user.target
# 将系统修改为图形界面
systemctl set-default graphical.target

三、单用户模式

1、开机时进入如下界面按下方向键盘阻止系统自动继续

在这里插入图片描述

2,按e键出现下面界面

在这里插入图片描述

3,按方向键定位到最后,找到“ro”这一行,ro的意思是read only将“ro”替换成 rw init=/sysroot/bin/sh

在这里插入图片描述

4、按Ctrl-x 进入单用户模式

在这里插入图片描述

5、执行chroot /sysroot。其中chroot命令用来切换系统,/sysroot/目录就是原始系统

在这里插入图片描述

4、修改root密码

在这里插入图片描述

​ 5、修改默认启动级别(开机进入命令行模式)

#设置成命令模式
systemctl set-default multi-user.target 
init 3 # 切换到字符模式,有时只使用上面的语句没有效果

按下Ctrl+D后,执行reboot

在这里插入图片描述

6,测试使用修改后密码登入成功。

在这里插入图片描述

四、grub加密

centos7.2 + 中引入了新的实用程序“ grub2-setpassword ”

1、 执行 grub2-setpassword 命令

# 进入系统命令行执行grub加密命令。
[root@steven ~]# grub2-setpassword 
Enter password: [密码]
Confirm password: [密码]

2、删除–unrestricted 参数

# 为什么要删除这个参数?
因为如果现在直接重新启动系统。尝试修改引导条目、系统会要求提供凭据。
但是可以在没有凭据的情况下修改引导条目。
为了阻止未经授权的修改和未经授权的启动,需要对 /boot/grub2/grub.cfg文件进行更改。
打开文件并使用密码搜索需要保护的启动条目,它以menuentry开头。找到条目后,从中删除 --unrestricted 参数

[root@web02 ~]# vim /boot/grub2/grub.cfg

在这里插入图片描述

3、重启验证 reboot

此时只有当输入正确的用户名和密码时,才能进入 grub 菜单或者修改引导条目

在这里插入图片描述

在这里插入图片描述

五、光盘修复模式

1、进入bios、从光盘启动 (重启进入bios界面按F2,手速要快不要哆嗦)

在这里插入图片描述

2、选择 Troubleshooting (选择故障排查)

在这里插入图片描述

3、此时就进入到了 Troubleshooting 故障排查界面

在这里插入图片描述

4,然后选择:Rescue a CentOS system (进入系统修复模式)

在这里插入图片描述

5,进入到Rescue模式 (成功进入系统修复模式页面)

在这里插入图片描述

6,选项意思:(进入系统修复模式的一些选项)

  1. continue
# 救援模式程序会自动查找系统中已有的文件系统,并可读写挂载到/mnt/sysimage目录下。
  1. Read-Only mount
 # 会以只读的方式挂载已有的文件系统。
  1. Skip to shell
# 手动挂载

4)Quit (Reboot)

# 退出重启

7, 选 1)Emter 回车

在这里插入图片描述

8,sh切换bash模式

chroot /mnt/sysimage/

在这里插入图片描述

9,修改root密码

passwd root

在这里插入图片描述

六、BIOS加密

1,设置BIOS加密

找到设置选项

在这里插入图片描述

2、直接回车会弹出让你设置密码的条框。

在这里插入图片描述

3、设置密码

在这里插入图片描述

4、按F10保存 [Enter]回车

在这里插入图片描述

2,再次进入bios验证

在这里插入图片描述

以上是关于Linux系统启动流程的主要内容,如果未能解决你的问题,请参考以下文章

总结:Linux系统启动流程

Linux系统启动流程分析

LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段

13linux系统启动流程

linux系统启动流程

Linux系统移植:Kernel 启动流程