LINUX基础培训之开机启动过程

前言、本章学习目标 

  1. 掌握系统启动、引导过程 ·
  2. 了解grub.conf的参数设置 ·
  3. 熟悉系统运行级别 ·
  4. 了解加载内核过程

一、LINUX启动引导过程

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

1.开机自检

服务器主机开机以后,将根据主板BIOS中的设置对CPU 、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制剖权,大多时候会移交给本机硬盘。

2.MBR引导

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB)。

3.GRUB菜单

对于Linux操作系统来说,GRUB是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux内核文件,然后将系统控制权转交给内核。需要注意的是,Centos 7 采用的是 GRUB2启动引导器。

4.加载内核

将内核与镜像加载到内存中

5.init初始化

开启pid=1的进程,进程就是init加载的程序是systemd

二、主引导目录(MBR)

  MBR 也就是主引导记录,位于硬盘的 0 磁道、0 柱面、1 扇区中,主要记录了启动引导程序和磁盘的分区表,最主要的功能就是存储启动引导程序;主要有以下作用:

1.加载操作系统的内核

  这是启动引导程序最主要的功能。 拥有一个可以让用户选择的菜单,来选择到底启动哪个系统。大家如果在服务器上安装过双 Windows 系统,就应该见过类似的选择菜单,不过这个选择菜单是由 Windows 的启动引导程序提供的,而不是 GRUB。

2.调用其他的启动引导程序

  这是多系统启动的关键。不过需要注意的是,Windows 的启动引导程序不能调用 Linux 的启动引导程序,所以我们一般建议先安装 Windows,后安装 Linux,是为了将 Linux 的启动引导程序安装到 MBR 中,覆盖 Windows 的启动引导程序。

三、开始引导过程(GRUB)

1、定义

GNU GRUB(简称“GRUB”)是GRand Unified Bootloader的缩写,是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。它是一个多重操作系统启动管理器,用来引导不同系统,如windows,linux。

2、引导过程

MBR是磁盘的第一个扇区,大小不能超过512KB,所以引导程序只能分成两步来执行:

1.引导加载程序的最小主程序(必须安装在MBR中),并没有安装加载程序的相关设置文件。 2.引导加载程序的所有设置文件和相关参数,一般在/boot下。 即加载引导程序可以安装在MBR中或超级块中,但是Windows系统则默认强制会同时安装在MBR和超级块中,所以在安装多重系统时,先装Windows再装Linux。

3、超级块

文件系统中第一个块被称为超级块。这个块存放文件系统本身的结构信息。比如,超级块记录了每个区域的大小,超级块也存放未被使用的磁盘块的信息。

/sbin/grub-install 命令可用来修复MBR的损坏。

四、内核加载

GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。 Linux 的内核存在 /boot 目录中,分别是:

config  #内核的配置文件,内核编译时选择的功能与模块

efi        #可扩展固件接口,为英特尔为全新PC固件的体系结构、接口和服务提出的建议标准

grub    #启动引导程GTUB的数据目录

initramfe.img#虚拟文件系统(CentOS 6.x 中用initramfs替代了initrd,但功能是一样的)

symvers.gz  #模块符号信息

System.map #内核功能和内存地址的对应列表

vmlinuz  #用于启动的Linux内核。这个文件是一个压缩的内核镜像

如下图所示,一台启动系统/boot目录下所有文件内容

五、init初始化

在内核加载完毕,并完成硬件检测与驱动程序加载后,此时主机硬件已经准备完毕,内核会主动呼叫第一个进程,也就是 /sbin/init,此配置文件最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。

1、系统运行级别

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

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

2、服务开机自启动方式 

LINUX设置服务开机自启动有三种方式:

方式一:把服务启动命令添加到/etc/rc.local中

例如添加一个redis服务启动脚本:

注意:添加完需要对rc.local赋权执行权限

chmod +x /etc/rc.local

方式二:在/etc/init.d目录中直接添加启动脚本

