Linux启动流程分析及无法正常开机的解决办法

linux开机启动流程 操作系统的启动分为两个阶段:引导boot和启动过startup,引导阶段开始于打开电源开关,结束于内核初始化完成和systemd进程成功运行,启动阶段接管了剩余工作,直到操作系统进入可操作状态。 总体可将LINUX开机启动过程分为四个步骤: 1. BIOS上电自检(POST) 2. 引导装载程序(GRUB2) 3. 内核初始化 4. 启动systemd,其为所有进程之父 注意,本文以 ... 阅读详情

第一部分:Linux启动流程一览

一.Linux启动流程一览
1.加载BIOS的硬件信息与自我检测(自检),并根据设置读取第一个可启动的设备
2.读取第一个启动设备内的MBR(主引导记录)的启动引导程序(grub2,spfdisk等程序)
3.根据启动引导程序的设置加载Kernel,Kernel会开始检测硬件与加载驱动程序
4.在硬件驱动成功后,Kernel主动调用systemd程序,并以default.target流程启动
·systemd执行sysinit.target初始化系统及basic.target准备操作系统
·systemd启动multi-user.target下的本机与服务器服务
·systemd执行multi-user.target下的/etc/rc.d/rc/local文件
·systemd执行multi-user.target下的getty.target及登录服务
·systemd执行graphical需要的服务

第二部分:流程详细分析

一.BIOS
启动整个系统首先要做的是让系统去加载BIOS,(Basic Input Output System),并通过BIOS程序去加载CMOS的信息,并且借由CMOS内的设置值取得主机的各项硬件配置,例如CPU与接口设备的沟通频率,启动设备的查找顺序,硬盘的大小与类型,系统时间等

在取得这些消息之后BIOS还会进行自我启动检测,然后开始执行硬件检测的初始化,并设置PnP设备,之后再定义出可启动的设备顺序,接下来就会开始进行启动设备的数据读取了

由于我们系统软件大多放置到硬盘种,所以BIOS会指定启动的设备好让我们可以读取磁盘中的操作系统内核文件。但由于不同的操作系统它的文件系统格式不同,因此我们必须要以一个启动引导程序来处理内核文件加载(load)的问题,因此这个启动引导程序就被称为boot loader,这个boot loader就安装在了启动设备的第一个扇区中,也就是我们一直谈到的MBR(主引导记录)

二.boot loader的功能
loader的最主要功能是要识别操作系统的文件格式,并据以加载内核到内存中去执行。由于不同操作系统的文件格式不一致,因此每种操作系统都有自己的boot loader,用自己的loader才有办法加载内核文件

这里就引申出了一个问题,即多重操作系统—在一台主机上面安装多种不同的操作系统

由上我们可以了解
必须要使用自己的loader才能够加载属于自己的操作系统内核,但是系统的MBR只有一个,那我们怎么才可以在同一台主机上同时安装linux和windos呢?

其实每个文件系统都会保留一块启动扇区(boot sector)提供操作系统安装boot loader,而通常操作系统默认都会安装一份loader到它的根目录所在的文件系统的boot sector上。如果我们在一台主机上面安装Windows和Linux后,该boot sector,boot loader与MBR的相关性有点像下图

在这里插入图片描述

如上图所示,每个操作系统默认会安装一个boot loader到它自己的文件系统中,(图上显示就是每个filesystem的左下角的方块),而在Linux系统安装时,你可以选择将boot loader安装到MBR,也可以选择不安装。如果选择安装到MBR的话,那理论上你在MBR与boot sector都会保存一份boot loader程序。至于Windows安装时,它默认会主动地将MBR与boot sector都装上一份boot loader。所以,你会发现安装多重操作系统时,你的MBR常常会被不同的操作系统的boot loader所覆盖

我们刚刚提到的问题还是没有解决:虽然各个操作系统都可以安装一份boot loader到它的boot sector中,这样操作系统可以通过自己的boot loader来加载自己的内核。问题是系统的MBR只有一个。你要怎么执行boot sector中的loader呢?下面我们来看一下boot loader的主要功能

boot loader的主要功能如下
1.提供选项:用户可以选择不同的启动项,这也是多重引导的重要功能
2.加载内核文件:直接指向可启动的程序区域来启动操作系统
3.转交给其他loader:将启动管理功能转交给其他loader负责

