引导过程和服务


一、引导过程

在这里插入图片描述

BIOS启动

1.POST:初始化硬件设备,检查系统外围主要设备(CPU,内存,硬盘,显卡,IO设备等)
2.确定启动设备
根据BIOS设置的启动顺序,检测驱动器(一般设置顺序为硬盘,存储设备,网络)。
如果硬盘是启动项,读取第一个扇区(MBR,512字节)到内存。
控制权转给MBR中的Bootloader。

MBR引导

1.执行MBR中的Bootloader。
2.MBR由主引导程序,硬盘分区表,结束位组成。
3.MBR中的Bootloader里面安装有GRUB程序中的一部分。

GRUB引导

1.Stage1阶段
Stage1是安装时被写到MBR中的,因为MBR空间有限,因此只安装Bootloader的最小程序,主要用于启动装载Stage2

2.Stage1.5阶段
Stage1.5在MBR分区后面的分区,能识别启动分区文件系统,是Stage1和Stage2的桥梁。GRUB访问/boot分区下的grub目录下的Stage2文件,将Stage2加载入内存并执行。
3.Stage2阶段
解析grub的配置文件/boot分区下/grub/grub.conf,显示操作系统启动菜单,转交给内核。

bootloader: 引导加载器,引导硬件去找到 内核(操作系统的核心)

加载内核

Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过 程。在 CentOS 系统中,默认的内核文件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。

启动程序

systemd进程初始化,这是Linux系统中运行的第一个程序,这个程序不启动,其他程序不可能启动。
这一阶段的过程主要是加载硬件驱动程序,内核把systemd进程加载到内存中运行,至此Linux系统才算启动完毕。

注意:
centos 6的第一个进程是init,传统init依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢。
centos 7的第一个进程是systemd,能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。

二、服务

修复MBR分区

1.备份MBR引导扇区到其他磁盘
在这里插入图片描述

2.模拟破坏MBR引导扇区
在这里插入图片描述
破坏完成
在这里插入图片描述

3.引导镜像急救模式进行MBR扇区恢复

引导界面进入急救模式,从备份文件中恢复MBR 扇区数据先加载好光盘镜像,重启操作系统,当出现安装向导界面时,选择“Troubleshooting”选项,再选择“Rescue a CentOS Linux system”选项,进入急救模式选择“1”选择 Continue并按 Enter 键继续再次按 Enter 键后将进入带“sh-4.2#”提示符的 Bash Shell 环境。
sh-4.2# mount /dev/sdb1 /mnt #挂载带有备份文件的分区
sh-4.2# dd if=/mnt/backup of=/dev/sda bs=512 count=1#恢复备份数据
sh-4.2# reboot #执行exit命令退出临时Shell 环境,系统将会自动重启

修复GRUB分区

法一:进入急救模式,恢复GRUB引导程序
1.备份加破坏

在这里插入图片描述
2.引导镜像急救模式步骤如上

法二:引导界面进入急救模式,重建GRUB菜单配置文件
1.模拟移除GRUB配置文件
在这里插入图片描述
2.破坏完成在这里插入图片描述
3.引导界面进入急救模式,重建GRUB菜单配置文件
sh-4.2# chroot /mnt/sysimage
#重新将GRUB引导程序安装到第一块硬盘(/dev/sda)的MRB扇区,如果有多个分区可省略
bash-4.2# grub2-install /dev/sda
#重新构建GRUB菜单的配置文件
bash-4.2# grub2-mkconfig -o /boot/grub2/grub.cfg
#退出chroot 环境,并重启
bash-4.2# exit
sh-4.2# reboot
在这里插入图片描述

修改密码

方法一:进入急救模式,更改环境
chroot /mnt/sysimage
passwd在这里插入图片描述
方法二:
启动时任意键暂停启动,按e键进入编辑模式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
具体过程:
将光标移动linux 开始的行,添加内核参数 rd.break
按ctrl-x启动
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
#如果SELinux是启用的,才需要执行下面操作,如没有启动,不需要执行
touch /.autorelabel
exit
reboot

添加grub密码
grub2-setpasswd#直接设置密码

设置运行级别

命令格式:

