【Linux】引导与服务

一、系统引导过程

系统引导过程:
                        开机自检(BIOS) ----> MBR ----> GRUB ----> 加载内核 ----> 启动程序

1.1 开机自检

(1)开机自检:硬件启动POST(BIOS的一个主要功能)来加电检测硬件

(2)指引硬件:主板的ROM BIOS指引硬件去找操作系统(根据BIOS中设置的启动顺序去找操作系统)

顺序:硬盘、移动设备(u盘、光驱)、网卡

BIOS功能集成在主板上

1.2 MBR引导

MBR(跟硬盘有关) 512字节

存在于硬盘第一个扇区中(开机引导程序 446字节的GRUB引导文件,后64字节为分区表), 运行放在MBR扇区中的GRUB引导程序。

1.3 GRUB菜单

GRUB

主要作用:引导硬件去找到内核即操作系统(根据/boot/grub2/grub.cfg找到内核文件)

注意centos6和centos7的区别,centos6使用grubcentos7使用grub2

1.4 加载内核

内核是操作系统的核心

kernel 加载内核,把内核放入内存中运行

1.5 启动程序

centos7启动的第一个程序 systemd(守护进程)

centos6启动的第一个程序 init

init:启动其他程序时,是串行启动(一个一个启动)

systemd:启动其他程序时,是并行启动(同时启动)


​​​​​​​

二、 解决系统启动中的故障

2.1 多块磁盘处理MBR分区故障

                                                MBR分区故障( Centos7系统演示)        

                             方法:作好备份文件,进入急救模式,从备份文件中恢复。


1. 添加硬盘

2.为新磁盘做分区


3. 格式化分区,并且挂载


4. 备份MBR文件


5. 模拟破坏原MBR


6. 重启虚拟机发现进入以下界面

完成以上步骤 输入reboot重启即可

2.2 多台设备处理MBR分区故障 

                    备份mbr引导扇区到其他磁盘,引导镜像急救模式进行mbr扇区恢复


1. 先备份一份MBR文件到opt下


2. 使用scp命令发送给第二台虚拟机


3. 模拟第一台虚拟机MBR故障


4. 重新开启虚拟机进入急救模式


5. 将IP地址临时修改为与第二台虚拟机为一个网段下


6. 使用scp命令传输备份文件MBR.bak


7. 将损坏的/dev/sda文件用备份文件MBR.bak恢复


8. 重启虚拟机即可

2.3 GRUB引导故障 

                                       GRUB引导故障 MBR中的GRUB程序被破坏

                                使备份grub.cfg文件丢失,进入急救模式后更改环境


1. 将/boot/grub2/grub.cfg转移至/mnt


2. 重启虚拟机,见到如下界面时,立马按下ESC按键


3. 重新配置grub.cfg文件


4. 重启虚拟机即可

2.4 遗忘密码

情景一:有光驱的情况下

                                                进入急救模式后在光驱中修改密码


1. 进入急救模式


2. 输入修改密码的命令即可

passwd ***    #新密码exit    #退出当前系统reboot    #重启操作系统

情景二 :没有光驱的情况下

1. 开机时在如下界面按'e'键进入编辑模式


2. 将光标移至此处

输入rd.break console=tty0 后​​​​​​​,按' ctrl + x '启动


 

3. 重新挂载并修改权限


4. 切换根目录,修改密码

三、 服务

什么是服务程序?

1.本地服务程序,管理本机

2.网络服务程序
为其他设备提供服务的程序,服务程序启动后,会持续监听端口。

systemd:管家式的程序,管理系统中其他程序。
为了方便管理,将系统中的程序按照一定的规则进行分类。

3.1 运行级别所对应的Systemd目标

运行级别systemd的目标说明
init 0target关机
init 1rescue.target单用户模式,不需要密码,多用于系统维护
init 2Multi-user.target用户定义/域特定运行级别,默认等同于3
init 3Multi-user.target字符界面的完整多用户模式,大多服务器主机运行在此级别
init 4Multi-user.target用户定义/域特定运行级别,默认等同于3
init 5Graphical.target图形界面的多用户模式
init 6Reboot.target重新启动
通过 ‘ runlevel ’ 命令可以查看在此之前使用的运行级别以及现在所处的运行级别

