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.hqwc.cn/news/325459.html

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

相关文章

c# 学习笔记 - 委托(Delegate)

文章目录 1. 委托1.1 委托概述1.2 委托使用1.3 委托的传播 2. 匿名方法2.1 匿名方法概述2.2 匿名方法 1. 委托 1.1 委托概述 委托简介 委托就是对方法的引用,可以理解为例如整型变量的容器可以存储整形数据,委托就是某种方法的容器,可以用来…

Raft Lab3A

Lab3 需要在 Raft 层上实现一个 fault-tolerant key-value service,满足强一致性,也就是线性一致性 (Linearizable Consistency)。线性一致性保证整个系统看起来好像只有一个副本,其中所有的操作都是原子性的。简单地说,线性一致性…

swing快速入门(三十九)进度对话框

🎁注释很详细,直接上代码 🧧新增内容 🧨1.模拟耗时操作 🧨2.使用计时器更新进度对话框 🎀源码: package swing31_40;import javax.swing.*; import java.awt.event.ActionEvent; import java.aw…

【动态规划】【字符串】132.分割回文串 II

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 字符串 LeetCode132. 分割回文串 II 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。 返回符合要求的 最少分割次数 。 示例 1: 输入&#x…

alpha测试和beta测试Gamma测试的区别是什么?

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢软件测试面试题分享: 1000道软件测试面试题及答案📢软件测试实战项目分享: 纯接口项目-完…

CSS基础笔记-01CSS概述

文章目录 前言CSS是什么CSS的作用CSS语法添加CSS的方法 前言 CSS是什么?有什么作用?怎么编写CSS?怎样添加CSS?本文对CSS的四个方面作了学习并形成学习笔记。 CSS是什么 CSS (Cascading Style Sheets,层叠…

开源网络安全工具

开源工具代表了技术领域的一股动态力量,体现了创新、协作和可访问性。这些工具以透明度和社区驱动的原则开发,允许用户根据自己的独特需求仔细检查、修改和调整解决方案。 在网络安全领域,开源工具是无价的资产,使组织能够增强防…

kubectl常用命令(全局篇)

格式 -o [cmd] -o json|yaml|wide 如:输出json格式 kubectl get ns ingress-nginx -o json 获取基本信息get #查看集群基本信息 kubectl get cs|pods|nodes|ns|svc|rc|deployments kubectl get cs kubectl get pods kubectl get nodes kubectl get ns kubectl g…

P1025 [NOIP2001 提高组] 数的划分———C++(动态规划、DFS)

目录 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 动态规划的解题思路Code运行结果DFSCode运行结果 [NOIP2001 提高组] 数的划分 题目描述 将整数 n n n 分成 k k k 份,且每份不能为空,任意两个方案不相…

面试算法96:字符串交织

题目 输入3个字符串s1、s2和s3,请判断字符串s3能不能由字符串s1和s2交织而成,即字符串s3的所有字符都是字符串s1或s2中的字符,字符串s1和s2中的字符都将出现在字符串s3中且相对位置不变。例如,字符串"aadbbcbcac"可以由…

【Vue3+React18+TS4】1-1 : 课程介绍与学习指南

本书目录:点击进入 一、为什么做这样一门课程? 二、本门课的亮点有哪些? 2.1、轻松驾驭 2.2、体系系统 2.3、高效快捷 2.4、融合贯通 三、课程内容包括哪些? 四、项目实战 《在线考勤系统》 五、课适合哪些同学? 一、为什么做这样一门课程? 近十年内前端…

Android两个APP之间跳转+手机图标修改

APP之间跳转 两个APP之间跳转同样使用Intent进行跳转,将需要跳转的APP都下载到手机中,通过主APP调用需要跳转的APP包名进行跳转。 最好在其中加上try-catch语句,当需要跳转的APP不存在时进行错误抓取。 代码如下: Intent mInten…