用 system-upgrade 做版本间升级
Fedora 的「升级」是版本间升级(如 F43 → F44),不是 EL 系那种跨大版本迁移。官方给出三条路径,选错路径的后果不是「不推荐」,而是不受支持。
先明确:哪些做法受支持
Section titled “先明确:哪些做法受支持”官方升级文档按使用场景分三条路径:
| 场景 | 官方推荐路径 |
|---|---|
| Fedora Workstation(GNOME) | GNOME Software 的图形升级(有通知时点击,或在 Updates 面板操作) |
| Fedora KDE Plasma Desktop | KDE Discover 的「Upgrade Now」 |
| 其它所有安装(含 Server、最小化、自建) | DNF System Upgrade 插件(命令行) |
前置检查:三件事先做
Section titled “前置检查:三件事先做”官方把这三步写成升级前置,不要跳过:
- 备份数据。官方措辞是「extremely unlikely」出问题,但仍要求先备份;
- 读目标版本的 Release Notes,确认重要变更与已知问题;
- 把当前系统更新到最新。图形路径下要先点 Refresh → Download → Restart & Update,把当前版本的所有更新装完再升级。官方对这一步用了「really important, please do not skip this step」。
命令行流程:下载 → 重启 → 安装 → 再重启
Section titled “命令行流程:下载 → 重启 → 安装 → 再重启”dnf system-upgrade 的工作方式分三段,理解它对排障很关键:
- 在系统正常运行时下载新版本的包(此时系统仍可用);
- 重启进入一个特殊环境(实现为一个 systemd target)执行安装;
- 安装完成后再次重启进入新版本。
也就是说,升级过程不在你当前的运行环境里完成,而是在重启后的过渡环境里 —— 这是它与「原地替换包」最大的区别,也解释了为什么中断后不能简单重跑。
不同 DNF 主版本下这个命令的来源不同:
- Fedora 41 起默认 DNF5,
system-upgrade已内置; - DNF4 环境由
dnf-plugin-system-upgrade插件提供。
发行版专项流程(含 --releasever=、GPG 密钥导入、缓存保留等细节)见官方文档:Upgrading Fedora using the DNF system upgrade。
升级后如果系统异常,先确认救援入口是否可用:救援内核(rescue kernel)由 Anaconda 在安装时生成,initramfs 会随内核更新而救援内核不一定。官方给出的处理是重新生成:
sudo rm /boot/*rescue*sudo kernel-install add "$(uname -r)" "/lib/modules/$(uname -r)/vmlinuz"也可以安装 dracut-config-rescue,让救援内核在 dracut 作为 initrd 生成器时自动维护。
需要回到旧内核启动时,用 grubby 指定默认启动项:
sudo ls /boot | grep vmlinuzsudo grubby --set-default /boot/vmlinuz-<version>.<release>.<arch>排障顺序建议
Section titled “排障顺序建议”官方文档把升级分成「DNF system upgrade(推荐用于其它安装)」与「用包管理器升级」两条不同路径,排障时要先确认走的是哪条:
- 确认路径:是图形升级(GNOME Software / Discover)还是命令行插件?两条路径的失败点不同。
- 确认阶段:失败发生在「下载阶段」还是「重启后的安装阶段」?前者可重试下载(必要时用
--setopt=keepcache=1保留缓存),后者要看过渡环境的日志。 - 不要用「手动 dnf 升级」兜底:那是不受支持的做法(见上),会把「升级失败」变成「不受支持的混合状态」。
- 需要系统性排查时,回查目标版本的 Release Notes 与官方 Quick Docs 的升级章节。
- Fedora 发布节奏与支持窗口 — 你还有多少时间、该在什么时候升
- Fedora 当前版本与 EOL 表 — 各版本状态
- 升级失败排障 — 失败模式与证据收集
- 官方:Upgrading Fedora using the DNF system upgrade、Upgrading to a new release