首页 > 系统相关 >Linux启动过程

Linux启动过程

时间:2023-05-23 10:13:27浏览次数:46  
标签:systemd 配置文件 启动 etc init 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

标签:systemd,配置文件,启动,etc,init,Linux,过程
From: https://www.cnblogs.com/kalixcn/p/17422492.html

相关文章

  • Linux 升级安装 Python3
    下载#安装依赖[root@localhost~]#yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel#下载Python3.8【可以用讯雷下好,拖到Linx中】[root@localhos......
  • 代码修改的git命令提交过程
    首先,克隆远程仓库到本地:gitclone<remote_repository_url>进入本地仓库目录:cd<local_repository_directory>创建并切换到一个新分支:gitcheckout-b<new_branch_name>修改代码并保存更改。添加修改后的文件到暂存区:gitadd<file_name>提交更改到本......
  • 系统启动项及定时任务
     用cmd输入regedit启动注册表 如果无法显示,输入cncp437,然后在输入命令 用文件资源管理器打开  用命令行 用cmd运行 ......
  • ARM64启动汇编和内存初始化(上)
    文章代码分析基于linux-5.19.13,架构基于aarch64(ARM64)。涉及页表代码分析部分:(1)假设页表映射层级是4,即配置CONFIG_ARM64_PGTABLE_LEVELS=4;(2)虚拟地址宽度是48,即配置CONFIG_ARM64_VA_BITS=48;(3)物理地址宽度是48,即配置CONFIG_ARM64_PA_BITS=48;1.入口分析1.1链接脚本arch/a......
  • 【linux进阶】shell 命令之 awk | sed命令详解,带实例
    WK和Sed是常用的文本处理工具,可以用来处理文本文件、日志文件等数据。下面将分别介绍AWK和Sed命令,并提供一些实例。AWK命令AWK是一种文本处理工具,其名字取自它的三位创始人的姓名:AlfredAho,PeterWeinberger和BrianKernighan。AWK命令通常用于从文件或其他输入流中......
  • 【linux进阶】shell之数组字典参数处理详解
    在Shell脚本中,使用数组和字典(关联数组)可以方便地处理参数。以下是它们的介绍:数组Shell中的数组类似于其他编程语言中的数组,它是一个用于存储多个值的变量。在Bash和其他类Unixshell中,可以使用以下语法来创建和操作数组:1.定义数组定义数组需要使用array_name=(value1......
  • hadoop集群搭建后,启动集群后网络畅通,却无法访问web页面的解决办法
    hadoop集群搭建后,启动集群后网络畅通,却无法访问web页面的解决办法问题引入:在学习hadoop搭建完全分布式集群时,已经集群配置了4个核心文件,并且启动所有相关进程,在使用jps命令检查进程,该集群启动完整正常,但是无法访问hdfsweb页面和yarnweb页面,我尝试了ping通所有集群的网络,正常;检查......
  • linux创建线程报错资源受限
    LinuxError:11Resoucetemporarilyunavailable可能涉及到的限制:1、/proc/sys/kernel/threads-max系统允许的最大线程数2、/proc/sys/kernel/pid_max系统最大pid值3、用户资源限制ulimit-u查看当前用户的maxuserprocesses......
  • Linux Kernel最新版本 4.0 正式发布啦
    近日由GregKroah-Hartman宣布了免费开源系统Linux Kernel4.0正式稳定版发布啦!Linux内核正式进入4.0全新内核时代,LinuxKernel4.0最值得关注的特性应该就是内核补丁无需重启系统,该技术基于Ksplice实现。 基本介绍长期支持版内核针对的是嵌入式设备,嵌入式设......
  • Linux Kernel最新版本 4.0 正式发布啦
    近日由GregKroah-Hartman宣布了免费开源系统Linux Kernel4.0正式稳定版发布啦!Linux内核正式进入4.0全新内核时代,LinuxKernel4.0最值得关注的特性应该就是内核补丁无需重启系统,该技术基于Ksplice实现。 基本介绍长期支持版内核针对的是嵌入式设备,嵌入式设......