news 2026/7/23 1:31:59

Linux救援模式和系统恢复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux救援模式和系统恢复

Linux 的救援模式和系统恢复、SysVinit、systemd、运行级别

文章目录

  • 一、Linux 服务是什么
    • 1.1 服务的主要特征
    • 1.2 常见服务类型
  • 二、CentOS 6:SysVinit 服务管理
    • 2.1 service 命令
    • 2.2 SysVinit 的启动思路
  • 三、CentOS 7/8/9:systemd 服务管理
    • 3.1 systemctl 常用命令
    • 3.2 firewalld 服务操作示例
    • 3.3 start 和 enable 的区别
    • 3.4 enabled、disabled 和 static
    • 3.5 查看服务清单
  • 四、运行级别与 systemd target
    • 4.1 CentOS 6 传统运行级别
    • 4.2 systemd target 对应关系
    • 4.3 查看和修改默认 target
    • 4.4 临时切换 target
  • 五、Linux 启动流程
    • 5.1 从固件到 systemd
    • 5.2 启动问题排查命令
  • 六、救援模式与系统恢复
    • 6.1 哪些情况需要救援模式
    • 6.2 普通单用户模式
    • 6.3 使用 rd.break 进入救援环境
    • 6.4 使用安装介质救援
    • 6.5 密码恢复与 SELinux 注意事项
  • 七、服务故障排查顺序
  • 八、复习检查点
  • 总结
  • 九、注意事项

一、Linux 服务是什么

服务(Service)通常是一个在后台持续运行的程序或进程。它可能在系统启动时自动加载,也可能按管理员操作或其他单元依赖被启动。

可以把服务理解成系统里的“后台工作组”:用户不需要一直在终端前控制它,但它会持续监听请求、处理任务和维护系统功能。

1.1 服务的主要特征

  • 后台运行:一般不直接占用交互终端。
  • 持续存在:通常会长期运行,而不是完成一次操作就退出。
  • 提供功能:通过端口、Socket、定时器、设备事件或进程间通信响应请求。
  • 可被管理:可以启动、停止、重启、重新加载、查看状态和配置开机启动。
  • 通常有日志:便于审计启动过程、请求处理和故障原因。

服务与普通后台进程的区别不在于“有没有界面”,而在于是否被服务管理框架纳入统一生命周期管理。systemd 管理的服务通常有 Unit 文件、依赖关系、重启策略和日志入口。

1.2 常见服务类型

类型常见服务作用
网络与远程访问sshdNetworkManagerSSH 登录、网络连接管理
Web 服务nginxhttpdWeb 服务器、反向代理
数据库mysqldpostgresql数据存储和查询
日志rsyslogsystemd-journald收集和保存系统日志
计划任务crondatd周期任务和一次性任务
容器dockercontainerd容器运行环境
设备与通信udevdbus设备管理、进程间通信

二、CentOS 6:SysVinit 服务管理

CentOS 6 及更早版本主要使用 SysVinit。服务通常通过/etc/init.d/下的 Shell 脚本管理,再使用service命令调用对应脚本。

2.1 service 命令

基本格式:

service<服务名><操作>

常见操作:

命令作用
service httpd start启动 httpd
service httpd stop停止 httpd
service httpd restart重启 httpd
service httpd reload重新加载配置,是否支持取决于服务脚本
service httpd status查看 httpd 状态

管理其他服务时替换服务名:

servicemysqld stopservicenetwork restartservicentpd reloadserviceiptables status

2.2 SysVinit 的启动思路

SysVinit 依赖运行级别和启动脚本链接,通常按编号顺序启动或停止服务。

常见目录包括:

/etc/init.d/ /etc/rc.d/rc0.d/ /etc/rc.d/rc3.d/ /etc/rc.d/rc5.d/

S开头的链接通常表示进入某个运行级别时启动,以K开头的链接通常表示停止。编号决定执行顺序。

这种方式直观,但服务依赖和并行启动能力有限,因此较新的发行版普遍使用 systemd。

三、CentOS 7/8/9:systemd 服务管理

