一、引导过程总览
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 | 说明 |
|---|---|---|
| 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 | 重新启动,使用该级别时将会重启主机 |
二、修复MBR扇区故障
2.1 故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
2.2 故障现象
- 找不到引导程序,启动终端
- 无法加载操作系统,开机后黑屏
2.3 解决思路
- 提前备份号文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
2.4如何进行MBR扇区的故障修复
第一步:备份
我们进行备份的前提条件要求,除了我们本身的系统磁盘,我们还需要有额外的一块硬盘,并将系统磁盘的内容备份到另一块普通磁盘中。
我们先给下方一块新硬盘做一个文件系统,使其拥有存放文件的能力:
建立好第二块磁盘的文件系统后,我们进行文件的备份
首先,我们向将sda磁盘中的内容复制到一个文件夹下,取名为mbr.bak,并将这个文件复制到我们好的硬盘的挂载点上
**PS:为什么我们只复制512字节?因为我们系统磁盘中前512字节中含有我们系统的引导程序,我们只需要复制引导程序,在后续的急救操作中正确修正即可正常进入系统
接下来我们模拟硬盘引导系统被破坏的情况:
查看一下我们现在系统磁盘的前512字节内容:
接下来我们使用虚拟机进入开机画面
如上图所示,我们的系统因为没有引导程序将会进入无限重启的情况,我们选择处理问题项进入操作界面:
进入系统后我们查看一下我们的系统磁盘文件是否是损坏状态:
我们从上面查看根目录能发现,我们之前存储的备份文件的文件夹并没有在根目录上。其实目前界面内的目录,属于一个虚拟目录,但是我们的数据是实际存在在我们的挂载点上。这个时候我们新建一个空目录,将我们另一块正常硬盘做一个挂载,挂载到我们的空目录上:
这个时候我们备份文件已经出现在我们挂载的新目录上了
接下来我们把备份文件重新覆盖回系统磁盘上
命令:dd if=/bak/mbr.bak of=/dev/sda count=1 bs=512
覆盖完后检查文件如下:
重启结束后,我们正常可以进入系统了。
PS:我们急救模式里是自带一个小型的Linux系统的,我们的备份文件也一定要放到我们完好磁盘的挂载点上,如果只是存放在其他目录中,我们系统磁盘信息丢失,将无法找回备份文件,备份文件会一起随之丢失。