Linux系统:引导过程与服务控制

目录

一、linux系统引导过程

1、引导过程介绍

1.1 引导过程总览图

 1.2 引导过程详解

1.3 系统初始化进程

1.4 Ststemd单元类型

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

二、排除启动类故障 

1、修复MBR扇区故障

1.1 故障原因

1.2 故障现象

1.3 解决思路

1.4 详细操作步骤

1.4.1 在本机备份mbr文件

1.4.2 远程拷贝mbr文件

2、修复GRUB引导故障

2.1 故障原因

2.2 故障现象

2.3 解决思路

2.4 详细操作步骤

 3、遗忘root用户的密码

3.1 故障原因

3.2 故障现象

3.3 解决思路

3.4 详细操作步骤

3.4.1 有光驱模式重设密码

3.4.2 无光驱模式重设密码

三、服务程序管理

1、管理服务程序的状态

2、chkconfig

3、systemd

3.1 systemd命令

3.2 配置编译安装的程序软件开机自启动的步骤

3.2.1 编写nginx开机自启动的配置文件

3.2.2 重新加载所有配置文件并开启nginx服务

3.2.3 关闭nginx服务


一、linux系统引导过程

1、引导过程介绍

1.1 引导过程总览图

Linux系统:引导过程与服务控制_第1张图片

 1.2 引导过程详解

①BIOS加电自检:

  • 服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
  • 总结:检测出第一个能够引导系统的设备,比如硬盘或者光驱

进入BIOS界面的方法 

选择“打开电源时进入固件”后,就能进入BIOS界面

Linux系统:引导过程与服务控制_第2张图片

修改BIOS加电自检硬件的优先级 

Linux系统:引导过程与服务控制_第3张图片

②MBR引导:

  • 当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR (主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB) 。
  • 总结:运行放在MBR扇区里的启动GRUB引导程序

③GRUB菜单

  • 对于Linux操作系统来说,GRUB (统一启动加载器)是使用最为广泛的多系统引导器程序。系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。CentOS 7采用的是GRUB2启动引导器。
  • 总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置

④加载Linux内核

  • Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。CentOS 7系统中,默认的内核文件位于"/boot/vmlinuz-3.10.0-514.e17.x86_64"
  • 总结:把内核和镜像文件系统加载到内存中

⑤init进程初始化

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

 总过程详述:

加电后bios程序会自检硬件,硬件无故障后,会根据第一启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mbr 的指引找到完整的 grub 程序,再根据rub的配置文件找到内核文件的具体位置,然后将内核文件加载到内存中运行,内存加载好后会启动第一个程序。

1.3 系统初始化进程

①init进程

  • init是系统的初始化进程,负责启动和管理系统中的所有其他进程
  • 由Linux内核加载运行/sbin/init程序
  • init是Linux系统中的第一个用户空间进程,其进程ID(PID)始终为1
  • init通常通过/etc/inittab文件进行配置,并且它按照运行级别(runlevel)来启动系统服务和进程

②Systemd

  • Systemd是Linux操作系统的一种init软件
  • CentOS7中采用全新的Systemd启动方式,取代传统的SysVinit
  • CentOS7中运行的第一个init进程是/lib/systemd/systemd
Init与Systemd对比
Init systemd
启动区别 串行启动后续程序,按顺序一个个启动 并行启动后续程序,全部一起启动
功能和特性 init相对较为简单 systemd提供了更多的功能和特性,是系统的级的程序,代为管理系统中的服务程序
配置方式 init使用/etc/inittab文件进行配置 systemd使用单元文件(unit files)进行配置
统一接口 init需要依赖于多个独立的脚本文件 systemd提供了统一的接口和工具来管理系统服务和资源

1.4 Ststemd单元类型