由于具有选项功能,因此我们可以选择不同的内核来启动,而由于具有控制权转交的功能,因此我们可以加载其他boot sector中的loader。不过windows的loader默认不具有控制权转交的功能,因此我们不能使用windows的loader来加载Linux的loader

这也是为什么我们一般要先安装windows再装linux的原因

先安装linux,后安装windows的话,windows的boot loader会覆盖掉MBR中linux 的boot loader,而windows的loader又不能将控制权转交给linux,所以这样就无法启动linux只能启动Windows了

先安装windows,后安装linux的话,linux的loader覆盖掉MBR中windows中的loader,linux的loader可以将控制权转交给windows所以windows和linux都可以正常启动
在这里插入图片描述

三.加载内核检测硬件
当我们借由boot loader的管理而开始读取内核文件之后,接下来Linux就会将内核解压缩到内存当中,并且利用内核的功能,开始测试与驱动各个周边设备,包括存储设备,CPU,网卡,声卡等。此时Linux内核会以自己的功能重新检测一次硬件,而不一定会使用BIOS检测到的硬件信息。这也就是说,内核此时才开始接管BIOS后的工作。那么内核的文件在哪里?一般来说,他会被放置到/boot里面,并且取名为/boot/vmlinuz

四.第一个程序systemd及使用default.target进入启动程序分析
在内核加载完毕,进行完硬件检测与驱动程序加载后,此时你的主机硬件应该已经准备就绪了。此时内核会调用第一个程序那就是systemd,使用pstree查看时会发现systemd的PID为1!

systemd最主要的功能就是准备软件执行的环境,包括系统的主机名,网络设置,语言设置,文件系统格式及其他服务的启动等。所有的操作都会通过systemd的默认启动服务集合,亦即是/etc/systemd/system/default.target来规划

第三部分 Linux启动可能遇到的问题及解决方案

Linux系统无法开机及其解决办法

Linux开机启动流程 Linux开机启动过程(个人理解) 简述Linux启动过程 阅读详情

相关推荐

andriod/linux开机启动流程

本文目录: (一)整体概述 (二)BootLoader (三)Kernel初始化 (四)Init初始化介绍 (a)Init.rc (b)boottanim启动 (c)Surfaceflinger启动 (五)Zygote启动介绍 (a)app_process (b)AppRuntime (c)ZygoteInit (六)SystemServer启动介绍 (a)AMS启动 (b)PackageMS启动 (七)Launcher启动介绍 (a)SystemUI启动 (b)Launc

chbgoon的博客 2710

Linux 之旅 19:启动流程、模块管理与loader

Linux 之旅 19:启动流程、模块管理与loader 图源:pexels Linux启动流程分析 启动流程一览 通常操作系统的启动过程可以分为以下几个步骤: 加载BIOS以获取硬件信息并进行自检,这样就可以获取到第一个可启动设备。 读取并执行第一个可启动设备的MBR内的启动引导程序(grub2、spfdisk等)。 根据启动引导程序的设置加载Kernel,Kernel进行硬件检测并加载需要的驱动和模块。 Kernel启动Systemd进程,并且用default.target模式准备操作系统环境:

梦幻天空 1627

Linux 开机流程详解