/etc/rc.d/init.d(链接到/etc/init.d)下有很多的文件,每个文件都是可以看到内容的,都是一些shell脚本或者系统服务文件。Linux开机的时候,会加载运行/etc/init.d目录下的程序,因此我们可以把想要自动运行的脚本放到这个目录下即可。



注意:同样添加完后务必设置文件的可执行权限 chmod +x filename

方式三:将服务制作到LINUX系统服务中,并设置成开机启动

redhat7以上可以用systemd来管理服务,具体操作如下:

以nginx服务为例,添加nginx.service文件到/etc/sysntemd/system目录下,写入服务启动配置内容

然后设置服务的开机自启动

systemctl enable nginx

systemctl start  nginx

六、本章实验

1、单用户模式中修改root密码

实验操作步骤:

重启操作系统,进入到内核引导界面时,按以下步骤操作
(1)按e编辑grub菜单 
(2)选择linux16那行,追加rd.break 
(3)ctrl+x引导 
(4)#mount  -o  remount,rw  /sysroot 
(5)#chroot  /sysroot 
(6)#passwd  root 
(7)#touch  /.autorelabel 
(8)#exit
(9)#exit


2、模拟grub引导故障修复

实验操作步骤:

先模拟/boot/grub2/grub.cfg破坏(删除里面文件内容)
然后按以下步骤恢复:
(1)虚拟机挂载光盘镜像
(2)BIOS从光盘启动
(3)进入急救模式,加载光盘镜像,切换到系统根环境
          sh-4.2# chroot /mnt/ sys image
(4)重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区,如果有多个分区可省略
          bash-4.2# grub2-install /dev/ sda
(5)重新构建GRUB菜单的配置文件
          bash-4.2# grub2-mkconfig -0 /boot/grub2/grub.cfg
          退出chroot环境,并重启
          bash-4.2# exit
          sh-4.2# reboot

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

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

相关文章

5.SolidWorks的学习心法

学习计算机辅助设计软件(CAD-Computer Aided Design)的很重要的一点,就是要想清楚计算机辅助设计软件的本质和作用是什么。这一点非常重要,如果没有想清楚这一点,总会感觉得没有软件就做不了设计了,甚至是没…

LeetCode 2610. 转换二维数组【数组,哈希表】1373

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

Spring Beans的魔法门:解密多种配置方式【beans 四】

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Spring Beans的魔法门:解密多种配置方式【beans 四】 前言XML配置方式1. 声明和配置Bean:2. 构造函数注入:3. 导入其他配置文件: java注解方式1. 使用Co…

算法训练营Day35

#Java #动态规划 开源学习资料 Feeling and experiences: 不同路径:力扣题目链接 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右…

MyBatisPlus学习三:Service接口、代码生成器

学习教程 黑马程序员最新MybatisPlus全套视频教程,4小时快速精通mybatis-plus框架 Service接口 简介 在MyBatis-Plus框架中,Service接口的作用是为实体类提供一系列的通用CRUD(增删改查)操作方法。通常情况下,Servi…

PyTorch 入门学习数据操作之创建

简介 在深度学习中,我们通常会频繁地对数据进行操作;要操作一般就需要先创建。 官方介绍 The torch package contains data structures for multi-dimensional tensors and defines mathematical operations over these tensors. Additionally, it pr…

k8s-二进制部署

ETCD master节点 制作证书 1、下载证书工具 [rootmaster ~]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 --no-check-certificate [rootmaster ~]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 --no-check-certificate [rootmaster ~]# wget https://…

SpringMVC通用后台管理系统源码

整体的SSM后台管理框架功能已经初具雏形,前端界面风格采用了结构简单、 性能优良、页面美观大的Layui页面展示框架 数据库支持了SQLserver,只需修改配置文件即可实现数据库之间的转换。 系统工具中加入了定时任务管理和cron生成器,轻松实现系统调度问…

【源码解析】Apache RocketMQ发送消息源码

