细说Linux系统启动流程

linux启动时我们会看到许多启动信息,Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段:内核的引导、运行 init、系统初始化、建立终端 、用户登录系统,下面为大家详细讲解一下Linux系统启动流程。

LINUX启动流程

先通过一张图来简单了解下整个系统启动的流程,整个过程基本可以分为POST–>BIOS–>MBR(GRUB)–>Kernel–>Init–>Runlevel。下面会详细说明每个过程的作用。

Linux开机流程详解:BIOS->MBR->GRUB->KernelLinux开机流程详解:BIOS->MBR->GRUB->Kernel

BIOS

BIOS(Basic Input/Output System),基本输入输出系统,该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后会有一个加电自检过程,这个过程其实就是检查CPU和内存,计算机最基本的组成单元(控制器、运算器和存储器),还会检查其他硬件,若没有异常就开始加载BIOS程序到内存当中。详细的BIOS功能,这边就不说了,BIOS主要的一个功能就是存储了磁盘的启动顺序,BIOS会按照启动顺序去查找第一个磁盘头的MBR信息,并加载和执行MBR中的Bootloader程序,若第一个磁盘不存在MBR,则会继续查找第二个磁盘(PS:启动顺序可以在BIOS的界面中进行设置),一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。

MBR

MBR(Master Boot Record),主引导记录,MBR存储于磁盘的头部,大小为512bytes,其中,446bytes用于存储BootLoader程序,64bytes用于存储分区表信息,最后2bytes用于MBR的有效性检查。

Linux开机流程详解:BIOS->MBR->GRUB->KernelLinux开机流程详解:BIOS->MBR->GRUB->Kernel

GRUB

GRUB(Grand Unified Bootloader),多系统启动程序,其执行过程可分为三个步骤:

Stage1:这个其实就是MBR,它的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5

Stage1_5:该步骤就是为了识别文件系统

Stage2:GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。

PS:实际上这个步骤/boot还没被挂载,GRUB直接识别grub所在磁盘的文件系统,所以实际上应该是/grub/grub.conf文件,该配置文件的信息如下:

grub.conf:
#boot=/dev/sda
default=0 #设定默认启动的title的编号,从0开始
timeout=5 #等待用户选择的超时时间
splashimage=(hd0,0)/boot/grub/splash.xpm.gz #GRUB的背景图片
hiddenmenu #隐藏菜单
title CentOS (2.6.18-194.el5PAE) #内核标题
root (hd0,0) #内核文件所在的设备
kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/ #内核文件路径以及传递给内核的参数
initrd /initrd-2.6.18-194.el5PAE.img #ramdisk文件路径

Kernel

Kernel,内核,Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件,

initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。

Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。

Init

init,初始化,顾名思义,该程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,这个是真正的OS初始化脚本,简单讲下这个脚本的任务(可以去看看实际脚本,看看都做了什么):

  1. 激活udev和selinux;
  2. 根据/etc/sysctl.conf文件,来设定内核参数;
  3. 设定系统时钟;
  4. 装载硬盘映射;
  5. 启用交换分区;
  6. 设置主机名;
  7. 根文件系统检测,并以读写方式重新挂载根文件系统;
  8. 激活RAID和LVM设备;
  9. 启用磁盘配额;
  10. 根据/etc/fstab,检查并挂载其他文件系统;
  11. 清理过期的锁和PID文件

执行完后,根据配置的启动级别,执行对应目录底下的脚本,最后执行/etc/rc.d/rc.local这个脚本,至此,系统启动完成。

Runlevel

runlevel,运行级别,不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种

  1. 0:关机模式
  2. 1:单一用户模式(直接以管理员身份进入)
  3. 2:多用户模式(无网络)
  4. 3:多用户模式(命令行)
  5. 4:保留
  6. 5:多用户模式(图形界面)
  7. 6:重启

在不同的运行级别下,/etc/rc.d/rc这个脚本会分别执行不同目录下的脚本

Run level 0 – /etc/rc.d/rc0.d/
Run level 1 – /etc/rc.d/rc1.d/
Run level 2 – /etc/rc.d/rc2.d/
Run level 3 – /etc/rc.d/rc3.d/
Run level 4 – /etc/rc.d/rc4.d/
Run level 5 – /etc/rc.d/rc5.d/
Run level 6 – /etc/rc.d/rc6.d/

这些目录下的脚本只有K和S开头的文件,K开头的文件为开机需要执行关闭的服务,S开头的文件为开机需要执行开启的服务。

Linux开机流程详解:BIOS->MBR->GRUB->KernelLinux开机流程详解:BIOS->MBR->GRUB->Kernel

原创文章,作者:晴川运维,如若转载,请注明出处:https://baike.qcidc.com/17261.html

(0)
晴川运维晴川运维
上一篇 2025年10月27日
下一篇 2025年10月27日

相关推荐

  • 简单介绍一下kafka常用命令

    Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,本…

    Linux系统 2025年6月8日
  • 数据科学行业常用的Python库

    近几年,Python 在数据科学行业的发展十分迅猛,也正因为如此,对于希望提升应用程序功能的数据科学家和机器学习专家来说,Python通常是首选编程语言。并且Python拥有大量的…

    Linux系统 2025年10月10日
  • Linux下ulimit具体使用方法

    ulimit 是一个计算机命令,用于shell启动进程所占用的资源,可用于修改系统资源限制,本篇文章重点为大家分享一下Linux下ulimit具体使用方法,有需要的小伙伴可以参考一…

    Linux系统 2025年7月3日
  • LVM恢复已删除的逻辑卷具体方法

    LVM中如何恢复已删除的逻辑卷?在执行任何逻辑卷管理相关任务时,如果意外的删除了逻辑卷,则可以使用它的数据还原功能来恢复逻辑卷,下面为大家分享一下LVM中恢复已删除的逻辑卷具体方法…

    Linux系统 2025年10月21日
  • 通过Nginx反向代理实现kibana登录认证

    Kibana 5.5 版后,已不支持认证功能,也就是说,直接打开页面就能管理,想想都不安全,不过官方提供了 X-Pack 认证,但有时间限制。毕竟X-Pack是商业版。 下面我将操…

    Linux系统 2025年10月21日
  • gitlab 数据备份具体实现方法

    搭建个人Gitlab仓库可以更好地维护迭代频繁的代码或者文字方案,为确保重要数据的安全性,定期备份Gitlab数据是非常重要的,本篇文章重点为大家讲解一下gitlab 数据备份具体…

    Linux系统 2025年6月25日
  • Aria2下载提速具体方法

    Aria2 是一个多平台轻量级,支持 HTTP、FTP、BitTorrent 等多协议、多来源的命令行下载工具。Aria2 可以从多个来源、多个协议下载资源,最大的程度上利用了你的…

    Linux系统 2025年10月9日
  • SELinux策略规则查看方法(seinfo和sesearch)详解

    我们知道,当前 SELinux 的默认策略是 targeted,那么这个策略中到底包含有多少个规则呢?使用 seinfo 命令即可查询。命令如下: [root@localhost …

    Linux系统 2025年6月8日
  • 详解grep命令的排除功能

    grep命令是linux中一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 在一个或多个文件中搜素字符串模式,如果字符串模式包括空格,也必须被引用,模式后…

    Linux系统 2025年6月8日
  • zabbix监控redis内存具体方法

    本篇提到的监控环境是有条件的,即默认单机只运行一个redis实例,且默认运行的端口是6379(也可以是其他端口,需要通过sed -i ‘s/6379/你修改的端口/g’ xml模板…

    Linux系统 2025年6月29日

发表回复

登录后才能评论