systemd 使用 Unit 统一表示服务、Socket、挂载点、定时器、target 等资源。服务 Unit 常见后缀是.service

命令中省略.service时,systemd 通常会自动补全:

systemctl status firewalld systemctl status firewalld.service

这两种写法通常等价。

3.1 systemctl 常用命令

命令作用
systemctl start nginx立即启动服务
systemctl stop nginx立即停止服务
systemctl restart nginx停止后重新启动
systemctl reload nginx让服务重新加载配置,要求服务支持 reload
systemctl status nginx查看当前状态、主进程和最近日志
systemctl enable nginx设置开机自启
systemctl disable nginx取消开机自启
systemctl is-active nginx判断当前是否处于 active 状态
systemctl is-enabled nginx判断是否配置开机启动
systemctl enable --now nginx设置开机自启并立即启动
systemctl disable --now nginx取消开机自启并立即停止

restartreload不能混为一谈:

  • restart会重新启动进程,通常会产生短暂中断。
  • reload尝试让原进程重新读取配置,是否支持取决于服务实现。

3.2 firewalld 服务操作示例

查看防火墙服务:

systemctl status firewalld.service

停止服务:

systemctl stop firewalld.service

启动服务:

systemctl start firewalld.service

重启服务:

systemctl restart firewalld.service

取消开机自启:

systemctl disable firewalld.service

设置开机自启:

systemctlenablefirewalld.service

操作完成后分别检查“当前状态”和“开机状态”:

systemctl is-active firewalld systemctl is-enabled firewalld

3.3 start 和 enable 的区别

这是服务管理中最常见的易错点。

命令影响当前运行影响下次开机
systemctl start service是,立即启动
systemctl stop service是,立即停止
systemctl enable service通常不立即启动是,建立开机启动关系
systemctl disable service通常不立即停止是,移除开机启动关系
systemctl enable --now service

一句话记忆:start管当前,enable管下次开机。

3.4 enabled、disabled 和 static

使用下面的命令可以查看 Unit 文件状态:

systemctl list-unit-files--type=service

常见状态:

状态含义
enabled已建立开机启动关系,会被目标 Unit 拉起
disabled没有建立开机启动关系,但仍可以手动启动
staticUnit 通常没有[Install]安装规则,不能直接 enable,但可以被依赖、Socket、DBus 或其他 Unit 拉起
masked被链接到/dev/null,禁止启动,包括依赖触发

如果一个 Unit 是static,不代表它“已经开机自启”,也不代表它“完全不能运行”。它通常由其他 Unit 按依赖关系启动。

3.5 查看服务清单

查看当前已经加载的服务 Unit:

systemctl list-units--type=service

查看全部服务 Unit 文件及启用状态:

systemctl list-unit-files--type=service

查看运行失败的 Unit:

systemctl--failed

查看某个服务的依赖关系:

systemctl list-dependencies nginx

查看 Unit 文件内容及覆盖配置:

systemctlcatnginx

四、运行级别与 systemd target

4.1 CentOS 6 传统运行级别

运行级别含义常见场景
0关机系统停止
1单用户模式系统维护、密码恢复
2多用户模式,传统定义中不含网络实际很少使用
3完整多用户文本模式服务器常见运行状态
4保留或自定义很少使用
5图形界面模式桌面系统
6重启系统重新启动

运行级别表示系统希望进入的整体状态,而不是某一个单独服务。

4.2 systemd target 对应关系

传统运行级别systemd Target含义
0poweroff.target关机
1ssinglerescue.target单用户救援模式
234multi-user.target多用户文本模式
5graphical.target图形界面模式
6reboot.target重启
emergencyemergency.target最简紧急模式

systemd 中传统运行级别2/3/4通常都映射到multi-user.target,没有 SysVinit 时代那种实质区别。

查看兼容链接:

ls-l/usr/lib/systemd/system/runlevel*.target

典型关系:

runlevel0.target -> poweroff.target runlevel1.target -> rescue.target runlevel2.target -> multi-user.target runlevel3.target -> multi-user.target runlevel4.target -> multi-user.target runlevel5.target -> graphical.target runlevel6.target -> reboot.target

4.3 查看和修改默认 target

查看默认启动目标:

systemctl get-default

服务器常见输出:

multi-user.target

设置图形界面为默认目标:

systemctl set-default graphical.target

设置文本多用户模式:

systemctl set-default multi-user.target

这会影响后续启动。生产环境修改前要确认图形组件是否安装、远程连接是否可靠,以及是否有控制台或回滚方式。

4.4 临时切换 target

临时切换到多用户文本目标:

systemctl isolate multi-user.target

临时切换到图形目标:

systemctl isolate graphical.target

isolate会停止当前目标不需要的 Unit,并启动新目标需要的 Unit,可能中断网络、图形会话或业务服务。远程服务器上执行前必须确认影响。

查看某个 target 依赖哪些 Unit:

systemctl list-dependencies multi-user.target

五、Linux 启动流程

5.1 从固件到 systemd

现代 Linux 的典型启动流程可以概括为:

BIOS / UEFI -> 引导设备和启动项 -> GRUB2 -> 加载 Linux Kernel 和 initramfs -> 内核初始化硬件并挂载临时根文件系统 -> 启动 systemd(PID 1) -> systemd 进入默认 target -> 按依赖关系启动服务 -> 提供登录终端或图形界面

各阶段作用:

  1. BIOS/UEFI 完成硬件初始化并选择启动设备。
  2. GRUB2 展示内核菜单并加载指定内核与 initramfs。
  3. Kernel 初始化 CPU、内存、驱动和设备。
  4. initramfs 提供真正根文件系统挂载前所需的临时环境和驱动。
  5. 根文件系统挂载后启动 systemd,systemd 成为 PID 1。
  6. systemd 读取默认 target,按依赖关系启动服务和登录环境。

理解启动流程后,故障位置更容易判断:

  • 看不到 GRUB:检查固件、磁盘和引导记录。
  • 内核启动报错:检查内核、initramfs、驱动和内核参数。
  • 进入 emergency/rescue:检查文件系统、挂载、fstab和关键配置。
  • 系统能登录但服务没起来:检查 systemd Unit、依赖和服务日志。

5.2 启动问题排查命令

查看本次启动的错误日志:

journalctl-b-perr

查看上一次启动日志:

journalctl-b-1

查看启动耗时:

systemd-analyze systemd-analyze blame systemd-analyze critical-chain

查看失败 Unit:

systemctl--failed

查看内核消息:

dmesg-T|less

六、救援模式与系统恢复

6.1 哪些情况需要救援模式

救援模式用于系统无法正常启动或无法正常登录时的维护,例如:

  • 忘记管理员密码。
  • /etc/fstab配置错误导致启动失败。
  • 文件系统损坏,需要离线检查或修复。
  • 关键配置文件修改错误。
  • GRUB、内核或 initramfs 出现问题。
  • 普通 target 无法进入,需要最小维护环境。

救援模式权限很高,只能用于本人或已经明确授权的系统。操作前应确认磁盘、根分区、挂载路径和备份情况。

6.2 普通单用户模式

资料中的 CentOS 7 实验使用 GRUB 编辑内核参数进入无密码 Root Shell。

操作步骤
  1. 重启系统,在 GRUB 内核菜单中选择要启动的内核,不要直接回车。
  2. e编辑启动项。
  3. 找到以linux16linuxefilinux开头的内核参数行。
  4. 将根文件系统参数中的ro修改为rw
  5. 在该行末尾添加:
init=/bin/bash
  1. Ctrl+X启动,进入 Root Shell。
  2. 修复配置或使用passwd重置密码。
  3. 处理 SELinux 标签后重启并验证。

不同发行版和内核版本的 GRUB 参数名称可能不同,操作前应先拍照或记录原参数,避免误删其他启动参数。

6.3 使用 rd.break 进入救援环境

