m-zhuang

导航

Linux操作系统引导过程

一、引导顺序

开机自检(BIOS)---> MBR引导 ---> GRUB菜单 ---> 加载内核(kernel)---> init进程初始化

1. 开机自检

服务器开机时,将根据主板上的BIOS中的设置对CPU、内存、显卡、键盘等设备进行初步检测,检测成功后按照预设的启动顺序移交控制权,大多时候是移交给硬盘。

检测出第一个可以引导系统的设备,例如:硬盘、光驱

2. MBR引导

当从本机硬盘启动系统时,首先根据硬盘第一个扇区中的MBR(主引导记录)的设置,将系统的控制权传递给含有操作系统引导文件的分区或直接根据MBR记录中的引导信息调用启动菜单(例如:GRUB)

运行存放再MBR扇区里的启动GRUB引导程序

3. GRUB菜单

对于Linux操作系统来说,GRUB(统一系统加载器)是使用最广泛的多系统引导器程序。

系统控制权传到GRUB后,会先显示启动菜单给用户选择,根据所选项或默认值加载linux内核文件,然后将控制权转交给内核。

CentOS 7 采用的是 GRUB2 启动引导器

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

4. 加载Linux内核

Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配和调度。当控制权传到内核后,将完全掌握整个linux操作系统的运行过程。

CentOS 7 系统默认内核文件位置 /boot/vmlinuz

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

5. init进程初始化

为了完成进一步的系统引导过程,linux内核首先将系统中的 /sbin/init 程序加载到内存中运行,init进程负责完成整个系统的初始化,最后等待用户进行登录

加载硬件驱动程序,内核将init进程加载到内存中运行

二、初始化进程

1. init进程

(1)由linux内核加载运行 /sbin/int 程序

(2)init 进程是系统中第一个进程,是所有的进程的父进程

(3)init 进程的PID(进程标记)号永远为1

2. systemd

(1)systemd 是linux操作系统的一种init 软件

(2)CentOS 7 中采用的全新的system启动方式,取代传统的sysVinit

(3)CentOS 7 中运行的第一个init进程是 /lib/systemd/system

传统的 sysVinit 依赖于串行执行 shell 脚本启动服务,导致功率低下,系统启动速度较慢

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

三、systemd 单元类型

systemd 是用于管理linux系统服务和进程的系统和服务管理器,它使用unit来描述和控制系统服务和资源

systemd 通过单元(unit)来描述和管理系统服务和资源,每个单元都有一个对应的配置文件,通常存放在 /etc/systemd/system 目录下

主要的单元类型:

单元类型 扩展名 说明 作用
service .service 描述一个系统服务 用于启动和管理一个系统服务,可以指定服务的启动命令、依赖关系、日志记录等参数
socket .socket 描述一个进程间通信的套接字 用于监听网络套接字,并在接受请求时触发一个事件,可以用于管理网络服务、提供接口等(协议端口)
target .target 描述一组system的单元 是一组服务集合,可以用于描述系统在不同运行级别下的状态。例如:multi-user.target 描述了系统在多用户模式下运行的状态
timer .timer 描述一个定时器(用于实现cron的调度任务) 用于在指定的时间间隔或时间点触发一个事件,可以用于定时启动或停止服务、备份数据等任务
path .path 描述一个文件系统中的文件或目录 用于监控文件或目录的状态,在文件或目录发生变化时触发一个事件,可以用于监控日志文件、配置文件等系统资源
mount .mount 描述一个文件系统的挂载点 用于文件管理系统的挂载,可以指定文件系统类型、挂载选项等
swap .swap 描述一个内存交换设备或交换文件 用于管理交换空间的时候使用,可以指定交换分区、优先级等

使用system管理单元

编写配置文件

配置文件的名称应该以 .serviec、.socket、.target、.mount、.device 等后缀

配置文件中包含单元的相关信息,例如单元的类型、描述、启动参数、启动顺序、依赖关系等等

# 进入 /lib/systemd/system/ 目录下创建配置文件
vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
配置信息 含义
[Unit] 服务的说明
Description 描述服务
After 当依赖的服务启动之后再启动自定义的服务,
大多数应用程序需要与网络进行通信才能正常工作
network.target 系统目标在系统启动时负责启动网络相关的服务和程序
[Service] 服务运行参数的设置
Type=forking 是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程
ExecStart 为服务的具体运行命令
ExecReload 为重启命令
ExecStop 为停止命令
PrivateTmp=True 表示给服务分配独立的临时空间