单元类型  扩展名 说明
Service  .service 描述一个系统服务
Socket      .socket  描述一个进程间通信的套接字
Device         .device 描述一个内核识别的设备文件
Mount      .mount  描述一个文件系统的挂载点
Automount       .automount  描述一个文件系统的自动挂载点
Swap       .swap 描述一个内存交换设备或文件
Path        .path 描述一个文件系统中文件或目录
Timer        .timer  描述一个定时器
Target      .target  描述一组systemd的单元

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

运行级别       Systemd的target 说明
0 target     关机状态,使用该级别时将会关闭主机
1 rescue.target     单用户模式,不需要密码验证即可登录系统,多用于系统维护
2 multi-user.target  用户定义/域特定运行级别,默认等同于3,但是不能连网
3 multi-user.target  字符界面的完整多用户模式,大多数服务器主机运行在此级别
4 multi-user.target 用户定义/域特定运行级别。默认等同于3
5 graphical.target 图形界面的多用户模式,提供了图形桌面操作环境
6 reboot.target 重新启动,使用该级别时将会重启主机
命令 说明
init 0 关机
init 1 单用户模式相当于windows安全模式
init 2 用户,没网
init 3 多用户模式 字符界面没装图形化界面,默认为init3
init 4 保留
init 5 图形化界面,多用户化模式
init 6  或  reboot 重新启动
runlevel          //查看系统当前运行级别

systemctl get-default               //查看默认的运行级别
systemctl set-default               //设置默认的运行级别

拓展:

如果终端的一个服务程序启动出现问题,该服务设置了3、5运行级别,结果导致终端开机自启也卡死,进入不了系统,怎么解决

答:进入Linux系统的其他运行级别如1(单用户模式)将这个服务程序开机自启全部关闭,再reboot重启即可

二、排除启动类故障 

1、修复MBR扇区故障

1.1 故障原因
  • 病毒、木马等造成的破坏
  • 不正确的分区操作、磁盘读写误操作
1.2 故障现象
  • 找不到引导程序,启动中断
  • 无法加载操作系统,开机后黑屏
1.3 解决思路
  • 应提前作好备份文件
  • 以安装光盘引导进入急救模式
  • 从备份文件中恢复
1.4 详细操作步骤

要求:模拟破坏mbr及其分区表,然后对其进行修复

 1.4.1 在本机备份mbr文件

步骤一:新添加一块硬盘,并将mbr备份文件拷贝到新硬盘

①新添加一块硬盘

Linux系统:引导过程与服务控制_第4张图片

磁盘建立完成后,使用以下三条命令刷新新建的磁盘设备,不需要重启

echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan

②创建新硬盘的主分区

Linux系统:引导过程与服务控制_第5张图片

 如果分区不能识别时,使用以下命令后,可查看新添加的磁盘主分区

partprobe /dev/sdb

Linux系统:引导过程与服务控制_第6张图片

 ③对主分区进行格式化

mkfs.xfs  /etc/sdb1         //格式化

Linux系统:引导过程与服务控制_第7张图片

 ④挂载

mount /dev/sdb1 /mnt       //挂载

Linux系统:引导过程与服务控制_第8张图片

⑤ 将mbr备份文件拷贝到新硬盘

dd if=/dev/sda of=/mnt/mbr count=1 bs=512           //将mbr备份文件拷贝到新硬盘

步骤二:模拟破坏mbr及其分区表

dd if=/dev/zero of=/dev/sda count=1 bs=512     //向/dev/sda的前512字节写0覆盖原来内容
hexdump -C -n 512 /dev/sda                  //查看前512字节

Linux系统:引导过程与服务控制_第9张图片

 步骤三:进入急救模式恢复mbr

①reboot重启后,选择“Troubleshooting”,再选择“Rescue a CentOS system”,最后选择“Continue”后,进入急救模式

Linux系统:引导过程与服务控制_第10张图片

②将备份文件拷贝到/dev/sda

mkdir bak         //新建文件夹
mount /dev/sdb1 bak     //将存有备份文件的硬盘挂载到新建文件夹下
dd if=bak/mbr of=/dev/sda          //将备份文件添加到原本的目录下
hexdump -C -n 512 /dev/sda       //查看到/dev/sda前512字节已恢复

