引导过程与服务控制
一、引导过程
引导过程:当你按下开机的电源键直到屏幕显示登录的画面,这中间系统做的一些的开机过程。
1、开机自检(BIOS)
服务器开机之后,根据主板的bios设置,对cup 内存,显卡 键盘等等设备进行初步检测。检测成功后根据预设的启动顺序(默认的启动顺序,第二个就是硬盘,要么就是手工设置的U盘启动)系统的控制权转到了硬盘(大多数的时候转移给本机的硬盘)。
总结:初步检测硬件工作是否正常,检测成功后把系统的引导控制器交个硬盘或者光驱,或者u盘。
2、MBR引导
MBR是硬盘的分区记录表,在这个表里面记录硬盘的分区,以及系统的启动位置在哪。
系统的控制权到了硬盘,根据mbr记录表来找,系统的启动盘,找到后将系统的控制权传递给包含操作系统引导文件的分区以及MBR记录中系统的启动菜单(grub)。
3、GRUB菜单
硬盘启动之后,找到系统分区,也找到了操作系统所在的位置,grub就会显示启动菜单,包含所有当前可选的操作系统。
选择其中一个操作系统之后,系统转移控制器,转移到操作系统的内核文件。
注意:centos7之后开开始使用的都是grub2启动引导器。
4、加载内核文件
操作系统的内核文件是一个预先编译好的特殊的二进制文件(可执行的代码)介于硬件资源和系统程序之间。负责分配资源,调度资源。只是分配和调度并没有真正的运行。预加载到内存当中,系统程序等待启动。
5、init/systemd启动方式
/sbin/init进程是系统当中的第一个进程,是所有其他进程的父进程,init进程在系统中的进程号永远是1。
/lib是串行 一个一个启动,速度慢。
lib/systemd/system系统的第一个进程,他的进程号也是1。
systemd是并行,加载在内存当中的程序一起启动,速度快。
6、systemd单元类型:
systemd是centos7之后用来管理系统服务进程的一个管理器。使用单元模式(unit)来描述和控制系统服务和资源。
特点:
1、支持并行服务,提高系统的启动速度。
2、支持自动重启。
3、可以在进程运行期间动态的控制他的资源和相关的服务参数。
4、可以自动解决服务启动过程中的依赖关系。
5、支持多种管理方式(命令行 图形化工具)主要使用命令行操作。
具体类型
单元类型 | 拓展名 | 描述 |
---|---|---|
service | .service | 描述一个系统进程 |
target | .target | 描述一组systemd的单元。进程在不同运行级别下的状态 |
socket | .socket | 进程启动时根据其配置,分配系统端口,监听端口状态。如果有请求,可以维护端口通信(提供网络服务) |
device | .device | 管理硬件设备,驱动程序,设备文件,设备属性 |
mount | .mount | 管理文件系统的挂载,以及挂载的选项,以及挂载之后的数据管理 |
Automount | .automount | 根据配置,自动的实现设备或者文件系统的挂载 |
nginx.service编译文件解析
[Unit] ##服务的说明
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/ ##Description描述信息
After=network-online.target remote-fs.target nss-lookup.target
#表示支持dns解析以及该软件依赖于网络。
##After依赖 启动的这个进程systemd会根据after的条件把相关的进程一并启动
Wants=network-online.target
#先启动网络服务,才能启动nginx
##Wants也是一个依赖,systemd也会把这个网络功能一并启动
[Service] ##服务运行的参数设置
Type=forking ##后台运行
PIDFile=/usr/local/nginx/run/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
## 服务启动时具体运行的命令
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID ##重启的命令
ExecStop=/bin/kill -s TERM $MAINPID ##停止进程的命令
[Install] ##服务安装的相关设置,以及运行的模式
WantedBy=multi-user.target
#支持多用户模
7、系统的运行级别:
运行级别 | systemd对应target | 说明 |
---|---|---|
0 | target | 关机 |
1 | rescue.target | 单用户模式,系统维护时使用 |
2 | multi-user.target | 字符模式和3一样 |
3 | multi-user.target | 字符模式完整的字符模式 ,可以支持多用户,在工作中我们遇到的linux系统均为3 |
4 | multi-user.target | 字符模式和3一样 |
5 | graphical.target | 图形化用户面模式(工作中没有) |
6 | reboot.target | 重启 |
查看系统的运行级别: runlevel。
切换系统的运行级别:init +数字。
二、服务控制
如何对服务进程进行控制:重点!!!
格式:systemctl 控制类型 服务名称(进程)。
1、控制类型:
- start 启动
- stop 停止
- restart 重启(先关闭在开启)先stop 在start(修改服务的配置文件,必须要重启服务才能生效)
- reload 重新加载单元配置
- status 查看服务的状态
status 查看服务的状态有以下几种情况:
- running 正常运行
- dead 服务停止
- fail 启动失败,查找启动失败的原因exit-code 真正的启动失败
- Result:singnal 表明有人强制终止了改进程,不一定是报错
三、场景实验
场景一:mbr引导
mbr分区表被删了,如何恢复
1、备份mbr分区表
第一步点击虚拟机右击进入设置,按以下操作将本地光盘挂上具体操作看上一章博客
添加一个硬盘点击添加,点击硬盘,点击下一步,其他操作默认,完成
重置虚拟机,并连接xshell
输入lsblk查看硬盘是否添加成功
输入
[root@localhost ~]# fdisk /dev/sdb
操作如下图所示对sdb进行分区
输入lsblk查看硬盘,分区成功
创建文件系统
[root@localhost ~]# mkfs.xfs /dev/sdb1
在根目录下创建一个目录,并挂载
[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sdb1 /backup/
[root@localhost ~]# cd /backup/
[root@localhost backup]#dd if=/dev/sda of=/backup/mbr.bak bs=512 count=1 #mbr分区表在第一块硬盘当中的第一个分区,大小512字节,把这个分区表从第一个硬盘当中提前出来,保存在sdb的硬盘中。实际上把mbr分区表做一个备份
2、模拟将mbr分区表删除,重启
[root@localhost backup]# dd if=/dev/zero of=/dev/sda bs=512 count=1
3、进行恢复mbr分区表
重启虚拟化在虚拟机初始化时鼠标点进虚拟机界面并按esc进入Boot Menu界面,选择3回车。
选择Troubleshooting 回车
选择第二个Rescue a Cetntos system 回车
进入急救模式
输入1 回车
继续回车
在根目录下创建一个目录
mkdir /backupdir
将备份的文件进行挂载
mount /dev/sdb1 /backupdir/
还原mbr分区表
cd /backupdir
ls 查询 目录下有mbr.bak文件
还原mbr分区表
dd if=/backupdir/mbr.bak of=/dev/sda
exit退出,重启,成功恢复
场景二:grub引导菜单故障
接着场景一的环境继续做场景二
1、grub菜单被删掉
centos7之后开开始使用的都是grub2启动引导器
grub2root@localhost opt]# cd /boot/grub2 #进入grub2目录
[root@localhost grub2]# rm -rf grub.cfg #删除grub.cfg模拟grub菜单被删掉
[root@localhost grub2]# init 6
重启
以上操作模拟grub菜单被删除
2、开始恢复
重启虚拟化在虚拟机初始化时鼠标点进虚拟机界面并按esc进入Boot Menu界面,选择3回车。
选择Troubleshooting 回车
选择第二个Rescue a Cetntos system 回车
进入急救模式
输入1 回车
继续回车
输入
chroot/mnt/sysimage/ #进入系统的根环境
回车
grub2-insll /dev/sda #将grub2下载到第一块硬盘
回车
grub2-mkconfig -o /boot/grub2/grub.cfg #将最开始删除的文件进行恢复
回车,退出,重启。
具体命令如下:
3、重启后进入虚拟机,成功恢复
场景三、模拟root密码忘记,恢复密码
1、关闭安全机制
进入root关闭selinux机制
[root@localhost ~]# setenforce 0 #关闭安全机制
2、开始恢复密码
重启虚拟化在虚拟机初始化时鼠标点进虚拟机界面并按esc进入Boot Menu界面,选择3回车。
选择Troubleshooting 回车
选择第二个Rescue a Cetntos system 回车
进入急救模式
输入1 回车
继续回车
输入
chroot/mnt/sysimage/ #进入系统的根环境
输入
passwd root
回车输入新密码,重启
具体详情如下
密码重置成功,输入新密码