4-3 Linux启动流程

2023-05-16

文章目录

  • 前言
  • 经典启动流程
    • 1 按下电源
    • 2 开机自检(BIOS)
    • 3 MBR引导
    • 4 GRUB菜单
    • 5 加载内核
    • 6 运行init进程
    • 7 读取/etc/inittab
    • 8 读取/etc/rc.sysinit初始化系统
    • 9 运行/etc/rc.d/rcN.d/脚本
    • 10 /etc/rc.local
    • 11 登录页面login
  • centos7与centos6

前言

Linux系统的启动过程并不是大家想象中的那么简单,其过程可以分为多个阶段:

通电 –> BIOS –> 主引导记录(MBR)–> grub引导 –> 加载内核 –> init进程 –> 读取/etc/inittab(运行级别)–> /etc/init.d –> 用户登录 –> Login shell



经典启动流程

以centos6为例,具体启动过程如下图所示:

在这里插入图片描述

1 按下电源

这是第一步。默认情况下,也只需这一步,服务器会按照预定程序完成后续开机工作。

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。

操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。


2 开机自检(BIOS)

通电后,服务器开机自检,包括硬盘内存等硬件设备。最后按照BIOS中设置的启动设备(通常是硬盘)来启动。

UEFI是新的主板引导模式,被看做是BIOS的继任者。


3 MBR引导

众所周知,硬盘上第 0 磁道第一个扇区被称为 MBR,也就是 Master Boot Record,即主引导记录,它的大小是 512 字节,存放了预启动信息、分区表信息。

系统找到 BIOS 所指定的硬盘的 MBR 后,就会将其复制到 0x7c00 地址所在的物理内存中。其实被复制到物理内存的内容就是 “引导加载器(Boot Loader)”,而具体到服务器,那就是下一步的grub了。

GPT是另一种分区表(数据存储结构),比MBR能保存更多分区等。注意,主板引导与磁盘分区表必须一致:

BIOS -> MBR
UEFI -> GPT


4 GRUB菜单

grub是一个小程序,负责引导加载系统。开机时会显示普通模式(默认)和rescue救援模式。通俗讲,有双系统时选择进入windows还是linux。

grub2配置文件位于/boot/grub2/grub.cfg中,由grub2 mkconfig使用/etc/grub.d中的模板和/etc/default/grub中的设置自动生成。


5 加载内核

grub选择操作系统后,os接管硬件,便加载 /boot 目录下的内核文件到内存里。boot目录内核文件包括:

$ ls /boot  
config-3.2.0-3-amd64
config-3.2.0-4-amd64
grub
initrd.img-3.2.0-3-amd64
initrd.img-3.2.0-4-amd64
System.map-3.2.0-3-amd64
System.map-3.2.0-4-amd64
vmlinuz-3.2.0-3-amd64
vmlinuz-3.2.0-4-amd64

6 运行init进程

init进程是系统所有进程的起点,它的进程号是1。init进程是所有进程的发起者和控制者,即所有其它进程的父进程,所以永远不会被终止。

如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。


7 读取/etc/inittab

init的第二大作用,就是读取/etc/inittab,使得在进入某个特定的运行级别(Runlevel)时启动相应的程序。

Linux系统有7个运行级别(runlevel):

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

8 读取/etc/rc.sysinit初始化系统

rc.sysinit是每一个运行级别都要首先运行的重要脚本,根据该脚本文件执行相应的系统初始化。

它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块,设置键盘、字体, 装载模块,设置网络等等以及其它一些需要优先执行任务。


9 运行/etc/rc.d/rcN.d/脚本

当运行级别为5,则系统会加载位置/etc/rc.d/rc5.d目录里的所有开机脚本。以此类推,不同运行级别运行不同目录的脚本。

/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些连接文件,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。

rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。


10 /etc/rc.local

执行用户自定义的开机启动程序,/etc/rc.local是一个shell脚本文件,将其赋予可执行文件,才能发挥作用。

zookeeper注册中心服务器开机自启动:

echo '/apps/zookeeper/bin/zkServer.sh start' >> /etc/rc.local
chmod +x /etc/rc.d/rc.local

11 登录页面login

系统运行mingetty程序显示登录页面,再执行/bin/login程序,用户输入账号密码信息将作为参数传给login程序来验证身份。