Linux系统:引导过程与服务控制_第11张图片

重启即可正常使用系统

1.4.2 远程拷贝mbr文件

 步骤一:临时设置远程IP地址和子网掩码

ifconfig ens33 172.16.12.12/24        //临时设置远程IP地址和子网掩码

步骤二:scp远程复制文件

dd if=/dev/sda of=/mnt/mbr count=1 bs=512    //拷贝/dev/sda到/mnt/mbr
scp /mnt/mbr 172.16.12.12:/opt         //scp远程复制文件

Linux系统:引导过程与服务控制_第12张图片

 步骤三:模拟破坏mbr及其分区表

dd if=/dev/zero of=/dev/sda count=1 bs=512     //向/dev/sda的前512字节写0覆盖原来内容
hexdump -C -n 512 /dev/sda                  //查看前512字节

Linux系统:引导过程与服务控制_第13张图片

步骤四: 进入急救模式恢复mbr

①reboot重启后,选择“Troubleshooting”,再选择“Rescue a CentOS system”,最后选择“Skip to shell”后,进入急救模式

Linux系统:引导过程与服务控制_第14张图片

②拷贝远端设备的备份文件mbr到主机当前目录下,并将其添加到原本的目录下

ifconfig ens33 172.16.12.10/24       //设置主机临时ip地址
scp 172.16.12.12:/opt/mbr .          //拷贝远端设备的备份文件mbr到主机当前目录下
dd if=mbr of=/dev/sda             //将备份文件添加到原本的目录下
hexdump -C -n 512 /dev/sda       //查看到/dev/sda前512字节已恢复

Linux系统:引导过程与服务控制_第15张图片

Linux系统:引导过程与服务控制_第16张图片

2、修复GRUB引导故障

2.1 故障原因
  • MBR中的GRUB引导程序遭到破坏
  • grub.conf文件丢失、引导配置有误
2.2 故障现象
  • 系统引导停滞,显示‘grub>’提示符
2.3 解决思路
  • 尝试手动输入引导命令
  • 进入急救模式,重写或者从备份中恢复grub.conf
  • 向MBR扇区中重建grub程序
2.4 详细操作步骤

要求:模拟破坏grub文件及程序,然后对其进行修复

步骤一:模拟破坏grub.cfg配置文件

mv /boot/grub2/grub.cfg /opt     //将在规定目录下的grub.cfg配置文件移动到/opt

步骤二:重启进入急救模式

①reboot重启后,在starting读档的2s间快速按一次“ESC”键,出现“Boot Menu”界面,选择“CD-ROM Drive”,再选择“Troubleshooting”,再选择“Rescue a CentOS system”,最后选择“Continue”后,进入急救模式

Linux系统:引导过程与服务控制_第17张图片

②切换根后,重新安装grub2程序

chroot /mnt/sysimage     //从光盘的根切换到主机系统的根
grub2-install /dev/sda   //重新在sda磁盘中安装grub2程序
grub2-mkconfig -o /boot/grub2/grub.cfg   //重新生产配置文件
exit     //退出
reboot   //重启

Linux系统:引导过程与服务控制_第18张图片

 3、遗忘root用户的密码

3.1 故障原因
  • 忘记root用户的密码
3.2 故障现象
  • 无法进行需要root权限的管理操作
  • 若没有其他可以账号,将无法登陆系统
3.3 解决思路
  • 进入急救模式,重设密码
3.4 详细操作步骤
3.4.1 有光驱模式重设密码
chroot /mnt/sysimage     //从光盘的根切换到主机系统的根
passwd 用户名            //修改密码
exit     //退出
reboot   //重启

Linux系统:引导过程与服务控制_第19张图片

3.4.2 无光驱模式重设密码

①进入系统时选择内核界面,选中第一个选项并按“e”键

Linux系统:引导过程与服务控制_第20张图片

