引导与服务

目录

一.引导过程

1.开机自检(bios)

2.MBR引导

3.grub菜单

4.加载内核

5.systemd初始化

二.服务

1.systemd与init概念

2.systemd与init区别

3.systemd特性

4.unit概念

5.systemd单元类型

6.运行级别对应的systemd目标

7.service unit 文件格式

8.Unit段常用选项

9.Service段常用选项

10.Install段常用选项

三.systemd命令

1.systemctl命令格式

2.实验

四.修复实验

1.修复MBR分区

1.1方法一

1.2方法二

2.修复grup分区

3.修改密码


一.引导过程

在Linux系统中,开机需要经历几个过程

1.开机自检(bios)

在主机开机后,主板中的bios会进行初步硬件检查,检测设备运行是否正常。在检测成功后,会根据操作系统安排好的运行顺序移交系统的控制权,一般情况下会移交给本机硬盘。

2.MBR引导

当系统需要从硬盘中启动时,系统会根据硬盘分区信息表(MBR分区表)查找硬盘的位置。Linux根据硬盘上的第一个分区信息找到系统文件所在的硬盘。

3.grub菜单

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

4.加载内核

Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间。内核会分配好系统程序和一些第三方开机自启动程序,启动所需要的资源,并加载到内存当中。

5.systemd初始化

为了完成进一步的系统引导过程,Linux内核首先将系统中的“/sbin/init”程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录。

二.服务

服务:特殊的应用程序,一般在后台一直执行。

系统服务:给系统提供服务功能。

应用服务:给人提供服务功能。

1.systemd与init概念

Centos6:init

Centos7:systemd

init:①.由Linux内核加载运行 /sbin/init 程序

        ②.init进程是系统中第一个进程

        ③.init进程的PID(进程标记)号永远为1

systemd:①.systemd是Linux操作系统的一种init软件

                 ②.Centos7中采用全新的systemd启动方式,代替传统的sysvinit

                 ③.Centos7中运行的第一个init程序是/lib/systemd/systemd

2.systemd与init区别

init:启动程序时,是按照顺序一个一个的启动,速度慢

systemd:启动程序时,可以并行启动,速度快

3.systemd特性

  • 系统引导时实现服务并行启动

  • 按需启动守护进程

  • 自动化的服务依赖关系管理

  • 同时采用socket式与D-Bus总线式激活服务

  • socket与服务程序分离

  • 向后兼容sysv init脚本

  • 使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,

  • systemctl无法与之通信和控制

  • 系统状态快照

systemd是给一部分软件提供托管(叫醒)服务。

4.unit概念

unit:systemd的作用是管理程序,为了方便管理,把功能相似的程序分成一个单元组,即unit。

unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息

5.systemd单元类型

单元类型扩展名说明
Servise.servise描述一个系统服务软件
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的单元

6.运行级别对应的systemd目标

运行级别systemd的target说明
0target关机状态,使用该级别时将会关闭主机
1rescue.target单用户模式,不需要密码验证即可登录系统,多用于系统维护
2multi-user.target

用户定义/域特定运行级别。默认等同于3

3multi-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4multi-user.target用户定义/域特定运行级别。默认等同于3
5graphical.target图形界面的多用户模式,提供了图形桌面操作系统
6reboot.target重新启动,使用该级别时将会重启主机