systemctl [command] [unit.target]
command参数:

get-default :取得当前的target
  set-default :设置指定的target为默认的运行级别 3 5
  isolate :切换到指定的运行级别
  unit.target :上面列出的运行级别

示例:
init 0 systemctl isolate poweroff.target systemctl poweroff poweroff
init 1 systemctl isolate rescue.target
init 3 systemctl isolate multi-user.target
init 5 systemctl isolate graphical.target 图形
init 6 systemctl isolate reboot.target

0:关机
1:单用户模式(root自动登录), single, 维护模式
2:多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启

systemd服务

Centos系统主要就是用来搭建各种网络服务器,而绝大多数的服务器程序都是以服务的状态在系统中运行的,所以我们所要研究的主要是那些对外提供功能的网络服务。通常情况下,运行了某种对外的服务后,都会在系统中开放相应的端口,如运行了httpd服务后会开放TCP80端口。

服务程序
服务程序主要包括本地服务程序和网络服务程序,这里我们主要解释本地服务程序。
本地服务程序,顾名思义是管理本机的程序,systemd是管家式的程序,管理系统中其他程序,可以称之为叫醒服务。
注意并不是所有人都可以被他管理,下面程序可以被他管理:
1.系统必要的程序
2.yum,rpm安装的程序
3.编译安装的程序,但需要手写配置文件后才可以
在/usr/lib/systemd/system/服务名.service的文件

systemctl命令
在这里插入图片描述
systemd 核心概念:unit
在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。
systemd单元文件最初默认存放/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。
systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型。

配置文件截图在这里插入图片描述
service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等。
[Service]:与特定类型相关的专用选项;此处为Service类型。
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到的一些选项。

Unit段的常用选项:

  • Description:描述信息 Description:当前 unit 的描述
  • Documentation:文档地址,仅接受类型为:http://、https://、file:、info:、man: 的URL
  • Requires:表示本 unit 与其它 unit 之间存在强依赖关系,如果本 unit 被激活,此处列出的 unit 也会被激活,如果其中一个依赖的 unit 无法激活,ystemd 都不会启动本 unit
  • Wants:与 Requires 类似,区别在于如果依赖的 unit 启动失败,不影响本 unit 的继续运行 After:表示本 unit 应该在某服务之后启动,选项可参考 systemd.special 中文手册
    • Before:表示本 unit应该在某服务之前启动,After和Before 字段只涉及启动顺序,不涉及依赖关系
  • BindsTo:与 Requires 类似,当指定的 unit 停止时,也会导致本 unit 停止
  • PartOf:与 Requires 类似,当指定的 unit 停止或重启时,也会导致本unit 停止或重启
  • Conflicts:如果指定的 unit 正在运行,将导致本 unit 无法运行
  • OnFailure:当本 unit进入故障状态时,激活指定的 unit

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通常是开机到最后才执行即可的服务

PIDFile:指向此守护进程的 PID 文件的绝对文件名。对于 Type=forking 的服务,建议使用此选项。Systemd 在服务启动后读取守护进程的主进程的 PID。Systemd 不会写入此处配置的文件,但它会在服务关闭后删除该文件。
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/目录

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

**注意:**对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启
systemctl daemon-reload

安装示例

编译安装后,想让systemd管理。总体思路,在/lib/systemd/system/下编写service文件,如何编写?最简便的方式就是在另一台机器上进行yum安装,然后复制.service文件。
这是yum安装的文件。
在这里插入图片描述
安装过程
编译安装
在这里插入图片描述
创建.service文件
在这里插入图片描述
systemd接管
在这里插入图片描述
如果出现报错
在这里插入图片描述
先检查配置文件出错没,nginx -t,如果没问题根据报错提示去查找,猜测端口号被占用,找到占用80端口号的程序,结束进程之后,再尝试即可。

Target含义

Target的含义是服务组,表示一组服务 WantedBy=multi-user.target 指的是,unit 所在的 Target 是multi-user.target(多用户模式)

这个设置非常重要,因为执行systemctl enable 是会将 unit 链接到 /etc/systemd/system/multi-user.target.wants目录之中,实现开机启动的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值