【Linux】Linux 系统启动流程详解

在这里插入图片描述

1. BIOS/UEFI 阶段

  • 硬件自检(POST)

    • BIOS/UEFI 执行硬件检查(内存、CPU、外设等)。
    • 若硬件异常,通过蜂鸣码或屏幕提示错误。
  • 选择启动设备

    • 按配置顺序(硬盘、U盘、网络等)寻找可引导设备。
    • BIOS:读取磁盘第一个扇区的 MBR(512字节)
    • UEFI:从 ESP 分区(EFI System Partition)加载 .efi 文件(如 grubx64.efi)。

2. 引导加载程序(Bootloader)

常见工具:GRUB2(GNU GRand Unified Bootloader)

GRUB2 工作流程:
  1. Stage 1(MBR 或 ESP 分区)

    • 加载 Stage 1.5(如 core.img),提供基础文件系统驱动。
  2. Stage 2/boot/grub/

    • 加载配置文件 /boot/grub/grub.cfg,显示启动菜单。
    • 用户可选择内核版本或进入救援模式。
  3. 加载内核与 initramfs

    • 将选定的 内核(vmlinuz)initramfs 镜像加载到内存。

关键文件

  • grub.cfg:由 grub-mkconfig 生成(编辑 /etc/default/grub 后需更新)。
  • initramfs-*.img:包含根文件系统挂载前的必要驱动和工具。

3. 内核初始化

  1. 解压与初始化

    • 内核解压并初始化硬件(CPU、内存、设备树等)。
    • 挂载临时根文件系统(initramfs),加载关键驱动(如磁盘控制器、文件系统驱动)。
  2. 切换至真实根文件系统

    • 通过 initramfs 中的脚本(如 /init)挂载真正的根分区(/)。
    • 卸载 initramfs,释放内存。
  3. 启动第一个用户进程

    • 内核启动 PID=1 的进程:
      • 传统系统:/sbin/init(SysV init)
      • 现代系统:systemd

4. 用户空间初始化

(1)SysV init 流程
  • 读取 /etc/inittab
    • 确定默认运行级别(id:3:initdefault:)。
  • 执行 /etc/rc.d/rc.sysinit
    • 初始化网络、挂载文件系统、加载内核模块等。
  • 按运行级别启动服务
    • 运行级别目录(如 /etc/rc3.d/),按 S##Service 顺序启动服务。
(2)systemd 流程
  • 加载默认 Target
    • 默认目标:graphical.target(图形界面)或 multi-user.target(命令行)。
  • 并行启动服务
    • 根据单元(Unit)依赖关系并发启动服务,加速启动。
  • 关键命令
    systemctl get-default        # 查看默认 Target
    systemctl set-default TARGET# 修改默认 Target
    

5. 运行级别(Runlevel)与 Target 对照

SysV 运行级别systemd Target描述
0poweroff.target关机
1rescue.target单用户模式(救援)
3multi-user.target多用户命令行模式
5graphical.target图形界面模式
6reboot.target重启

6. 用户登录

  • 显示管理器(Display Manager)
    • 图形登录:GDM(GNOME)、LightDM 等。
  • 终端登录
    • 启动 getty 进程,提供 TTY 登录界面。
  • 登录后加载 Shell
    • 执行用户配置(/etc/profile~/.bash_profile 等)。

常见故障排查

  1. GRUB 损坏

    • 使用 Live CD 修复或重装 GRUB:
      grub-install /dev/sda
      update-grub
      
  2. 内核启动失败

    • 在 GRUB 菜单中选择旧版本内核启动。
    • 检查 /var/log/boot.logjournalctl -b(systemd 日志)。
  3. 根文件系统挂载失败

    • 在启动参数中添加 init=/bin/bash 进入救援 Shell。
    • 检查 /etc/fstab 或手动挂载根分区。

四、流程图

BIOS/UEFI → Bootloader → Kernel → Init Process → Target/Runlevel → Login

附录

  • 查看启动时间:systemd-analyze
  • 重建 initramfs:mkinitramfs -o /boot/initrd.img-$(uname -r)
  • 修改内核参数:编辑 /etc/default/grubGRUB_CMDLINE_LINUX → 运行 update-grub

通过理解启动流程,可更高效地诊断系统问题或优化启动速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75274.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++封装、继承、多态(虚函数)

目录 1、封装 2、继承 继承方式: (1)公有继承;public (2)保护继承;protected (3)私有继承;private 菱形继承: 同名隐藏? 含义…

蓝桥杯冲刺:一维前缀和

系列文章目录 蓝桥杯系列:一维前缀和 文章目录 系列文章目录前言一、暴力的写法:二、一维前缀和的模板: 具体实现: 三、具体例题:求和 1.题目参考:2.以下是具体代码实现: 总结 前言 上次我介绍…

使用UDP建立连接,会存在什么问题?

使用UDP建立连接,会存在可靠性、有序性、连接状态管理等方面的问题: 1、数据传输不可靠: UDP没有确认和重传机制,发送方发送数据后,不会等待接收方的确认消息。这意味着如果数据在传输过程中丢失,发送方不…

YOLOv5配置训练以及华为昇腾910B推理

参考文章: 保姆式yolov5教程,训练你自己的数据集 - 知乎 Windows 10|11下安装mmyolo-0.5.0版本 - 知乎 Ubuntu22.04安装教程&基于华为Ascend AI处理器的om模型atc转换环境安装_ubuntu安装atc工具-CSDN博客嵌入式AI---在华为昇腾推理自己的yolov5目标…

