首页/系统/Linux 运维命令速查/场景:用 dnf history 回滚一次失败更新

场景:用 dnf history 回滚一次失败更新

更新踩坑(服务起不来/依赖不兼容)时优先事务回滚:dnf history 定位事务号、info 评估影响、undo/rollback 反转。

Linux 运维命令速查系统更新于 2026-10-13

dnf 事务回滚

dnf 为每一次事务(安装、升级、卸载)分配编号并记录前后状态,所以升级出错时可以先查历史再决定回滚方式:undo 反转指定的一次事务,rollback 回滚到某个事务之前的状态,二者都会连带处理依赖版本,比手工降级可靠得多。要清楚它的边界:回滚只涉及软件包,不会还原手工改过的配置与业务数据。数据库这类有状态服务,升级前的数据备份仍然不可缺少。

基本信息

适用平台RHEL 8 及以上、Fedora 等使用 dnf 的系统;yum 4 也提供同样的 history 子命令
命令语法dnf history [list|info|undo|rollback|redo] [事务号]
常用子命令list 列出事务 info 查看明细 undo 反转指定事务 rollback 回滚到某事务之前 redo 重做
前置条件旧版本包仍能从仓库获取,仓库已清理旧版本会导致操作失败
数据边界只回滚软件包,不涉及配置文件与业务数据

典型使用场景

  • 升级后服务起不来,需要快速回退到升级前版本
  • 误装了一批不兼容的包,撤销整次事务
  • 排查某次操作到底安装或删除了什么
  • 发布前核对本次变更清单
  • 演练回滚流程,验证预案是否可行

三步回滚

三步回滚
dnf history | head -n 15
dnf history info <事务号>            # 看这次装了什么、删了什么、升级了什么
dnf history undo <事务号>            # 反转该事务
dnf history rollback <事务号>        # 回滚到该事务之前的状态
dnf history info <新事务号>          # 核对撤销结果
systemctl restart <服务> && systemctl status <服务> --no-pager | head

undo 与 rollback 的差别

子命令作用范围适用场景
undo反转指定的那一次事务只想撤销刚才那一步操作
rollback回滚到指定事务之前,撤销其后的所有事务多次误操作后统一回到某个时间点
redo重新执行某次已回滚的事务误回滚后的补救
info查看事务明细撤销前评估影响范围
undo 会按当时记录恢复版本,但期间手工修改的配置与数据不会回滚。有状态服务在升级前必须单独备份数据,回滚不能替代备份。
回滚依赖仓库里还能取到旧版本。若仓库已更新或清理过旧包,undo 会因为找不到包而失败,此时只剩快照或备份可用。

易错点

  • 事务号看错,把无关变更一起回滚,撤销前必须用 info 逐条核对清单
  • 以为回滚能把配置文件一并复原,实际上配置与数据都不受影响
  • 仓库已清理旧版本导致回滚失败,事前没有准备快照或备份
  • Debian 侧没有等价的单命令回滚,只能按指定版本重装并配合快照

数据来源与参考

  • man 8 dnf(history undo/rollback)
  • Red Hat 文档:事务回滚

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