Linux启动过程

Linux系统的开机过程

1. 主机加电自检,加载BIOS硬件信息
2. 加载MBR到内存
3. GRUB引导
4. 加载Linux内核
5. 运行第一个进程init
6. 读取rc.sysinit文件
7. 执行/bin/login

一、 加点自检
当主机通电时,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。BIOS程序一般被存放在主板ROM(只读存储芯片)中,即使关机或者断电,该程序也不会丢失。CMOS是主板上的一块可读写的RAM芯片,里面装的是关于系统配置的具体参数。当系统加电后,系统读取硬件固化在主板ROM上的bios程序,并开始执行。bios首先检查硬件,通过BIOS程序去加载CMOS的信息,然后根据bios中设置的启动顺序将控制器交给下一阶段,即MBR。

二、 加载MBR到内存
MBR(Main Boot Record)是磁盘最前边的一段主引导记录(一段程序),由于在硬盘的第一个扇区,所以也叫做主引导扇区,它在硬盘上的位置是(0柱面,0磁头,1扇区)。MBR的主要作用是检查分区表是否正确并且将控制权交给硬盘主分区(活动分区)上的引导程序(如GNU GRUB)。

三、 GRUB引导
GRUB是一个多重操作系统启动管理器,用来引导不同的系统。在MBR的前446字节存放的就是GRUB程序的一部分,在grub中可以由用户选择启动哪个分区的哪个系统。

四、 加载Linux内核

五、 运行第一个进程init
内核加载成功后,第一个运行的程序是/sbin/init。它根据配置文件(Debian系统是/etc/initab)产生init进程。这是Linux启动后的第一个进程,pid进程编号为1,其他进程都是它的后代。

Linux系统的7个运行级别(runlevel):
0:系统停机状态,系统默认运行级别不能设置为0,否则不能正常启动
1:单用户工作状态,root权限,用于系统维护,禁止远程登录
2:无网络支持的多用户模式,顾名思义就是支持多用户登录
3:字符界面多用户模式,文本命令行界面,一般服务器都是此模式
4:系统未使用,保留
5:图形界面多用户模式,系统启动之后会进入到图形化桌面系统中
6:重新引导系统,重启模式,千万不要设置为6,和0相似

每一个运行级别都在/etc目录下有一个对应的子目录,可以指定每一个运行级别需要加载哪些程序,rcN.d的字母d是directory的意思,表示这是一个目录。

六、 读取rc.sysinit文件
读取完运行等级后,Linux系统就会运行第一个用户层进程:/etc/rc.d/rc.sysinit,该进程的功能是设定PATH变量、设定网络配置、启动/swap分区、设置/proc、系统函数和Selinux等等。完成上述流程后,会读取/etc/modules.conf文件以及/etc/modules.c目录下的文件来加载系统的内核模块。根据设定的运行等级,系统会执行/etc/rc0.d到/etc/rc6.d/中相应的脚本程序,来完成相应的初始化工作和启动相应的服务,都是一些服务程序。其中以S开头表示系统即将启动,如果以K开头,则代表停止该服务。S和K后紧跟的数字为启动顺序编号

七、 读取rc.local文件
启动完服务程序后,会读取执行/etc/rc.d/rc.local文件,我们可以对该文件设定一些关键核心业务开机自启,也就是Linux留给用户进行个性化的地方,你可以把你想要设置和启动的东西放到这里。

八、 执行/bin/login
最后执行/bin/login程序,启动到系统登录界面,等待用户输入用户名和密码,然后就可登录到Shell终端。

RHEL6启动过程
开机自检BIOS -> MBR引导 -> GRUB菜单 -> 加载内核 -> Init进程初始化
RHEL7启动过程
开机自检BIOS -> MBR引导 -> GRUB2菜单 -> 加载内核 -> Systemd进程初始化

GRUB2相比较GRNB:更健壮、可移植、更强大。支持BIOS、EFI和OpenFirmware,支持GPT和MBR分区表。支持非Linux系统,如苹果HFS文件系统和window的NTFS文件系统

systemd的目标是:尽可能启动更少进程;尽可能将更多进程并行启动。systemd尽可能减少对shell脚本的依赖。传统的sysvinit使用inittab来决定运行那些shell脚本,大量使用shell脚本被认为是效率低下无法并行的原因。

init和Systemd的区别

  1. init
    • 启动时间长,init是串行启动,只有前一个进程启动完,才会启动下一个进程。
    • 启动脚本复杂,Init进程只是执行脚本,不管其他事情,脚本需要自己处理各种情况,这往往使得脚本变得很长。
    • 位于/sbin/init,由Linux内核加载运行,是系统中第一个进程,PID永远为1。

对于支持service的程序,安装的时候,会自动的在/etc/init.d目录添加一个配置文件。

  1. systemd:

    • 按需启动服务,减少系统资源消耗。
    • 尽可能并行启动进程,减少系统启动等待时间。
    • 由Linux内核加载运行,位于/usr/lib/systemd/systemd,时系统中第一个进程,PID永远为1。

    对于支持systemd的程序,安装的时候,会自动的在/usr/lib/systemd/system目录添加一个配置文件。

相关的配置文件

init进程的配置文件:

参数 说明
/etc/init.d/ 服务启动脚本配置文件
/etc/inittab 默认运行级别配置文件
/etc/init/rcS.conf 系统初始化配置文件
/etc/init/rc.conf 各运行级别初始化的配置文件
/etc/init/rcS-sulogin.conf 单用户模式启动/sbin/sushell环境的配置文件
/etc/sysconfig/init tty终端的配置文件
systemd进程的配置文件:
参数 说明
---- ----
/etc/systemd/system/default.target 取代/etc/inittab文件,通常符号链接到/lib/systemd/system/graphical.target
/run/systemd/system/ 系统执行过程中所产生的服务脚本
/etc/systemd/system/ 里面存放着不同级别开启自启服务

运行级别和说明:

img
查看运行级别:

  • runlevel:显示切换前的运行级别和当前运行脚本
  • systemctl get-default:显示当前运行级别
    永久设置开机模式
  • systemctl set-default multi-user.target 设置为文本模式
  • systemctl set-default graphical.target 设置为图像模式
  • 修改/etc/inittab默认运行级别配置文件

Linux服务管理

以apache服务为例:
img

posted @ 2023-05-23 10:04  kalixcn  阅读(101)  评论(0编辑  收藏  举报