Linux系统回滚方案规划_异常恢复方法说明【指导】
发布时间 - 2025-12-30 00:00:00 点击率:次回滚前必须确认/boot剩余空间≥200MB、grub.cfg未被覆盖、/lib/modules/中存在当前内核目录;使用grub2-reboot临时切换内核最安全;rpm回滚受依赖、冲突和脚本限制;快照失效优先chroot修复fstab UUID。
回滚前必须确认的 3 个系统状态
Linux 系统回滚不是“一键还原”,失败往往源于回滚前未验证关键前提。最常被跳过的检查是:/boot 分区剩余空间、grub.cfg 是否被覆盖、以及当前内核是否仍在 /lib/modules/ 中存在对应目录。
-
/boot剩余空间不足 200MB 时,grub2-install或内核重装会静默失败,错误日志里只显示error: unknown filesystem—— 实际是写入失败后 GRUB 无法识别新生成的initrd - 运行
ls /lib/modules/$(uname -r),若返回空,说明当前运行的内核模块已丢失,此时强制重启大概率进不了系统 - 执行
grub2-editenv list | grep saved_entry,确认saved_entry指向的是可启动的老版本(如CentOS Linux (4.18.0-305.el8.x86_64) 8),而非gnulinux-advanced-*这类菜单项 ID
使用 grub2-reboot 回滚到指定内核(不改默认)
这是最安全的单次回滚方式:仅本次重启生效,不影响后续默认启动项,适合验证老内核是否仍可用。
grub2-set-default 'CentOS Linux (4.18.0-305.el8.x86_64) 8' grub2-reboot 'CentOS Linux (4.18.0-305.el8.x86_64) 8' reboot
注意:grub2-set-default 的参数必须与 grep menuentry /boot/grub2/grub.cfg 输出的完整字符串完全一致(包括括号和空格),大小写敏感;grub2-reboot 才真正触发下一次启动时的临时切换。
- 如果
grub.cfg是由dracut生成的(如 RHEL/CentOS 8+),修改后需再运行dracut --force确保 initramfs 匹配目标内核 - 某些云平台(如阿里云 ECS)禁用
grub2-reboot,此时只能用systemctl reboot --kexec配合提前设好的saved_entry
rpm -Uvh --oldpackage 回滚 RPM 包的硬限制
用 rpm 回滚单个软件包看似直接,但实际受三重约束:依赖版本锁、文件冲突、以及 %postun 脚本是否支持逆向操作。
- 执行
rpm -Uvh --oldpackage kernel-core-4.18.0-305.el8.x86_64.rpm前,先查依赖:rpm -qpR kernel-core-4.18.0-305.el8.x86_64.rpm | grep -E "(kernel|kmod)",确认无新增或降级依赖 -
--oldpackage不会自动卸载高版本,必须手动rpm -e kernel-core-5.14.0-284.el9.x86_64(否则触发文件冲突错误file /lib/modules/... conflicts between...) - 像
systemd、glibc这类核心包禁止用--oldpackage回滚,rpm 会直接拒绝,报错package systemd-252-17.el9.x86_64 is not older than systemd-252-18.el9.x86_64
快照回滚失败时的最小化救援路径
LVM 快照或 btrfs snapshot 失效后,别急着重装系统
。优先尝试从 initramfs 环境挂载旧根分区并 chroot 修复。
- 启动进 rescue mode 后,用
lsblk -f找出旧逻辑卷(如centos/root@pre-update)或 btrfs 子卷(btrfs subvolume list /mnt) - 对 LVM 快照,直接
mount /dev/centos/root@pre-update /mnt;对 btrfs,先btrfs subvolume set-default $(btrfs subvolume list / | grep pre-update | awk '{print $2}') /再重启 - 若 /etc/fstab 里 UUID 已变更,进 rescue 后用
blkid查新 UUID,并临时编辑/mnt/etc/fstab替换——这是 70% 的“快照能挂载但启动失败”问题的根源
回滚从来不是技术动作的堆砌,而是对变更链路每个环节的确定性验证。最危险的操作,永远发生在你确信“这步肯定没问题”的时候。
# linux
# centos
# 阿里云
# linux系统
# 一键还原
# print
# Error
# Filesystem
# 字符串
# 堆
# default
# 这是
# 重启
# 这类
# 的是
# 是由
# 软件包
# 只显示
# 报错
# 而非
# 重装
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
原生JS获取元素集合的子元素宽度实例
Laravel Fortify是什么,和Jetstream有什么关系
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
如何在阿里云通过域名搭建网站?
如何选择可靠的免备案建站服务器?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何快速搭建FTP站点实现文件共享?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel如何处理和验证JSON类型的数据库字段
JavaScript如何操作视频_媒体API怎么控制播放
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何在腾讯云免费申请建站?
Android中AutoCompleteTextView自动提示
使用Dockerfile构建java web环境
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
iOS验证手机号的正则表达式
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Android GridView 滑动条设置一直显示状态(推荐)
如何在云虚拟主机上快速搭建个人网站?
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
jquery插件bootstrapValidator表单验证详解
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
PHP 500报错的快速解决方法
php json中文编码为null的解决办法
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
如何确保FTP站点访问权限与数据传输安全?
如何快速打造个性化非模板自助建站?
lovemo网页版地址 lovemo官网手机登录
如何在IIS7上新建站点并设置安全权限?
Linux网络带宽限制_tc配置实践解析【教程】
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
如何在云主机上快速搭建网站?
如何自定义建站之星网站的导航菜单样式?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何在IIS中配置站点IP、端口及主机头?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
Laravel如何实现文件上传和存储?(本地与S3配置)
Python面向对象测试方法_mock解析【教程】
如何在阿里云域名上完成建站全流程?
如何快速搭建个人网站并优化SEO?
JavaScript数据类型有哪些_如何准确判断一个变量的类型
php结合redis实现高并发下的抢购、秒杀功能的实例
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
微信小程序 canvas开发实例及注意事项