注:启动、重启、停止命令全部要求使用绝对路径

四、系统服务控制

1. systemctl

命令格式:

systemctl 控制类型 服务名称

2. 控制类型

控制类型 作用
start 启动
stop 停止
restart 重启
reload 重新加载
status 查看服务状态

3. 实操

① 查看防火墙状态

[root@localhost ~]# systemctl status firewalld.service

② 关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service


③ 打开防火墙

[root@localhost ~]# systemctl start firewalld.service 

五、运行级别

1. 运行级别所对应的systemd目标

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

2. 查看和设置运行级别

(1)查看当前运行级别

命令:runlevel 只能查看切换运行级别与当前运行级别

[root@localhost ~]# runlevel
N 5

(2)查看默认运行级别

systemctl 工具可以查看默认的运行级别

[root@localhost ~]# systemctl get-default
graphical.target

(3)更改运行级别

① 将默认运行级别改为字符界面多用户模式

使用systemctl 工具更改

[root@localhost ~]# systemctl set-default rescue.target

② 将当前运行级别改为字符界面多用户模式

使用 init 修改

[root@localhost ~]# init 3


六、修复开机故障

1. 修复MBR扇区故障

(1)故障原因

病毒、木马造成的破坏

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

(2)故障现象

找不到应到程序,启动中断

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

(3)解决思路

MBR位于第一块硬盘(/dev/sda)的第一个物理扇区出,总共512字节

应提前准备好备份文件

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

从备份中恢复文件

修复MBR扇区故障

(4)实操

① 准备一块硬盘,将MBR备份至此硬盘中

# 创建主分区sdb1并格式化
[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# mkfs.xfs /dev/sdb1

# 创建sdb1挂载点并挂载
[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sdb1 /backup

# 进入sdb1挂载点将MBR备份
[root@localhost ~]# cd /backup/
[root@localhost backup]# dd if=/dev/sda of=mbr.bak bs=512 count=1

# 模拟MBR被破坏
[root@localhost backup]# cd
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1

# 重启
[root@localhost ~]# reboot

② 重启后无法进入系统

③ 引导界面进入急救模式

④ 进入字符界面模式

⑤ 进入后选择 Continue 继续,输入 1 回车

⑥ 敲击回车键继续

⑦ 进入shell的sh环境

⑧ 创建MBR备份文件所在分区的挂载点并挂载

⑨ 进入sdb1挂载目录,将mbr.bak中的MBR备份重新写入sda

⑩ 退出此界面

恢复成功

2. 修复GRUB引导故障

(1)故障原因

MBR中的GRUB引导程序遭到破坏

grub.confg文件丢失、引导配置有误

(2)故障现象

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

(3)解决思路

尝试手动进入引导命令

进入急救模式,重写或者从备份中恢复grub.conf

向MBR扇区重建grub程序

引导界面而进入急救模式,重建GRUB菜单配置文件

(4)实操

① 模拟GRUB出现故障

[root@localhost ~]# rm -rf /boot/grub2/grub.cfg
[root@localhost ~]# reboot

② 重启,当出现进度条时按esc键,进入急救模式

③ 选择CD-ROM 光盘镜像选项

④ 选择Troubleshooting 处理重大问题选项

⑤ 进入急救模式

⑥ 输入 1 继续

⑦ 输入回车进入shell的sh环境

⑧ 在MBR扇区重新安装grub引导程序并重新构建GRUB菜单配置文件

⑨ 退出bash环境

⑩ 重启系统

GRUB故障修复成功

3. 修改 root 密码

(1)步骤

① 先关闭selinux安全机制

setenforce 0

② 进入急救模式,加载系统镜像,切换到系统根环境

chroot /mnt/sysimage

③ 重设root用户密码

passwd root

(2)实操

① 关闭selinux安全机制

[root@localhost ~]# setenforce 0 

② 重启系统按esc键,进入BOOT菜单

③ 进入处理重大问题模式选项

④ 进入急救模式

⑤ 进入shell的sh环境

⑥ 进入系统根环境bash,passwd改密码

⑦ 退出bash环境,重启系统

⑧ 使用新密码登录,登陆成功

posted on 2023-05-11 00:26  m_zhuang  阅读(256)  评论(0编辑  收藏  举报