send message源码解析 引入 send message方法作为我们经常使用的方法,平时我们很难去关注他底层到底做了什么。大部分人只知道通过send message方法可以将消息发送到broker,然后供消费者进行消费。其实不然,消息从客户端发送到broker&#x…

ssm基于vue.js的购物商场的设计与实现论文

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装购物商场软件来发挥其高效地信息处理的作用,可以…

Spring Cloud Bus 相关问题及答案(2024)

1、什么是 Spring Cloud Bus? Spring Cloud Bus 是建立在 Spring Cloud 的基础之上,用于处理微服务架构中各服务实例间消息通信的框架。它与 Spring Cloud Config 结合使用时,可以提供一种动态刷新配置的能力,不需要重启服务实例…

阿里云服务器配置选择推荐方案

阿里云服务器配置怎么选择合适?CPU内存、公网带宽和ECS实例规格怎么选择合适?阿里云服务器网aliyunfuwuqi.com建议根据实际使用场景选择,例如企业网站后台、自建数据库、企业OA、ERP等办公系统、线下IDC直接映射、高性能计算和大游戏并发&…

cissp 第10章 : 物理安全要求

10.1 站点与设施设计的安全原则 物理控制是安全防护的第一条防线,而人员是最后一道防线。 10.1.1 安全设施计划 安全设施计划通过关键路径分析完成。 关键路径分析用于找出关键应用、流程、运营以及所有必要支撑元索间的关系。 技术融合指的是各种技术、解决方案…

性能优化-OpenMP基础教程(三)

本文主要介绍OpenMP并行编程的环境变量和实战、主要对比理解嵌套并行的效果。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 &…

书生·浦语大模型全链路开源体系 学习笔记 第一课

背景 大模型是发展人工通用人工智能的一个重要途径,能够解决多种任务和多种模态,展示了一个更面向更高阶的智能的潜在途径。大模型的发展历程是从专用模型到通用模型的过程,从语音识别、图像识别、人脸识别等专用模型,到通用的大…

Java8内置四大核心函数式接口

先来看几个例子,主要练习策略模式: 用策略模式的做法 定义个接口 其实像这样的接口并不需要我们自己创建 java8推出的Lambda表达式主要就是为了简化开发,而Lambda表达式 的应用主要是针对与函数式接口,自然也推出了对应的一些接口 /*** Java8 内置的四大核心函数式接口** C…

找城市(100%用例)C卷 (JavaPythonC++Node.jsswift)

一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要么通过其它城市中转相连(可中转一次或多次)。城市与城市之间的道路 都不会成环 。 当切断通往某个城市 i 的所有道路后,地图上将分为多个连通的城市群,设该城市 i 的聚集度为 DP i (Degree of…

7-2 jmu-java-m02-使用二维数组存储多元线性方程组 --笔记篇

题目 题面 可以使用二维数组存储来存储线性方程组的系数与常数。比如,对于如下3元线性方程组 3xyz1 6x2yz-1 -2x2yz7 可以使用二位数组存储 2 1 1 1 6 2 1 -1 -2 2 1 7 编写一个程序可以存储n元线性方程组 输入格式: 整数n,代表n元 n行、每行n1列线性方…

【C++】STL 算法 ③ ( 函数对象中存储状态 | 函数对象作为参数传递时值传递问题 | for_each 算法的 函数对象 参数是值传递 )

文章目录 一、函数对象中存储状态1、函数对象中存储状态简介2、示例分析 二、函数对象作为参数传递时值传递问题1、for_each 算法的 函数对象 参数是值传递2、代码示例 - for_each 函数的 函数对象 参数在外部不保留状态3、代码示例 - for_each 函数的 函数对象 返回值 一、函数…

权威认可!甄知科技猪齿鱼产品荣获信创产品评估证书

近日,依据《信息技术应用创新产品评估规范 第1部分:应用软件》(T/SSIA 2001-2022),经过严格评估,甄知科技旗下自主研发的猪齿鱼数智化开发管理平台 V2.0.0,通过信创测试认证,获得上海…