3.2 systemd单元类型

单元类型扩展名说明
Service.service描述一个系统服务
Socket.socket描述一个进程间通信的套接字
Device.device描述一个内核是别的设备文件
Mount.mount描述一个文件系统的挂载点
Automount.automount描述一个文件系统的自动挂载点
Swap.swap描述一个内存交换设备或交换文件
Path.path描述一个文件系统中文件或目录
Timer.timer描述一个定时器(用于实现类似cron的调度任务)
Snapshot.snapshot用于保存一个systemd的状态
Scope.scope使用systemd的总线接口以编程的方式创建外部进程
Slice.slice描述居于Cgroup的一组通过层次组织的管理系统进程
Target.target描述一组systemd的单元


3.3 .service文件格式

service unit file文件通常由三部分组成:

  • [Unit]:主要用来描述此软件的功能,man帮助,依赖关系等等
     
  • [Service]:主要作用是,systemd程序怎么具体管理该程序,以及一些额外配置
     
  • [Install]:在哪个运行级别启动

Unit段的常用选项:

  • Description:描述信息

  • After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反

  • Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活

  • Wants:依赖到的其它units,弱依赖

  • Conflicts:定义units间的冲突关系
     

Service段的常用选项:

  • Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
  1. simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中
     
  2. forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止
     
  3. oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中
     
  4. dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行
     
  5. notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息
     
  6. idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务
  • EnvironmentFile:环境配置文件
     
  • ExecStart:指明启动unit要运行命令或脚本的绝对路径
     
  • ExecStartPre: ExecStart前运行
     
  • ExecStartPost: ExecStart后运行​​​​​​​
     
  • ExecStop:指明停止unit要运行的命令或脚本 $mainpid
     
  • Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
     
  • RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
     
  • PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录
     

Install段的常用选项:

  • Alias:别名,可使用systemctl command Alias.service
     
  • RequiredBy:被哪些units所依赖,强依赖
     
  • WantedBy:被哪些units所依赖,弱依赖
     
  • Also:安装本服务的时候还要安装别的相关服务

 

3.4 管理服务的方式 

1. 通过写脚本以及使用chkconfig工具 (一般不使用此方法)

chkconfig --list [服务名称]chkconfig --add 服务名称chkconfig --level 级别列表服务名on/offchkconfig --add httpdchkconfig --level 35 httpd on

脚本编写以及chkconfig工具使用如下:

vim /etc/init.d/nginx     #写一个脚本#!/bin/bash 
#chkconfig: - 99 20 
#description:Nginx Service Control Script 
PROG="/usr/local/nginx/sbin/nginx" 
PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in
start) $PROG 
;; 
stop) 
kill -s QUIT $(cat $PIDF) 
;; 
restart) 
$0 stop $0 start
;; 
reload) 
kill -s HUP $(cat $PIDF) 
;;
*) echo "Usage: $0 {start|stop|restart|reload}" 
exit 1 
esac 
exit 0chmod +x /etc/init.d/nginx 
#给脚本加上权限ss -ntap |grep nginx
#查看服务有没有启动chkconfig --add nginx
#将服务加入chkconfig --list  nginx
#查看服务
chkconfig --level 35 nginx on
#开启3和5自动开启

 2. 通过配置文件让systemd直接管理

a.系统必要的程序
b.yum rpm 安装的程序
c.编译安装的程序,自己编写.service文件且放在/usr/lib/systemd/system/文件夹下

编译安装程序编写.service文件过程如下:

cd   /opt    #切换目录至optwget http://nginx.org/download/nginx-1.18.0.tar.gz    #下载nginx包tar xf nginx-1.18.0.tar.gz     #解压tar包yum -y install pcre-devel zlib-devel gcc gcc-c++ make    #下载编译环境cd  nginx-1.18.0/    #切换至解压后的目录下./configure   --prefix=/apps/nginx    #编译检测安装环境make
make  install    #编译安装ln -s  /apps/nginx/sbin/nginx     /usr/local/bin    #为编译后的可执行文件做软链接vim  /lib/systemd/system/nginx.service     #编写编译安装程序的配置文件[Unit]
Description=The nginx HTTP and reverse proxy server[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx
ExecReload=/apps/nginx/sbin/nginx -s reload
ExecStop=/usr/bin/kill  -s TERM  ${MAINPID}[Install]
WantedBy=multi-user.targetsystemctl  daemon-reload    #重新加载systemd程序

systemd管理时,使用的是systemctl命令,其中

systemctl start 服务名为开启服务systemctl stop 服务名为关闭服务systemctl status 服务名为查看服务状态systemctl restart 服务名为重启服务systemctl reload 服务名为重新热加载服务systemctl enable --now 服务名为开启时自动启动服务且立即启动systemctl disable --now 服务名为关闭开机自启且立即关闭systemctl daemon-reload 重新加载systemd程序

3. 通过init程序管理(centos6)

同样写脚本到/dev/init.d/下,因为已经不常用所以不过多赘述。

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

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

相关文章

结构体的内存对齐

目录 对齐规则: 为什么存在内存对齐? 对齐规则: 1、结构体的第一个成员对齐到和结构体起始位置偏移量为0的地址处 2、其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 编译器默认的一个对齐数 与 …

openstack安装dashboard后登录网页显示404错误

1. 2.进入该目录vim /etc/httpd/conf.d/openstack-dashboard.conf 增加这一行 WSGIApplicationGroup %{GLOBAL} 重启httpd后就可以访问了

古月·ROS2入门21讲——学习笔记(一)核心概念部分1-14讲

讲解视频地址:1.ROS和ROS2是什么_哔哩哔哩_bilibili 笔记分为上篇核心概念部分和下篇常用工具部分 下篇:古月ROS2入门21讲——学习笔记(二)常用工具部分15-21讲-CSDN博客 目录 第一讲:ROS/ROS2是什么 1. ROS的诞生…

【Qt 学习笔记】Qt常用控件 | 按钮类控件Radio Button的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 按钮类控件Radio Button的使用及说明 文章编号&#xff…

数据结构---线性表

1&#xff0c;顺序表实现---动态分配 #include<stdlib.h> #define InitSize 10 typedef struct {int *data;//静态分配int length;int MaxSize; }SqList; void InitList(SqList& L) {L.data (int*)malloc(InitSize * sizeof(int));//分配空间L.length 0;L.MaxSize…

React 集成三方登录按钮样式的插件库

按钮不提供任何社交逻辑。 效果如下&#xff1a; 原地址&#xff1a;https://www.npmjs.com/package/react-social-login-buttons 时小记&#xff0c;终有成。

沐风老师3DMAX物品摆放插件ObjectPlacer安装和使用方法详解

3DMAX物品摆放插件ObjectPlacer安装和使用教程 3DMAX物品摆放插件ObjectPlacer&#xff0c;一键在曲面上摆放对象&#xff0c;如摆放家具物品、种植花草树木、布设电线杆交通标志等。它的功能是将对象与几何体对象&#xff08;网格、多边形、面片或NURBS&#xff09;的面法线对…

提高大型语言模型 (LLM) 性能的四种数据清理技术

原文地址&#xff1a;four-data-cleaning-techniques-to-improve-large-language-model-llm-performance 2024 年 4 月 2 日 检索增强生成&#xff08;RAG&#xff09;过程因其增强对大语言模型&#xff08;LLM&#xff09;的理解、为它们提供上下文并帮助防止幻觉的潜力而受…

部署Kafka集群图文详细步骤

1 集群规划 共三台虚拟机同处overlay网段&#xff0c;每台虚拟机部署一套kafka和zookeeper&#xff0c;kafka_manager安装其中一台虚拟机上即可。 HostnameIP addrPortListenerzk1docker-swarm分配2183:2181zk2docker-swarm分配2184:2181zk3docker-swarm分配2185:2181k1docke…

Navicat连接SQL server出现:[IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序(0)

问题 解决方法 一 找到Navicat的安装路径&#xff0c;然后找到sqlncli_x64.msi文件并安装&#xff0c;安装成功后重启Navicat重新进行连接&#xff0c;看是否成功。 解决方法 二 如果方法一没有找到找到sqlncli_x64.msi 还是Navicat的安装路径&#xff0c;然后找到msodbcsql_64…

Linux磁盘扩容并设置挂载点

背景 使用pve创建了一个虚拟机&#xff0c;各种环境配置都安装好了之后发现分配的磁盘空间太小了&#xff0c;默认的就30多个G&#xff0c;这还没咋玩呢就满了&#xff0c;像扩容却找遍了这个pve都没找到扩容按钮&#xff0c;并且我这个磁盘不是lvm结构的&#xff0c;所以好像…

Zookeeper集群+消息队列Kafka

一. Zookeeper 集群的相关知识 1. zookeeper的概念 ZooKeeper 是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的…

zookeeper分布式应用程序协调服务+消息中间件kafka分布式数据处理平台

一、zookeeper基本介绍 1.1 zookeeper的概念 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、…

【Excel】使用VBA宏简单自定义Excel软件界面

改行做经济师学习Excel&#xff0c;偶有心得&#xff0c;摘录于此&#xff0c;备忘。 言简意赅&#xff0c;仅供自用。 1 实现效果 在Excel的左上角可添加按钮&#xff0c;该按钮的功能可由我们自己通过编写代码定义&#xff0c;能实现特定功能&#xff0c;并且在所有打开的…

Electron 桌面端应用的使用 ---前端开发

Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 入门…

LLM大语言模型助力DataEase小助手,新增气泡地图,DataEase开源数据可视化分析平台v2.5.0发布

2024年4月8日&#xff0c;DataEase开源数据可视化分析平台正式发布v2.5.0版本。 这一版本的功能升级包括&#xff1a;新增DataEase小助手支持&#xff0c;通过结合智能算法和LLM&#xff08;即Large Language Model&#xff0c;大语言模型&#xff09;能力&#xff0c;DataEas…

浮点数在内存中的存储

索引 1. 浮点数在内存中的存储2. 浮点数存的过程3. 浮点数取的过程4. 题目解析 正文开始 1. 浮点数在内存中的存储 常见的浮点数: 3.14159 , 1E10等, 浮点数家族包括 : float , double , long double类型. 浮点数的表示范围在 float.h中定义. (1E10为科学计数法表示1.0 * 2的…

从零开始编写一个cmake构建脚本

简介 本文档介绍cmake构建脚本编写&#xff0c;包含的一些主要元素和命名规范。 cmake构建脚本编写步骤 cmake构建工具版本要明确 # 命令名字要小写&#xff0c;这条语句要求构建工具至少需要版本为3.12或以上 cmake_minimum_required (VERSION 3.12)工程名及库的版本号明确…

SQLite从出生到现在(发布历史记录)(二十二)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;从 SQLite 3.5.9 迁移到 3.6.0&#xff08;二十一&#xff09; 下一篇:PSQLite的RAGMA 声明 引言&#xff1a; SQLite拥有别人无法比拟的装机量&#xff0c;究竟什么成就了SQLite呢&#xff0c;本文将SQLite的历…

探索进程控制第一弹(进程终止、进程等待)

文章目录 进程创建初识fork函数fork函数返回值fork常规用法fork调用失败的原因 写时拷贝进程终止进程终止是在做什么&#xff1f;进程终止的情况代码跑完&#xff0c;结果正确/不正确代码异常终止 如何终止 进程等待概述进程等待方法wait方法waitpid 进程创建 初识fork函数 在…