基于yolov11的汽车损伤检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的汽车损伤检测系统是一种先进的计算机视觉技术,旨在快速准确地识别汽车的各种损伤类型。该系统利用YOLOv11模型的强大性能,实现了对车辆损伤的精确检测与分类。 该系统能够识别的损伤类型包括裂纹(crack&#xff…

[ 3分钟算法 ] | 递归搜索题目 : 合并两个有序链表(递归版)

目录 1. 题目链接: 2. 思路分析: 1. 重复子问题? 2. 具体子问题? 3. 递归出口? 3. 代码实现: 4. 小结: 1. 循环(迭代) vs 递归 2. 递归 vs 深搜 1. 题目链接: 21. 合并…

单元测试原则之——不要模拟值对象 (1)

1. 什么是值对象(Value Objects)? 值对象是指那些不可变且仅通过其属性(数据)来定义的对象。它们通常没有复杂的逻辑或行为,主要用于存储和传递数据。例如: ● 字符串(String) ● 数字(Integer, Double) ● 日期(LocalDate, Instant) ● 自定义的简单数据类(如…

【软件】在Windows和Ubuntu上使用TFTP和NFS

在Windows和Ubuntu上使用TFTP和NFS 零、介绍 最近在玩Linux开发板,在开发的过程中发现需要用到tftp和nfs来帮助传输文件,故此记录如何使用这两种软件。 TFTP(Trivial File Transfer Protocol) :是一种简化的文件传输…

JS判断变量是否为空的方法

在 JavaScript 中,判断变量是否为空需要根据不同的数据类型和具体需求来处理。以下是常见场景的解决方案: 1. 基础判断:null 或 undefined javascript if (value null || value undefined) {// 变量为空 } 或简写为: javasc…

Linux更换挂载nfs迁移数据流程

当前:原nfs(10.16.2.1:/myData)挂载在/myData,新的nfs(10.16.2.2:/myData)未挂载 目标:把旧nfs的数据迁移到新的nfs上,并把新nfs挂载到/myData 步骤: 1、新nfs挂载到一…

深入解析音频:格式、同步及封装容器

物理音频和数字音频 物理音频 定义:物理音频就是声音在自然界中的物理表现形式,本质上是一种机械波,通过空气或其他介质传播。例如,当我们说话、乐器演奏或物体碰撞时,都会产生振动,这些振动会引起周围介…

AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用

1. 引言 在人工智能技术飞速发展的今天,大型语言模型(Large Language Models, LLMs)已成为智能应用开发的核心驱动力。从智能客服到自动化内容生成,LLMs的应用正在深刻改变我们的工作和生活方式。 对于.NET开发者而言,…

导出cad实体所有信息到txt并打开(生成唯一文件名) ——c#cad二次开发

效果如下: 建议在保存时指定编码为UTF-8: using (StreamWriter sw new StreamWriter(filePath, false, Encoding.UTF8)) { // 写入内容 } 最终 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD…

Redis 源码硬核解析系列专题 - 第一篇:Redis源码入门与整体架构

1. 引言 Redis作为一个高性能的内存键值数据库,其源码以简洁高效著称。通过解析Redis源码,我们可以深入理解其单线程模型、事件驱动机制以及模块化设计的精髓。本篇将从Redis的源码目录结构入手,剖析其整体架构,并聚焦启动流程和事件循环的核心实现。 2. Redis源码目录结构…

异步加载+内存分析

异步加载 Resources和AB包的同步加载与异步加载对比代码: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class AsyncLoad : MonoBehaviour {// Start is called before the first frame updatev…

将视频m4s文件转换为mp4格式

将视频m4s文件转换为mp4格式 一般情况:偏大的文件为视频,偏小的文件为音频。 环境要求:下载并安装ffmpeg,并配置好环境变量,如下图: 转换代码: import subprocessdef merge_m4s_to_mp4(vide…

EXCEL报错:无法共享此工作薄,因表包含excel表或xml映射的解决方法

在分享工作薄是,如果出现了“无法共享此工作薄,因表包含excel表或xml映射”的报错,那么有两个原因: 1.包含Excel表格,这个也是相对比较常见的原因。 首先选中表格。如果你不知道表的位置在哪,那么在Excel左…

w2ui 水平滚动移动 虚拟列 数据丢失

https://w2ui.com/web/docs/1.5/w2grid.disableCVS https://github.com/vitmalina/w2ui/issues/1398 解决方案来源 问题现象: 窗口缩小 导致多列 出现水平滚动,滚动时触发本地样式重绘,导致record undefined,从而引发多列报错 解决方案: 使用 disableCVS : true 一次加载到d…

在ensp进行OSPF+RIP+静态网络架构配置

一、实验目的 1.Ospf与RIP的双向引入路由消息 2.Ospf引入静态路由信息 二、实验要求 需求: 路由器可以互相ping通 实验设备: 路由器router7台 使用ensp搭建实验坏境,结构如图所示 三、实验内容 1.配置R1、R2、R3路由器使用Ospf动态路由…

基于mediapipe深度学习和限定半径最近邻分类树算法的人体摔倒检测系统python源码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Mediapipe人体姿态检测原理 4.2 限定半径最近邻分类树算法原理 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 人工智能算法python程序运行环…