在许多使用 dracut 的 RHEL/CentOS 系统中,rd.break是更常见的恢复方式。

  1. 在 GRUB 菜单按e
  2. 找到内核参数行,在末尾追加:
rd.break
  1. Ctrl+X启动,进入 initramfs 的维护 Shell。
  2. 把原系统根目录重新挂载为可写:
mount-oremount,rw /sysroot
  1. 切换到原系统根目录:
chroot/sysroot
  1. 重置密码:
passwdroot
  1. 如果 SELinux 处于 Enforcing,创建重新标记文件:
touch/.autorelabel
  1. 退出 chroot 和救援 Shell:
exitexit

系统随后会重启或继续启动。重新标记文件可能需要较长时间,不要中途强制断电。

6.4 使用安装介质救援

资料中的流程使用 CentOS 安装光盘或 ISO:

  1. 确认虚拟机或物理服务器可以从安装介质启动。
  2. 进入 Boot Menu,选择 CD-ROM、ISO 或 USB 启动。
  3. 选择Troubleshooting
  4. 选择Rescue a CentOS system
  5. 按提示让救援环境查找并挂载原系统。

CentOS 7 常见挂载点:

/mnt/sysimage

切换到原系统:

chroot/mnt/sysimage

某些较新系统或其他救援环境可能使用/mnt/sysroot,不要机械照抄路径,应先执行:

lsblk-fmountls/mnt

确认原系统挂载位置后,再执行修复操作。

常见维护动作:

passwdrootvi/etc/fstab grub2-mkconfig-o/boot/grub2/grub.cfg

如果/boot或 EFI 分区是独立分区,要先确认它们已经正确挂载。重建 GRUB 的命令和输出路径也会随 BIOS/UEFI、发行版版本变化,不能只凭一条命令覆盖所有环境。

6.5 密码恢复与 SELinux 注意事项

资料中提到删除/etc/passwd中 root 用户密码字段的x。这种做法可能形成空密码或破坏 Shadow 密码机制,安全风险很高,不建议作为常规密码恢复方案。

更推荐:

passwdroot

/etc/passwd中的x表示实际密码哈希保存在/etc/shadow,不是“密码内容本身”。不要为了重置密码随意删除它。

SELinux 也不需要为了重置密码而永久关闭。更稳妥的处理方式是:

touch/.autorelabel

让系统下次启动时重新标记文件安全上下文。不同版本的恢复流程可能还需要根据发行版文档使用restorecon或其他方式。

七、服务故障排查顺序

服务启动失败时,可以按下面的顺序排查:

1. 查看当前状态

systemctl status nginx --no-pager-l

重点关注:

  • Loaded:Unit 文件是否加载,是否 enabled。
  • Active:当前是 active、inactive 还是 failed。
  • Main PID:主进程 PID。
  • 最近几行日志和退出码。

2. 查看服务日志

journalctl-unginx-bjournalctl-unginx-n100--no-pager

3. 检查配置语法

不同服务使用自己的检查命令,例如:

nginx-tsshd-t

配置语法没通过时,不要反复重启服务。

4. 检查端口和进程

ss-lntupps-ef|grep'[n]ginx'

确认是否存在端口冲突、旧进程残留或进程启动后立即退出。

5. 检查依赖和资源

systemctl list-dependencies nginxdf-hdf-ifree-h

磁盘空间、inode、内存、挂载和依赖服务都可能导致启动失败。

6. 再决定 restart、reload 或修复配置

  • 仅配置变化且服务支持:优先reload
  • 进程状态异常或必须重新初始化:使用restart
  • Unit 或依赖错误:先修复配置,再启动。

总结

CentOS 服务管理经历了从 SysVinit 到 systemd 的演进。SysVinit 主要通过service 服务名 操作调用启动脚本;systemd 使用systemctl统一管理服务及其依赖、开机启动和运行状态。

服务管理中必须分清两组概念:start/stop影响当前运行,enable/disable影响开机启动;运行级别描述系统整体状态,systemd 使用 target 表达这些目标状态。