对于运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。

对于运行级别为3的命令行方式用户来说,显示的是字符登录界面。当然,两种运行级别都可以通过ssh进行远程登录。



centos7与centos6

centos7与centos6启动略有不同,最大区别为centos7的系统第一个进程pid1为systemd程序,而centos6是init程序。

正如经典启动流程所示,从运行init进程往后红色部分为cento6特有。往前开机顺序是相似的。

两者开机启动流程的具体过程如下图:

在这里插入图片描述



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4-3 Linux启动流程 的相关文章

  • 嵌入式实时操作系统(RTOS)

    一 项目准备工作 1 创建一个标准库项目 这里不用很麻烦 xff0c 项目能跑就行 xff0c 后面要以这个项目为基础移植 2 下载ucOS 源码 ucos 源码 百度网盘链接 xff1a 提取码 xff1a 1234 xff08 STM3
  • ROS环境安装与配置

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 实验环境一 ROS话题二 ROS消息三 C 43 43 编码实现小海龟圆周运动 提示 xff1a 以下是本篇文章正文内容 xff
  • solvepnp参数获取

    1 上参数 xff1a solvePnP 具体参数 xff1a objectPoints xff1a 特征点的世界坐标 xff08 3d点 xff09 xff0c 坐标值需为float型 xff0c 不能为double型 xff0c 可以为
  • 磁力计椭球拟合使用篇 IMU 加速度、电子罗盘校准

    磁力计校准椭球拟合使用篇 xff01 xff01 下方蓝色函数链接 xff01 xff01 matlab 椭球拟合函数链接 串口打印磁力计数据 xff0c 可以选择原始数据不进行任何缩放 xff08 前提是各轴向分辨率一致 xff09 sp
  • 数据结构与算法 — 希尔排序 和 快速排序

    目录 一 希尔排序 1 希尔排序的介绍 1 希尔排序的历史背景 2 插入排序的问题 3 希尔排序的做法 4 选择合适的增量 2 希尔排序的实现 3 希尔排序的效率 1 希尔排序的效率 2 Hibbard 增量序列 3 Sedgewick增量
  • MCU与MPU的区别

    CPU xff08 Central Processing Unit xff0c 中央处理器 xff09 发展出来三个分枝 xff0c 一个是DSP xff08 Digital Signal Processing Processor xff0
  • vue 自定义指令

    指令包含有四个生命周期的钩子函数 xff1a 可以局部注册 xff0c 也可以全局注册 注册一个全局自定义指令 96 v focus 96 Vue directive 39 focus 39 当被绑定的元素插入到 DOM 中时 insert
  • Ubuntu16.04下安装编译gcc10.1.0

    我自己这里有 xff0c 不过我要升级一下 xff0c 参考的这个网站 GCC编译器下载和安装教程 xff08 针对Linux发行版 xff09 首先确定一下自己当前使用的linux是否装有编译器 gcc version 可以看到我这里装了
  • Docker指令报错的解决方法:Got permission denied while trying to connect to the Docker daemon socket at unix:/

    安装完docker xff0c 运行指令时 xff0c 出现了以下错误提示 xff1a Got permission denied while trying to connect to the Docker daemon socket at
  • Ubuntu18.04上安装ROS的详细教程

    镜像下载 域名解析 时间同步请点击 阿里巴巴开源镜像站 前言 最近 xff0c 学习了胡老师的 ROS入门21讲 xff0c 在Ubuntu18 04上安装ROS过程中遇到了一些问题 xff0c 解决这些问题耗费了大半天 xff0c 故通过
  • ubuntu apt-get install xxx报错无法下载的解决方法

    镜像下载 域名解析 时间同步请点击 阿里云开源镜像站 由于我使用ubuntu20 04的火狐浏览器时 xff0c 总是播放不了视频 说是要下载Flash xff0c 但是我顺着网址进去 xff0c 发现并没有linux版本的 xff08 也
  • 【xshell连接不上ubuntu】

    如果xshell连不上ubuntu xff0c 不妨讲虚拟机ubuntu的虚拟网络编辑器还原默认设置 虚拟机 xff1e 编辑 xff1e 虚拟网络编辑器 xff1e 更改设置 xff1e 还原默认设置 记得改完连接xshell时别忘了更改
  • Linux系统上QQ闪退的问题

    Linux版本的QQ在登录后会自动退出登录 通过许多博客和多次实践发现 删除配置文件 config里面关于自己qq的文件夹 xff0c 具体命令如下 rm rf config tencent qq 自己的qq号 例如rm rf config
  • Linux离线安装Kafka(超级精简亲测安装)

    一 环境和安装包准备 首先安装jdk环境 xff0c 通过yum一键安装jdk java version 到官网下载离线安装包 zookeeper https zookeeper apache org releases html kafka
  • linux离线安装Mysql(详细步骤,亲测安装)

    链接 https pan baidu com s 1KtlYGHzKXjaXFqHP2easrQ pwd 61 k4u5 提取码 k4u5 复制这段内容后打开百度网盘手机App xff0c 操作更方便哦 tar xvf mysql 5 7
  • 【Linux面试常用问题】会了这些,去工作完全不用担心了

    Linux操作系统 如何统计一个文件占用大小 如何动态的查看日志文件 Tail f filepath 通常使用的查看日志命令是什么 说出几个常用的linux命令 1 你之前在公司使用linux命令做什么 我们公司之前测试系统搭建在linux
  • zabbix一键部署(亲测实用)

    链接 xff1a https pan baidu com s 1 NPKGDkUPktoGhV1DrrF8A pwd 61 g9p1 提取码 xff1a g9p1 下载安装包 xff0c 按照文件里的操作步骤进行部署 xff0c 非常实用
  • Socket编程-应用编程接口(API)--套接字(及其函数介绍)

    文章目录 Socket编程 应用编程接口 xff08 API xff09 套接字 网络程序设计接口 应用编程接口 API 几种典型的应用编程接口 Socket编程 Socket API概述 Socket API 套接字就像一个插销和插座 例
  • 10-1 基于Prometheus联邦收集Node指标数据

    文章目录 前言环境准备安装prometheus安装node exporterPrometheus配置联邦节点1配置联邦节点2配置主节点配置 前言 在生产环境中 xff0c 如果使用一个prometheus的话 xff0c 随着监控数据的持续
  • 横向控制 | 路径信息及可视化

    横向控制 路径信息及可视化 1 全局路径的读取2 局部路径和历史路径的更新3 路径可视化 Github链接 xff1a https github com chanchanchan97 ROS 1 全局路径的读取 waypoint loade

