Linux操作系统引导过程+服务级别+Systemd服务管理+超详细的启动类故障排除

一、linux操作系统引导过程

1.1 引导过程详解

请添加图片描述

  1. 开机自检(bios)
    加电检测硬件是否有问题。
    如果没有问题, 根据bios设置的第一启动项(第一个能够引导系统的设备),来寻找操作系统。

  2. MBR引导
    运行放在MBR扇区里的启动GRUB引导程序(MBR前446位是GRUB引导文件,后64位是分区),来启动完整的GRUB引导程序。

  3. GRUB菜单
    GRUB引导程序通过配置文件 /boot/grub2/grub.cfg来找到操作系统。

  4. 加载内核
    内核是操作系统的核心
    把内核和镜像文件系统加载到内存中,使其可以使用

  5. init进程初始化
    运行中的程序称为进程
    加载硬件驱动程序,以及初始化进程,内核把init进程加载到内存中运行。
    init进程是由内核直接启动的第一个用户级进程,负责启动系统的用户终端(登录界面),启动各种系统服务和守护进程等等。

1.2 系统初始化进程

init vs systemd
第一个启动的进程 ,后续进程都要依托于此进程启动

CentOS 7 — systemd 并行启动后续进程,速度块

CentOS 6 — init 一个一个启动,速度慢

1.3 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的单元

二、排除启动类故障

2.1 MBR扇区故障

2.1.1 故障原因

  • 病毒、木马的等造成的破坏
  • 不正确的分区操作、磁盘读写误操作等

2.1.2 模拟修复MBR扇区故障

1)添加新硬盘并分区

lsblk命令查看能否识别新硬盘,本次实验选用sdb作为备份盘
请添加图片描述

fdisk /dev/sdb   //分区

硬盘中不只有MBR扇区,所以对硬盘分区备份

在这里插入图片描述

hexdump  -C -n 512 /dev/sda   //
用于和故障后的对比

在这里插入图片描述

2)备份 MBR扇区数据 到其他磁盘
mkdir  /test             //新建test文件夹 作为挂载点和备份点
mount /dev/sdb1  /test   // sdb1挂载到 /test下

在这里插入图片描述

dd if=/dev/sda  of=/test/mbr.bak  bs=512 count=1  //将MBR扇区备份到新硬盘的分区中

在这里插入图片描述

3)破坏MBR扇区,模拟MBR扇区故障
dd if=/dev/zero  of=/dev/sda bs=512  count=1  //空字符替换 模拟MBR扇区故障

在这里插入图片描述

hexdump  -C -n 512 /dev/sda

在这里插入图片描述
重启虚拟机
此时
观察故障情况
在这里插入图片描述

4)进入急救模式,用备份文件恢复MBR扇区数据,解决故障

进入急救模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

mkdir /backup   

mount /dev/sdb1  /backup   //将sdb1挂载到backup下

在这里插入图片描述
在这里插入图片描述

此时,新建目录backup下,有备份文件

ls /backup   //查看backup下的文件

在这里插入图片描述

再将备份文件的数据拷贝到sda中
dd if=/backup/mbr.bak  of=/dev/sda bs=512 count=1 //备份恢复MBR扇区数据

在这里插入图片描述
之后在命令行中输入exit ,退出急救模式并重启
观察重启情况
在这里插入图片描述

在这里插入图片描述

2.2 grub 引导故障

2.2.1 故障原因

  • MBR中的GRUB引导程序遭到破坏
  • grub.cfg 文件丢失、引导配置有误

2.2.2 模拟修复grub配置文件

1)删除grub配置文件,重启观察故障情况
cd /boot/grub2         //切换到grub配置文件所在目录

rm -rf grub.cfg       //删除配置文件 grub.cfg

在这里插入图片描述
reboot重启
由于没有grub配置文件,无法登录
在这里插入图片描述

2)重新启动,在读条界面按 Esc 键进入启动菜单,改用光盘启动,引导界面进入急救模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3)重建GRUB菜单配置文件

在这里插入图片描述

chroot   /mnt/sysimage  

在这里插入图片描述

grub2-install /dev/sda

在这里插入图片描述

grub2-mkconfig -o /boot/grub2/grub.cfg

在这里插入图片描述

4)退出引导界面,重启,观察是否修复成功

在这里插入图片描述
重启后观察启动状态
在这里插入图片描述
在这里插入图片描述
修复成功

2.3 用户密码

2.3.1 模拟修改root密码

在这里插入图片描述

在这里插入图片描述

mount –o remount,rw /sysroot  //修改根目录的权限 重新挂载   
chroot /sysroot  // 创建了一个临时的根文件系统环境,使得在该环境中运行的程序只能访问到该环境下的文件和目录,而不能访问主系统的文件和目录

在这里插入图片描述

touch /.autorelabel

passwd root //修改密码

在这里插入图片描述
在这里插入图片描述
登录用户root
在这里插入图片描述
输入原来的密码123123,提示密码错误
在这里插入图片描述
在这里插入图片描述
输入修改后的密码,登录成功
在这里插入图片描述

三、linux运行级别

运行级别(runlevel)指的是系统的工作状态,定义了系统启动时运行的服务和进程.
init 0-6 可以切换到 对应的运行级别

systemctl get-default        //获得当前的运行级别

systemctl isolate xxx.target //不重启切换运行级别

3.1 运行级别0(halt)

系统关机状态,所有服务已停止,可以安全地关闭电源。

3.2运行级别1(single user mode)

单用户模式,只有root用户可以登录,用于系统修复和维护。

3.3 运行级别2(multi-user mode)

文本模式多用户模式,登录后进入命令行界面, 功能不全的字符界面。

3.4 运行级别3(full multi-user mode)

文本模式多用户模式,登录后进入命令行界面, 完整的字符界面。

3.5 运行级别4(unused)

保留,未分配特定用途,可以根据需要进行自定义。

3.6 运行级别5(graphical multi-user mode)

图形多用户模式,登录后进入 图形界面

3.7 运行级别6

重启

四、Systemd服务管理–systemctl

4.1 什么是服务程序

为其他机器提供服务的程序,服务程序启动后,会持续监听端口。

使用systemctl 命令管理systemd服务。

4.2 systemctl命令

systemctl是用于管理systemd系统和服务管理器的命令行工具。

命令格式

systemctl   [选项]  程序名 
[选项]

start       开启

stop        关闭

status      查看程序状态

reload      重新加载配置文件而不重启

restart     重启

enale       开机自启

disable     开机不自启

开机自启并立即启动 
systemctl enable --now 程序名
systemctl start nginx   //启动nginx
systemctl status nginx // 查看运行状态

在这里插入图片描述

systemctl stop firewalld //关闭防火墙
setenforce 0  //永久关闭

在这里插入图片描述

4.3 为什么能使用systemctl命令?

有service system单元并且在固定目录下

4.4 service unit文件格式(.service 文件)

路径
/usr/lib/systemd/system/*.service
service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项

4.4.1 Unit段的常用选项

Description:描述信息

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

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

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

Conflicts:定义units间的冲突关系

4.4.2 Service段的常用选项

Type:定义影响ExecStart及相关参数的功能的unit进程启动类型

EnvironmentFile:环境配置文件

ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStop:指明停止unit要运行的命令或脚本

ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行

Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"

PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

4.4.3 Install段的常用选项

Alias:别名,可使用systemctl command Alias.service

RequiredBy:被哪些units所依赖,强依赖

WantedBy:被哪些units所依赖,弱依赖

Also:安装本服务的时候还要安装别的相关服务

4.4.4 以nginx.service 文件为例

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白幽幽白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值