Linux操作系统引导过程及排障详解(systemd)

548 阅读8分钟

1. linux操作系统开机五步走

引导过程概述

linux引导过程一般包括以下几个阶段: 开机自检 、 MBR 引导 、GRUB 菜单 、加载Linux内核 、 init 进程初始化 。

image.png

1.1 开机自检(BIOS)

开机自检(BIOS):检测出第一个能够引导系统的设备,比如硬盘或者光驱或者pex 网络(网卡)。 bios设置的第一启动项。

服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘,因为操作系统一般都是装在硬盘内。自检过程中可以根据主机的POST信息进入配置,通常按某一组合键进入,常用F2或者delete。

1.2 MRB引导

MBR引导 :运行放在MBR扇区里的启动GRUB引导程序,MBR前446位是引导文件,后64位是分区表。** **

当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录中的引导信息调用启动菜单。在CentOS7系统中为grub2.

可以通过hexdump -C -n 512 /dev/sda查看前512字节(**hexdump主要用来查看“二进制”文件的十六进制编码**,)
-C 输出规范的十六进制和ASCII码
-n 输出多少字节

image.png

1.3 GRUB菜单

GRUB引导程序通过读取GRUB配置文件**/boot/grub2/grub.cfg**,来获取内核和镜像文件系统的设置以及路径位置。

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

1.4 加载内核 (操作系统 调度硬件)

加载Linux内核把内核和镜像文件系统加载到内存中

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

1.5 init 进程初始化 (内核第一个加载的程序)

加载硬件驱动程序,以及初始化进程,内核把init进程加载到内存中运行。

内核初始化在initramfs中找到驱动程序的所有硬件,然后作为PID 1从initramfis 执行/sbin/init ,CentOS 7中将其复制为systemd, systemd 启动initrd.target中所有单元,并挂载根文件系统/sysroot,内核与文件系统由内存文件系统切换至系统根文件系统, 井重新运行/sysroot systemd. systemd 启动默认tagt (图形或者字符终端),最后等待用户进行登录。 下面了解一下systemd

2.systemd是什么?

Systemd 是 Linux 系统工具,用来启动[守护进程],已成为大多数发行版的标准配置。

历史上,[Linux 的启动]一直采用[init]进程,但是init也有缺点:

  • 一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。

  • 二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。

Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。

根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。 Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的[Unix 哲学]

2.1systemd单元组成

  • 单元是不同类型的systemd对象
  • 使用systemctl管理
  • 查看系统中有效的单元可以使用命令∶systemctl -t help |单元类型 |扩展名 |说明| |---| ---|---| |Service |. service |描述─个系统服务| |Socket |.socket |描述—个进程间通信的套接字| |Device |.device |描述—个内核识别的设备文件| |Mount |.mount| 描述—个文件系统的挂载点| |utomount |.automount| 描述—个文件系统的自动挂载点| |Swap |.swap |描述—个内存交换设备或交换文件| |Path |.path |描述—个文件系统中文件或目录| |Timer |.timer| 描述—个定时器(用于实现类似cron的调度任务)| |Snapshot |.snapshot 用于保存一个systemd的状态(开机,还是关机,还是挂机) |Scope |.scope |使用systemd的总线接口以编程的方式创建外部进程(例如光驱、u盘)| |Slice| .slice| 描述居于Cgroup的一组通过层次组织的管理系统进程| |Target |.target |描述—组systemd的单元|

2.2 systemctl常用服务管理命令

systemctl命令可以控制系统服务,此命令涵盖了centos7之前版本中的servie命令和chkconfig的功能。


2.3 命令格式:

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

2.4 命令选项

参数效果
start开始程序
restart重启服务
status查看服务状态
stop停止服务
reload重新加载服务
--desable设置服务为开机不启动
--enable设置服务开机启动
--now设置现在启动或关闭,可以和-enable disable同时使用
list-unit-files查看所有服务
--now disbale  enable的结合使用
systemctl enable --now  +服务名  (开机不自启并立刻关闭)
systemctl disable --now  +服务名 (开机不启动并开启)

3.系统运行级别

概述

运行级别systemd的target说明
0target关机状态,使用该级别时将会关闭主机
1rescue.target单用户模式,不需要密码验证即可登录系统,多用于系统维护
2multi-user.target用户定义/域特定运行级别。默认等同于3
3multi-user.target字符界面的完整多用户模式,大多数服务器主机运行在此级别
4multi-user.target用户定义/域特定运行级别。默认等同于3
5graphical.target图形界面的多用户模式,提供了图形桌面操作环境
6reboot.target重新启动,使用该级别时将会重启主机

级别0和级别6慎重适用

3.1查看运行级别

runlevel :查看切换运行级别和当前运行级别

runlevel

 [root@localhost ~]# runlevel
 N 5   
 N:(N代表前一次没有切换过运行等级,其他数字则代表前一次使用的运行等级)
 5:(5代表当前运行等级)
 ​

systemctl

 [root@localhost ~]# systemctl get-default 
 graphical.target
 (查看目前级别,和runlevel不一样的是,英文显示)

3.2临时切换运行级别

0关机
1单用户
2多用户
3完全多用户模式
5图形界面
6重启

init命令

init + 1-6

systemctl命令

systemctl set-default+想要设置的系统运行等级

2.系统开机故障 (试验 )

2.1修复mbr扇区故障

故障原因

病毒、木马等造成的破坏

不正确的分区操作、磁盘读写误操作

故障现象

找不到引导程序,启动中断

无法加载操作系统,开机后黑屏

解决思路

应提前做好备份文件

以安装光盘引导进入急救模式

试验步骤

1.添加硬盘,格式化,并挂载
  • 添加硬盘 image.png

  • 格式化 image.png

  • 挂载 image.png

2备份系统盘的分区表到新建的盘里

image.png

  • 确认文件已经拷贝过去 image.png
3.模拟破坏MBR引导区

image.png

4.重启进入急救模式
  • 看到载入画面按一次ESC进入boot菜单 image.png
  • 启动项改为光驱

image.png

  • 选择急救模式 image.png

  • 选择急救模式 image.png

6.从备份文件中恢复MBR数据(在bois急救模式下)

image.png

7.重启查看是否成功
  • 成功 image.png

3.修复GRUB引导故障 (试验)

故障原因

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

故障现象

  •  系统引导停滞,显示‘grub>’提示符

解决思路

  •  尝试手动输入引导命令
  •  进入急救模式,重写或者从备份中恢复grub.conf
  •  向MBR扇区中重建grub程序

实验步骤

1.删除grub.cfg文件以模拟故障

image.png

  • 删除后充会显示以下内容 image.png
2.进入急救模式回复grub.cfg

image.png

4.忘记用户密码 (试验)

故障原因

  •  遗忘root用户密码

故障现象

  •  无法进行需要root权限的管理操作
  •  若没有其他账号可用,将无法登陆系统

解决思路

  •  进入急救模式,重设密码

试验步骤

1.进入急救模式更改密码,最后exit退出,reboot重启

image.png

2.成功进入系统

image.png