随机推荐

  • 10-2 Prometheus本地存储机制,单机远端存储

    文章目录 前言本地存储机制存储块blockblock文件block特性 本地存储远端存储单机部署Victoria metricsPrometheus配置Grafana模板 前言 Prometheus有着非常高效的时间序列数据存储方法 xff
  • 10-3 Prometheus远端存储VictoriaMetrics集群版

    文章目录 前言VictoriaMetrics集群版组件VictoriaMetrics集群版部署vmstorage服务vminsert服务vmselect服务 Prometheus配置Grafana配置 前言 Victoria Metrics
  • 10-4 Skywalking介绍,二进制与docker部署Skywalking,Skywalking收集Java博客案例,Skywalking面板介绍

    文章目录 简介Skywalking介绍分布式链路追踪APM系统Skywalking组件 Skywalking部署二进制部署安装Elasticsearch安装Skywalking docker部署 Skywalking收集Java博客案例安装
  • 10-5 Skywalking基于nginx+jenkins服务的全链路数据收集

    文章目录 前言Jenkins案例安装Jenkins安装Skywalking Java Agent Nginx案例安装OpenResty安装Skywalking Nginx Lua全链路追踪 前言 在上一节 10 4 Skywalking介绍
  • 1-1 开源许可证GPL, BSD, MIT, Mozilla, Apache, LGPL的介绍

    文章目录 前言开源许可证由来开源许可证类型开源许可证介绍GPL协议BSD协议MIT协议Mozilla许可Apache协议LGPL开源协议 前言 开源许可证 xff08 Open source licenses xff09 xff0c 广义来
  • 1-2 VMware安装Rocky9.0和Ubuntu22.04系统

    文章目录 前言下载链接VMware使用安装Rocky9 0系统Rocky初始化 安装Ubuntu22 04系统Ubuntu初始化 VMware快照 前言 VMware虚拟机软件是一个 虚拟PC 软件 xff0c 它使你可以在一台机器上同时运
  • 1-3 Linux ifconfig 命令使用

    文章目录 ifconfig 查看状态ifconfig 常用命令 ifconfig是linux中用于显示或配置网络设备 xff08 网络接口卡 xff09 的命令 xff0c 英文全称是network interfaces configuri
  • 1-4 Linux 标准目录结构FHS

    文章目录 前言标准目录结构 根目录 bin boot dev etc home lib media mnt opt run sbin srv tmp proc sys var lost 43 found root usr 前言 Linux操
  • 1-5 Linux学习路线规划

    文章目录 前言第1章 Linux简介第2章 Linux安装第3章 Linux文件和目录管理第4章 Linux打包 xff08 归档 xff09 和压缩第5章 Vim文本编辑器第6章 Linux文本处理 xff08 Linux三剑客 xff0
  • Shell常用实例,查看IP,创建用户,安装应用等。

    文章目录 前言查看IPnet tools与iproute2全部已激活连接的IP查看连接互联网的IP 创建用户批量创建用户 安装应用一个脚本搞定一键安装一键还原 前言 Shell 是一个用 C 语言编写的程序 xff0c 它是用户使用 Lin
  • ROS | 机器人操作系统简介

    ROS 机器人操作系统简介 1 ROS基本概念2 ROS架构2 1 OS层2 2 中间层2 3 应用层 3 通信机制4 计算图4 1 节点 xff08 Node xff09 4 2 节点管理器 xff08 Master xff09 4 3
  • 3-1 图文并茂说明raid0,raid1, raid10, raid01, raid5等原理

    文章目录 简介RAID类型RAID0RAID1RAID5RAID6RAID10RAID01 RAID对比图 简介 一 RAID 是什么 xff1f RAID xff08 Redundant Array of Independent Disk
  • 3-2至3-8 创建一个至少有两个PV组成的大小为20G的名为testvg的VG

    文章目录 1 在vmware添加多块20G的硬盘 xff0c 并创建分区2 创建一个至少有两个PV组成的大小为20G的名为testvg的VG xff0c 要求PE大小为16M xff0c 而后在卷组中创建大小为5G的逻辑卷testlv 挂载
  • 3-9 静态配置网卡IP,centos/ubuntu实现

    文章目录 centos配置IPubuntu配置IP centos配置IP span class token comment 显示当前IP地址 xff0c 为DHCP获取 span span class token function host
  • 3-10 图文并茂解释TCP/IP 3次握手4次断开

    文章目录 前言TCP报文首部TCP数据传输3次握手4次断开 前言 TCP IP传输协议 xff0c 即传输控制 网络协议 xff0c 也叫作网络通讯协议 它是在网络的使用中的最基本的通信协议 TCP IP传输协议对互联网中各部分进行通信的标
  • 3-11 网卡绑定bond0的实现

    文章目录 前言centos网卡绑定ubuntu网卡绑定故障测试 前言 网卡绑定bond又称多网卡 bonding xff0c 是将多块网卡绑定同一IP地址对外提供服务 xff0c 可以实现高可用或者负载均衡 然而直接给两块网卡设置同一IP地
  • 3-12 使用expect登陆远程主机并安装应用

    文章目录 前言一键脚本脚本验证免密登陆安装mysql安装apache退出 前言 实现免密登陆脚本 expect登陆远程主机 xff0c 将生成的密钥写入到目标主机 expect测试远程登陆 1 xff09 通过shift读取脚本参数 2 x
  • 4-1 定时任务的示例10个

    文章目录 前言基本命令与格式示例 前言 Linux crontab 是用来定期执行程序的命令 当安装完成操作系统之后 xff0c 默认都已经安装 xff0c 并启动此任务调度命令 crond 命令每分钟会定期检查是否有要执行的工作 xff0
  • 4-2 Linux进程和内存概念

    文章目录 前言进程状态进程优先级内存模型进程内存关系 前言 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源 一般来说 xff0c Linux系统会在进程之间共享程序代码和系统函数库 xff0c 所以在任何时刻内存中都
  • 4-3 Linux启动流程

    文章目录 前言经典启动流程1 按下电源2 开机自检 BIOS 3 MBR引导4 GRUB菜单5 加载内核6 运行init进程7 读取 etc inittab8 读取 etc rc sysinit初始化系统9 运行 etc rc d rcN