当系统无法正常启动时,应先判断故障发生在引导、内核、文件系统、systemd 还是具体服务阶段。救援模式的核心思路不是“绕过密码”,而是进入一个可维护环境,正确挂载原系统,再对配置、文件系统、引导或账号进行受控修复。

九、注意事项

  1. systemctl start不等于开机自启,systemctl enable也不等于服务已经立即运行;需要两者同时生效时使用enable --now

  2. restart会重新启动进程,可能造成业务中断;服务支持平滑加载时,配置变更优先评估reload

  3. staticUnit 通常不能直接 enable,但可能被其他 Unit 依赖并正常启动;不要简单理解为“无效服务”。

  4. masked会阻止 Unit 被手动或依赖启动,排查“服务怎么都启动不了”时要检查是否被 mask。

  5. 生产环境不要随意执行systemctl isolate或修改默认 target,远程连接、图形会话和业务服务可能被停止。

  6. 修改服务配置后先运行对应的语法检查命令,再执行 reload 或 restart,避免把可用服务直接重启失败。

  7. 救援模式拥有最高系统权限,只能操作本人或已经明确授权的设备,并提前确认根分区、挂载路径和备份情况。

  8. 不建议通过删除/etc/passwd中的x来恢复 root 密码。应使用passwd,并正确处理/etc/shadow与 SELinux 标签。

  9. CentOS 7、8、9 以及其他发行版的 GRUB 参数、根目录挂载点和救援菜单可能不同,操作前先确认当前版本。

  10. 修复完成后要重启并验证:默认 target、关键服务、网络、挂载、账号登录和 SELinux 状态,不能只确认密码可以使用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 1:28:31

Unity动画覆盖控制器:实现逻辑复用与表现差异的高效方案

1. 项目概述&#xff1a;为什么需要动画覆盖&#xff1f;在Unity引擎开发中&#xff0c;动画系统是赋予角色和物体生命力的核心。无论是主角的挥剑、怪物的咆哮&#xff0c;还是一个开关门的简单动作&#xff0c;都离不开Animator Controller的驱动。然而&#xff0c;在实际项目…

作者头像 李华
网站建设 2026/7/23 1:26:47

学 Linux_day7 编写第一个Bash脚本,实现一键编译运行第一个C程序

第一个 Bash 脚本&#xff1a;一键编译运行 Hello World一、我们之前怎么做&#xff1f; 之前写好了 hello.c 后&#xff0c;操作过程是&#xff1a; gcc hello.c -o hello ./hello每次修改代码后&#xff0c;都要重复敲这两条命令。 现在我们把它写进一个脚本&#xff0c;以后…

作者头像 李华
网站建设 2026/7/23 1:25:39

2026最新5款Claude Code高性价比平替实测对比

我是一名全栈独立开发者&#xff0c;平时接一些外包项目来做&#xff0c;每个月都要在AI编程工具上花不少订阅费。最近 Claude Code 按用量计费的模式让我账单越来越高&#xff0c;随便用用一个月就要一两百美元&#xff0c;对于独立开发者来说实在吃不消。我开始寻找合适的平替…

作者头像 李华
网站建设 2026/7/23 1:22:15

架构思维在人生规划中的应用与实践

1. 从技术架构到人生架构的思维跃迁第一次听到"人生架构"这个概念是在2015年北欧的一次技术峰会上。当时Tieto&#xff08;叠拓&#xff09;的一位首席架构师在演讲结尾突然话锋一转&#xff1a;"我们整天讨论系统架构&#xff0c;但有没有想过自己的人生也需要…

作者头像 李华
网站建设 2026/7/23 1:20:27

HarmonyOS ArkTS 实战:实现一个校园证件照拍摄与预约应用

HarmonyOS ArkTS 实战:实现一个校园证件照拍摄与预约应用 项目效果 本文使用 HarmonyOS 和 ArkTS 实现一个校园证件照拍摄与预约应用。 应用可以预约证件照拍摄,选择证件照尺寸,在线选片,查看拍摄样片,并提供拍摄预约、照片下载、打印配送等功能。 项目使用 DevEco Studio…

作者头像 李华