一、Linux操作系统引导过程
1.1 引导过程
Linux引导过程一般包括以下几个阶段:
- 开机自检(BIOS):检测出第一个能够引导系统的设备,要不是硬盘,要么是光驱。服务器开机之后,根据主板bios中的位置,对cpu内存、显卡、硬盘等一系列设备进行初步的检测。主要检测设备是否正常运行(指硬盘),系统开始移交控制权,把控制权交给硬盘/sde/sda
- MBR引导:第一个扇区MBR,引导系统找到boot分区,就找到了系统的启动程序,根据mbr记录,调用启动菜单grub,系统控制权移交给grub。就是引导包含操作系统的引导文件
- grub菜单(grub:统一启动加载器):获取用户选择的操作系统指定的内核以及镜像文件。多系统的引导程序。控制权到达grub菜单,显示启动菜单给用户选择。选择后(或采用默认值),加载所选的操作系统的Linux内核文件,系统控制权移交内核
- 加载内核:内核是一个已经编译好的二进制文件,可直接执行。介于硬件资源和系统程序之间,内核的作用就是负责资源的分配、调度,给这些系统程序来进行使用,这个时候,内核文件将控制整个系统的运行过程驱动程序,用户自定义的开机自启动的程序,以及系统启动必要的环境程序,这个时候只是在分配资源,程序还没有运行,提前分配好资源,统统加载到内核中去,移交控制权给系统的初始化程序。就是将驱动程序、系统依赖程序、用户自定义程序调度、分配资源,放到内存中
- lnit进程初始化:加载到内存中,在内存中开始运行,/sbin/init开启运行上述程序、驱动、用户自定义、系统必要的环境程序,全部启动,等待用户登录
1.2 init进程(CentOS 6)
-
由Linux内核加载运行/sbin/init程序;
-
init进程是系统中第一个进程,是所有进程的父进程;
-
init进程的PID(进程标记)号永远为1
1.3 systemd进程(CentOS 7)
- 进化的init初始化程序,并启动,速度快
- 第一个init是systemd PID 1 也是所有进程的父进程
特点:
- 并行处理
- 支持自动重启服务,确保进程的可靠性和稳定性
- 动态调整服务参数和资源控制,提高灵活性和可管理性
- 支持启动依赖关系,确保进程的正确启动和运行
- 支持命令行,也可支持图形化工具
作用:主要用于管理系统进程的管理器,通过单元[unit]来描述和控制系统进程和资源,通过单元类型来进行控制
1.4 Systemd单元类型
单元类型 | 扩展名 | 说明 |
---|---|---|
Service | .service | 描述一个系统服务 |
Socket | .socket | 描述一个进程间通信的套接字 |
Device | .device | 描述一个内核识别的设备文件 |
Mount | .mount | 描述—个文件系统的挂载点 |
utomount | .automount | 描述—个文件系统的自动挂载点 |
Swap | .swap | 描述—个内存交换设备或交换文件 |
Path | .path | 描述—个文件系统中文件或目录 |
Timer | .time | 描述—个定时器(用于实现类似cron的调度任务) |
Snapshot | .snapshot | 用于保存一个systemd的状态(开机,还是关机,还是挂机) |
Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程(例如光驱、u盘) |
Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
Target | .target | 描述—组systemd的单元 |
- Service:启动,管理一个系统进程,friewalld、httpd、mysql可以指定进程的启动、关闭、重启、查看状态、依赖环境、日志记录
- Socket:通信套接字,监听网络套接字,管理网络服务,提供网络接口
- Target:一组服务的集合,用于描述系统在不同运行级别下的状态
系统的控制命令:systemctl
格式:systemctl 控制类型 进程名称
控制类型:
开启:start
停止:stop
重启:restart(只要修改配置文件必须重启)
重新加载:reload(不能轻易启动,比如数据库)
查看状态:status
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
例:init 6 重启
查看当前系统级别:systemctl get-default
永久改变系统级别:systemctl set-default multi-user.target(3)
二、排除启动类故障
2.1 修复MBR扇区故障
故障原因
- 病毒、木马等造成的破坏
- 不正确的分区操作、磁盘读写误操作
故障现象
- 找不到引导程序,启动中断
- 无法加载操作系统,开机后黑屏
解决思路
- 应提前作好备份文件
- 以安装光盘引导进入急救模式
- 从备份文件中恢复
案例:MBR被删除,导致系统无法启动
1.在设置里设置光盘镜像,加载光盘镜像
2.MBR在/sda的第一个扇区,所以先创建一个硬盘分区将/sda下MBR备份到新建的分区
- 创建/sdb/sdb1分区,并进行格式化和挂载
- 将sda下第一个扇区MBR文件备份到/data
3.模拟故障,使用空字符将/sda第一个扇区MBR文件填满,reboot进行重启
4.在重启界面下进入急救模式
2.2 修复GRUB引导故障
故障原因
- MBR中的GRUB引导程序遭到破坏
- grub.cfg文件丢失、引导配置有误
故障现象
- 系统引导停滞,显示“grub>”提示符
解决思路
- 尝试手动输入引导指令
- 进入急救模式,重写或者从备份中恢复grub.conf
- 向MBR扇区中重建grub程序
案例:MBR中的GRUB引导程序遭到破坏
1.先模拟故障:将grub.cfg文件删除,并重启
2.重启并快速按“esc”键进入急救模式
2.3 遗忘root用户密码
故障原因
- 遗忘root用户的密码
故障现象
- 无法进行需要root权限的管理操作
- 若没有其他可用账号,将无法登录系统
解决思路
- 进入急救模式,重置密码
案例1:在普通用户忘记密码无法切入管理员账户
1.首先需要关闭安全机制,重启
2.重启并快速按“esc”键进入急救模式
案例2:当在管理员界面忘记密码