对于任何系统, 开机不仅仅是接通电源这么简单的事情, 在这短短的几秒或几十秒内将会发生许多事情, 了解这个完整的流程将是解决任何开机问题或提高开机速度的前提. 接下来, 我们就详细了解一下Linux的开机流程:  1. 加载 BIOS 的硬件信息并进行自我测试,并依据取得第一个可开机的装置; 2. 读取并执行第一个开机装置内 MBR 的 Boot Loader (如 grub, spfdisk

Freeman的专栏 3005

systemd启动流程分析

systemd启动过程 systemd启动时会默认启动default.target配置,并且递归的处理它的依赖关系,一般这个配置为graphical.target 或者 multi-user.target。第一种会启动图形界面,第二种会启动多用户字符模式。下图是关键服务配置的启动依赖: 下面将简单介绍启动中的4个关键步骤: 第一步 systemd 执行默认target 配置,配置文件/etc/systemd/system/default.target,它一般是一个软链接,指向multi-user.targ

程序猿Ricky的日常干货 1万+

Linux下设置字符界面开机启动及系统启动流程介绍

Linux下设置字符界面开机启动及系统启动流程介绍

jks212454的博客 1983

C# HttpClient 实战:3步绕过Cloudflare指纹拦截,获取完整网页内容

本文详细介绍了如何使用C# HttpClient绕过Cloudflare指纹拦截,获取完整网页内容的3步实战方案。通过完美复制浏览器请求头、智能管理Cookie容器以及处理动态挑战页面,开发者可以有效突破Cloudflare的反爬机制,适用于爬虫开发和数据采集项目。

weixin_31856057的博客 320

CentOS 7 修改default.target 不能启动的处理办法

今天不小心写错了 /lib/systemd/system/default.target 文件,导致 centos 一直停留在精度条哪里,无法进入命令行模式。 于是在网上搜索进入单用户模式 http://wenku.baidu.com/view/483a697203d8ce2f01662326.html 修改启动项,在 initrd16 末尾添加 init=/bin/sh, Ctrl+x 启动...

X_cross的专栏 4838

STM32CubeMX的正交编码器encoder

由于最近干活遇到需要获取正交编码的功能,所以返回来研究一下STM32CubeMX的编码器功能,之前也更新过STM32的定时器功能,但是因为之前搞平衡车的正交编码器没有搞清楚原理,就直接用了脉冲输入功能草草了事,现在也算是为之前的年轻买单了,不过看到现有的Encoder说明都比较简单,所以就当是为开发者做贡献了,我研究清楚之后来一篇博客。

ASWaterbenben的博客 1万+

linux内核启动过程

目录一 介绍二 systemd2.1 介绍2.2 配置2.2.1 [Unit]2.2.2 [Install]2.2.3 [Service]2.2.4 其他2.2.5 systemd参数2.3 systemctl参考 一 介绍 linux启动过程涉及很多阶段,如固件初始化,引导程序执行,内核镜像加载和启动,各种守护进程和脚本的运行。每一步都有不同的不同的方法。 开机后,会执行主板上固件(firmwa...

千霜的博客 979

高分系列卫星轨道、传感器参数等信息

遥感卫星数据简介-高分系列

中遥科 3309

国产FPGA开发实战:紫光同创编程软件中的约束文件详解与常见问题

本文详细解析了紫光同创FPGA编程软件中约束文件的关键配置技巧与常见问题。通过基础架构解析、时钟约束实践、物理约束调控及典型问题排查指南,帮助开发者高效掌握国产FPGA开发中的约束文件应用,提升开发效率与设计稳定性。

gin88的博客 907

Linux之系统引导过程及引导修复

系统引导过程:通电 -> BIOS自检 -> 磁盘引导 -> grub2文件引导 -> 内核加载 -> 系统初始化镜像。 下面依次介绍这些引导过程。 2. BIOS自检 BIOS(Basic Input Output System,基本输出输入系统),完整地说应该是ROM-BIOS,是只读存储器基本输入/输出系统的简写,它实际上是被固化到计算机中的一组程序,为计算机提...

weixin_43936250的博客 1985

《遥感大模型生产级实战:从数据到决策的端到端AI工程》系列第一部分:AI遥感工程师的基础设施与工具链-文章 4:传统遥感分析与机器学习基线

本章将系统性地介绍经典遥感分析工作流,从数据预处理到多维度特征工程,再到如何利用经典的机器学习模型(如随机森林、支持向量机)进行监督与非监督学习。我们将通过一个完整的“智慧农业作物分类”项目实战,展示如何利用我们之前构建的数据湖和工具链,从原始数据到最终的分析结果,构建一个性能可靠、可解释性强的基线系统。更重要的是,我们将深入剖析这种传统方法的局限性,从而为后续章节引入遥感大模型的必要性提供强有力的论证。

panshengwu的博客 705

linux-开机启动流程

掌握让某个软件开机自动运行开机不能正常启动,是什么原因,或者那个环节出现了问题防止黑客植入木马,去查询黑客会把木马放到哪些地方?

2501_92004703的博客 3058

0.1 ROCm rocr-libhsakmt实现深度剖析专栏介绍

本专栏深入解析AMD ROCm生态核心组件rocrruntime,从底层硬件交互到上层封装实现。重点剖析libhsakmt驱动层的七大核心模块设计,包括拓扑管理、队列调度、事件同步等关键机制;详解C++接口封装策略与工程实践,如资源管理、多线程优化等。通过"硬件-驱动-应用"全链路技术拆解,帮助开发者深入理解ROCm运行时机制,解决性能调优、调试等实际问题,为HPC/AI应用开发提供底层技术支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 5978

曲线最小二乘拟合基础

介绍曲线拟合的最小二乘原理,介绍了常规最小二乘和正交最小二乘算法,最后介绍了MathNet矩阵运算库的基本操作。

yh523的博客 1303

Linux - 开机启动流程

上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。masterbootrecord主引导记录,位于硬盘的0磁道,0柱面,1扇区,可以看成是硬盘的第一个扇区,MBR里面有一个grub2引导程序,负责启动linux系统。BIOS的配置固化到了主板上面的CMOS芯片上面,BIOS是一个程序会读取CMOS芯片里的参数,了解cpu的配置,时间的配置,...

qq_48391148的博客 7580

使用MATLAB实时处理摄像头图像

本文介绍了如何使用MATLAB进行实时图像处理,包括从摄像头获取图像、对图像进行处理并显示处理结果。我们将演示如何使用MATLAB的图像处理工具箱来实现常见的图像处理任务,如图像增强、边缘检测和物体检测。

XsiJava的博客 920

Linux系统开机启动流程(超详细)

BIOS(Basic Input/Output System)是一种位于计算机系统中的固件程序,它提供了计算机系统的基本输入输出功能。BIOS位于计算机主板上的一个芯片中,负责初始化和配置硬件设备,以及提供底层的系统管理和控制功能。BIOS是电脑启动时加载的第一个软件。它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

qq_51010919的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

linux无法正常开机启动的解决方法

一、忘记root密码的解决方法

_Twinkle的博客 5371

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux开机启动流程有一这篇就够啦!!!

Linux开机启动流程详解一.开机启动流程二级目录三级目录 一.开机启动流程 1.按一下开机按钮到你输入用户名和密码,进入系统的整个过程,都叫开机启动流程--》背后发生的事情 二级目录 三级目录 ...

m0_55724788的博客 7841

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Linux 系统开机启动流程

开始整理一些基础知识和笔记,回顾查漏补缺,这篇主要记录Linux系统开机流程

码农终结者的博客 1824

linux——开机启动流程

linux开机启动流程,主板,硬盘,运行级别,关机命令,MBR,BIOS

m0_53891399的博客 2330

安卓Linux系统异常断电,导致Userdata挂载失败、系统卡在开机动画、系统无法正常启动

【问题描述】:系统启动过程中,或者运行过程中突然断开外部供电(系统异常断电),导致再次供电后系统无法正常启动。现象:1. 安卓系统会卡在开机动画2. 有一部分设备会进入Recovery模式,无法正常开机【适用产品/场景】:智能硬件、移动手机、车载座舱类产品;这类产品一般使用安卓、Linux或者Ubuntu这类非试试系统,这类系统一般使用文件系统的。 安卓Linux系统异常解决,异常断电问题,文件系统损坏,系统无法启动,系统卡在开机动画,系统文件损坏丢失

IT领域原创分享,技术管理分享交流,安卓linux操作系统 2178

运维笔记18 (linux无法开机的修复方法,linux开机流程)

概述: 我们在使用linux的时候如果遇到无法开机了怎么办呢?难道要重装系统了吗?是不是看着那满屏幕的乱码(其实很有用)束手无策,本次博客,我来给大家尽量详尽的介绍几种linux常见错误的修复方法,当然,会修还不是最重要的,如果能理解这其中的原理,就算和我介绍的样例不一样的情况你也一定能自己修复了,所以会一并介绍一下linux的开启启动流程(以RHEL7为标准,也就是systemd为开机第一个程

No_red的博客 1万+

【Linux】Linux开机启动流程

所谓开机启动流程,是指计算机从通电开机到进入登录界面的过程。熟悉开机启动流程,了解其背后的原理,可以更好的深入了解Linux的核心工作原理。 1、加载BIOS BIOS(basic input output system),直译为“基本输入输出系统”。 bios信息极为重要,包含了CPU、设备启动顺序、硬盘、内存、时钟等各种计算机重要属性的基本信息。 bios一般搭载在计算机的主板上,一般可以按F12、FN等快捷键进入bios管理系统,各个硬件品牌可能有所不同。 通过读取bios信息,计算机选择读取存放了L

qq_48598380的博客 1653
上一篇: 虚拟化介绍及KVM,XEM虚拟化的区别
下一篇: 网络基础面试二十题
flat0809
博客等级 码龄9年 45粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值