简述Linux系统的引导过程与服务控制

596 阅读5分钟

一、引导过程总览

1.1 开机自检(BIOS)

检测硬件设备,检测出第一个能引导系统的设备,硬盘。

1.2 MBR引导

运行在 MBR 扇区(硬盘的最小存储单位 512字节)里的启动 GRUB 引导程序

1.3 GRUB菜单

GRUB 引导程序通过读取GRUB配置文件(/boot/grub2/grub.cfg)获取内核和镜像文件系统的设置和路径,屏幕显示grub菜单

1.4 加载内核(kernel)

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

1.5 init进程初始化

内存会把init进程(systemd)加载到内存中运行

PS:init的pid固定为1,centos7的init进程为systemd,/sbin/init

centos6及以前使用的是sysVinit,传统SysVinit依赖于串行执行 Shell 脚本启动服务,导致效率低下,系统启动速度较慢

centos7的systemd是并行启动脚本服务,启动速度快;systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。

二、系统初始化进程

2.1 init进程

  • 有Linux内核加载运行/sbin/init程序
  • init进程是系统中第一个进程
  • init进程的PID(进程标记)号永远为1

2.2 systemd

  • systemd是Linux操作系统的一种init软件
  • centos7中采用了全新的systemd启动方式,取代传统的sysVinit
  • centos7中运行的第一个init进程是/lib/systemd/systemd

systemd单元类型

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

运行级别所对应的systemd目标

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

二、修复MBR扇区故障

2.1 故障原因

  • 病毒、木马等造成的破坏
  • 不正确的分区操作、磁盘读写误操作

2.2 故障现象

  • 找不到引导程序,启动终端
  • 无法加载操作系统,开机后黑屏

2.3 解决思路

  • 提前备份号文件
  • 以安装光盘引导进入急救模式
  • 从备份文件中恢复

2.4如何进行MBR扇区的故障修复

第一步:备份

我们进行备份的前提条件要求,除了我们本身的系统磁盘,我们还需要有额外的一块硬盘,并将系统磁盘的内容备份到另一块普通磁盘中。

image.png 我们先给下方一块新硬盘做一个文件系统,使其拥有存放文件的能力:

image.png 建立好第二块磁盘的文件系统后,我们进行文件的备份

首先,我们向将sda磁盘中的内容复制到一个文件夹下,取名为mbr.bak,并将这个文件复制到我们好的硬盘的挂载点上

image.png

image.png **PS:为什么我们只复制512字节?因为我们系统磁盘中前512字节中含有我们系统的引导程序,我们只需要复制引导程序,在后续的急救操作中正确修正即可正常进入系统

接下来我们模拟硬盘引导系统被破坏的情况:

image.png

查看一下我们现在系统磁盘的前512字节内容:

image.png

image.png 接下来我们使用虚拟机进入开机画面

image.png 如上图所示,我们的系统因为没有引导程序将会进入无限重启的情况,我们选择处理问题项进入操作界面:

image.png

image.png 进入系统后我们查看一下我们的系统磁盘文件是否是损坏状态:

image.png

image.png 我们从上面查看根目录能发现,我们之前存储的备份文件的文件夹并没有在根目录上。其实目前界面内的目录,属于一个虚拟目录,但是我们的数据是实际存在在我们的挂载点上。这个时候我们新建一个空目录,将我们另一块正常硬盘做一个挂载,挂载到我们的空目录上:

image.png 这个时候我们备份文件已经出现在我们挂载的新目录上了 接下来我们把备份文件重新覆盖回系统磁盘上

命令:dd if=/bak/mbr.bak of=/dev/sda count=1 bs=512

覆盖完后检查文件如下: image.png

image.png

image.png 重启结束后,我们正常可以进入系统了。

PS:我们急救模式里是自带一个小型的Linux系统的,我们的备份文件也一定要放到我们完好磁盘的挂载点上,如果只是存放在其他目录中,我们系统磁盘信息丢失,将无法找回备份文件,备份文件会一起随之丢失。