②将光标移动到Linux开头行的最后,添加rd.break,然后“ctrl+x”运行,进入单用户模式

Linux系统:引导过程与服务控制_第21张图片

③进入单用户模式后,重新挂载并添加读写权限,然后切换到系统的根修改密码

mount -o remount,rw /sysroot    //重新挂载并添加读写权限
chroot /mnt/sysimage     //从光盘的根切换到主机系统的根
passwd 用户名            //修改密码
touch /.autorlabel       //如果开启selinux需重新打上标记
exit     //退出
reboot   //重启

Linux系统:引导过程与服务控制_第22张图片

三、服务程序管理

1、管理服务程序的状态

开机、关机、重启、重新加载配置文件、查看状态、开机自启、开机不自启

2、chkconfig

chkconfig是Linux系统中早期的服务管理工具,应用于CentOS 6

chkconfig系统服务控制命令
命令 说明
service  服务程序  start 开启服务程序
service  服务程序  stop 关闭服务程序
service  服务程序  restart 重新启动服务程序
service  服务程序  reload 重新加载服务程序
service  服务程序  status 查看服务程序的当前状态
chkconfig  --level  35  服务程序  on 开机自启动服务程序的字符界面和图形界面
chkconfig  --level  35  服务程序  off 关闭开机自启动服务程序的字符界面和图形界面
chkconfig  --add  服务程序 添加自启动的服务程序

3、systemd

3.1 systemd命令

systemd是一个相对较新的系统管理器和初始化系统,应用于CentOS 7

systemd系统服务控制命令
命令 说明
systemctl  start  服务程序1  服务程序2…… 开启服务程序
systemctl  stop  服务程序1  服务程序2…… 关闭服务程序
systemctl  status  服务程序1  服务程序2…… 查看服务程序的当前状态
systemctl  reload  服务程序1  服务程序2…… 重新加载服务程序
systemctl  restart  服务程序1  服务程序2…… 重新启动服务程序
systemctl  enable  服务程序名 开机自启服务程序
systemctl  disable  服务程序名 开机不自启服务程序
systemctl  enable  --now  服务程序名 开机自启,并立即启动
systemctl  disable  --now  服务程序名 开机不自启,并立即关闭

注:

  • yum以及rpm安装的软件可直接使用systemctl去启动、关闭、重启、开机自启等功能
  • 编译安装不可以直接使用systemctl命令去管理程序,需要手写一个配置文件systemd unit(单元),systemd方便管理程序,将程序按特定的功能分成很多单元
3.2 配置编译安装的程序软件开机自启动的步骤

前提:以编译安装完的nginx服务软件为例

3.2.1 编写nginx开机自启动的配置文件
vim /usr/lib/systemd/system/nginx.service         //编写nginx开机自启动的配置文件

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

[Service]
Type=forking
PIDFile=/dh17/nginx/logs/nginx.pid                      //指定nginx进程的pid号
ExecStart=/dh17/nginx/sbin/nginx                        //使用绝对路径启动nginx可执行文件
ExecStop=/usr/bin/kill -s TERM $MAINPID                 //杀死nginx的主进程pid号
ExecReload=/dh17/nginx/sbin/nginx -s reload             //nginx命令发送重新加载的信号

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

Linux系统:引导过程与服务控制_第23张图片

 3.2.2 重新加载所有配置文件并开启nginx服务
systemctl daemon-reload      //通知systemd重新加载所有的配置文件
systemctl start nginx        //开启nginx服务
systemctl status nginx       //查看nginx当前状态

Linux系统:引导过程与服务控制_第24张图片

pstree -p | grep nginx       //查看当前nginx进程的pid号

ss -natp | grep 80       //查看80端口的进程信息

 3.2.3 关闭nginx服务
systemctl stop nginx        //关闭nginx服务
systemctl status nginx       //查看nginx当前状态

Linux系统:引导过程与服务控制_第25张图片

你可能感兴趣的:(linux,运维,服务器)