7.service unit 文件格式

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

  • [Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等

  • [Service]:与特定类型相关的专用选项;此处为Service类型

  • [Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项

8.Unit段常用选项

  • Description:描述信息

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

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

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

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

9.Service段常用选项

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

  • simple:默认值,这个daemon主要由ExecStart接的指令串来启动,启动后常驻于内存中

  • forking:由ExecStart启动的程序透过spawns延伸出其他子程序来作为此daemon的主要服务。原生父程序在启动结束后就会终止

  • oneshot:与simple类似,不过这个程序在工作完毕后就结束了,不会常驻在内存中

  • dbus:与simple类似,但这个daemon必须要在取得一个D-Bus的名称后,才会继续运作.因此通常也要同时设定BusNname= 才行

  • notify:在启动完成后会发送一个通知消息。还需要配合 NotifyAccess 来让 Systemd 接收消息

  • idle:与simple类似,要执行这个daemon必须要所有的工作都顺利执行完毕后才会执行。这类的daemon通常是开机到最后才执行即可的服务

②.EnvironmentFile:环境配置文件

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

④.ExecStartPre: ExecStart前运行

⑤.ExecStartPost: ExecStart后运行

⑥.ExecStop:指明停止unit要运行的命令或脚本

⑦.Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务

⑧.RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。

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

10.Install段常用选项

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

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

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

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

三.systemd命令

1.systemctl命令格式

systemctl [选项...] {程序名} ...

选项说明
start开启
stop关闭
status查看目前服务状态
restart重启
reload重新加载配置文件
enable开机自启动
disable开机不自启
#查看服务是否活跃
[root@localhost ~]#systemctl is-active

#列出所有可用单元
[root@localhost ~]#systemctl list-unit-files

#列出所有已加载单元
[root@localhost ~]#systemctl list-units

#查看可用systemctl管理的所有服务
[root@localhost ~]#systemctl list-units --type=service

#注销服务
#服务被注销后该服务就无法通过systemctl进行启停管理
[root@localhost ~]#systemctl mask

#取消注销服务
[root@localhost ~]#systemctl unmask

#查看机器信息
[root@localhost ~]#systemctl list-machines

#查看系统环境变量
[root@localhost ~]#systemctl show-environment

#重新加载unit文件
[root@localhost ~]#systemctl daemon-reload

#创建一个系统快照
[root@localhost ~]#systemctl snapshot xxx

#删除指定快照
[root@localhost ~]#systemctl delete xxx

#查看服务是否开机自启动
[root@localhost ~]#systemctl is-enabled

#杀死服务
[root@localhost ~]#systemctl kill

#进入救援模式
[root@localhost ~]#systemctl rescue

#关闭系统
[root@localhost ~]#systemctl poweroff

#重启机器
[root@localhost ~]#systemctl reboot

#查看系统启动模式
[root@localhost ~]#systemctl get-default

2.实验

以nginx为例,如果使用yum安装,会自动被systemd管理,因此使用编译安装,手动加入systemd管理。

过程:

第一步:

进行编译安装

第二步:

为systemd管理nginx写配置文件

第三步:

重新加载配置文件

使用systemd管理启动

#编译安装nginx
[root@localhost ~]#cd  /opt

[root@localhost opt]#wget http://nginx.org/download/nginx-1.18.0.tar.gz

[root@localhost opt]#tar xf   nginx-1.18.0.tar.gz

[root@localhost opt]#cd  nginx-1.18.0

[root@localhost nginx-1.18.0]#yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel 

[root@localhost nginx-1.18.0]#mkdir /apps/nginx -p

[root@localhost nginx-1.18.0]#./configure   --prefix=/apps/nginx

[root@localhost nginx-1.18.0]#make

[root@localhost nginx-1.18.0]#make  install

[root@localhost nginx-1.18.0]#ln -s /apps/nginx/sbin/nginx   /usr/sbin/nginx 


#为systemd管理nginx写配置文件
[root@localhost nginx-1.18.0]#vim  /usr/lib/systemd/system/nginx.service



[Unit]
Description=The nginx HTTP and reverse proxy server
#描述软件的功能

[Service]
PIDFile=/apps/nginx/logs/nginx.pid
#方便使用pid号进行操作,指明进程的pid号
ExecStart=/apps/nginx/sbin/nginx
#使用绝对路径启动
ExecStop=/usr/bin/kill -s TERM $MAINPID
#杀死进程
ExecReload=/apps/nginx/sbin/nginx -s reload
#重新加载

[Install]
WantedBy=multi-user.target
#安装子字符界面


#重新加载配置文件
[root@localhost nginx-1.18.0]#systemctl  daemon-reload

#开启服务
[root@localhost nginx-1.18.0]#systemctl  start  nginx

#查看服务状态
[root@localhost nginx-1.18.0]#systemctl  status  nginx

四.修复实验

1.修复MBR分区

实验步骤:

①.备份mbr引导扇区到其他磁盘

②.模拟破坏mbr引导扇区

③.引导镜像急救模式进行mbr扇区恢复

1.1方法一

模拟把分区表备份在其他硬盘上

第一步:

创建一个新分区sdb1并挂载

然后把mbr分区表备份至sdb1中

第二步:

模拟破坏mbr分区表并重启

第三步:

依次选择故障排除、急救模式、继续

第四步:

创建一个新目录作为sdb1的挂载点

并把sdb1中备份的mbr分区表复制到sda中

第五步:

检查mbr分区表并重启

#创建新分区sdb1并挂载
[root@localhost ~]#dfisk /dev/sdb
[root@localhost ~]#mkfs.xfs /dev/sdb1
[root@localhost ~]#mount /dev/sdb1 /opt/

#备份mbr分区表到sdb1中
[root@localhost ~]#dd if=/dev/sda of=/opt/aaa bs=512 count=1

#模拟破坏mbr分区表并重启
[root@localhost ~]#dd if=/dev/zero of=/dev/sda count=1 bs=512
[root@localhost ~]#hexdump -C -n 512 /dev/sda
[root@localhost ~]#reboot


#依次选择故障排除、急救模式、继续

#创建一个新目录作为sdb1的挂载点

#并把sdb1中备份的mbr分区表复制到sda中

#检查mbr分区表是否修复完成并重启

1.2方法二

模拟把分区表备份在其他主机上

第一步:

备份mbr分区表

并把备份的mbr分区表传给第二个主机

第二步:

模拟破坏mbr分区表并重启

第三步:

依次选择故障排除、急救模式、跳转到shell

第四步:

暂时修改本机IP地址

把备份的mbr分区表复制回来

第五步:

把备份的mbr分区表恢复到sda中

并重启检查

#备份mbr分区表
[root@localhost ~]#dd if=/dev/sda of=/mnt/aaa  bs=512  count=1

#把备份的mbr分区表传给第二台主机
[root@localhost mnt]#scp /mnt/aaa 172.16.233.90:/mnt/

#模拟破坏mbr分区表
[root@localhost mnt]#dd if=/dev/zero of=/dev/sda bs=512  count=1

#重启
[root@localhost mnt]#reboot

#依次选择故障排除、急救模式、跳转到shell

#暂时修改IP地址

#把备份的mbr分区表从第二台主机复制回来

#用备份的mbr分区表修复sda

#重启验证

2.修复grup分区

模拟grup配置文件丢失

第一步:

找到grub.cfg配置文件模拟删除并重启

第二步:

依次选择光驱模式、故障排除、急救模式、继续

第三步:

更改环境进入bash

重新加载sda分区并构建grub配置文件

退出到光驱模式并重启验证

#找到grub.cfg配置文件模拟删除并重启
[root@localhost ~]#rm -rf /boot/grub2/grub.cfg
[root@localhost ~]#reboot

#依次选择光驱模式、故障排除、急救模式、继续

#进入急救模式后,更改环境
chroot /mnt/sysimage

#重新建立加载sda分区
grub2-install /dev/sda

#重新构建grub菜单配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg

#退出到光驱模式并重启验证

3.修改密码

chroot /mnt/sysimage
#进入急救模式后,更改环境
passwd
#修改密码
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux 开始的行,添加内核参数 rd.break
按ctrl-x启动
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
#如果SELinux是启用的,才需要执行下面操作,如没有启动,不需要执行
touch /.autorelabel
exit
reboot
启动时任意键暂停启动
按e键进入编辑模式
将光标移动linux 开始的行,改为 rw init=/sysroot/bin/sh
按ctrl-x启动
chroot /sysroot
passwd root
#如果SELinux是启用的,才需要执行下面操作,如查没有启动,不需要执行
touch /.autorelabel
exit
reboot

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值