什么是 FedUp?
FedUp (FEDora UPgrader) 是一个升级 Fedora 的新工具。它替换了在之前 Fedora 版本上推荐的更新方式(例如通过 PreUpgrade 升级和 DVD 升级)。Anaconda,Fedora 的安装器,从 Fedora 18 后将不会自带更新功能,所有将全部交给 FedUp 来完成。
目前,FedUp 可以通过网络安装源完美升级 Fedora 17 至 Fedora 18,就像之前 PreUpgrade 的升级一样。更多升级的方法目前已经处于计划之中,当它们可行后本页也会继续更新。
FedUp 做了些什么?
FedUp 系统有两个组成部分 - 程序本身被用作下载软件包并准备升级过程和预启动环境,实际更新工作则由 systemd 和 yum 完成。详细信息请访问 FedUp 主作者对它的介绍 页面。
FedUp 客户端
FedUp 运行于准备升级的系统上。它获取所有需要升级的软件包和内核。目前只有命令行版本,不过图形界面版本已经在准备了。
升级过程
从运行 FedUp 客户端之后重启才开始实际上的升级。文件系统会在启动时被挂载,已下载的软件包会被安装并且一些有关升级的任务也会开始执行。在升级过程中,将会使用一个特别的包含升级进度条显示的 plymouth 主题作为屏幕显示。
常见问题解答
我能使用 FedUp 更新我的 Fedora 16 吗?
不行。目前不可用。FedUp 客户端目前尚未在 Fedora 16 上构建或运行,所以您至少需要 Feora 17。请首先使用 Preupgrade 升级至 Fedora 17。
我该如何汇报升级出现的问题?
请首先查看 Common F18 bugs#Upgrade_issues,也许这些问题不是受我们严重关注的问题。如果不在这个页面里面,请根据出问题的组件反馈问题。
升级准备时的问题
如果您在重启前使用 FedUp 客户端遇到问题(fedup
),请 搜索有关 fedup 的 Bug,或者针对您升级前系统的版本提交关于 fedup 的 Bug 报告。
升级过程中的问题
如果您在准备过程结束后重启时遇到问题,请 搜索有关 fedup-dracut 的 Bug,或者针对您升级前系统的版本提交关于 fedup-dracut 的 Bug 报告。
升级后的问题
如果升级某个软件包后出现问题,请针对相关软件提交 Bug 报告。
我该如何在升级过程中调试出现的问题?
稍后完善
FedUp 验证升级过程中安装或运行的软件吗?
这是一个正在计划中的新特性。查看 Bug 877623 以了解更多。
哪里可以问我的问题?
最好的位置是参与 IRC 交流 #fedora-qa[?] 或者发邮件至 test 邮件列表。
如何通过 FedUp 升级我的系统?
使用 FedUp 升级您的系统有3个阶段 - 升级准备、执行升级和清理
在您更新之前,确保您已经阅读了 Common F18 bugs#Upgrade_issues。
升级准备
- 运行系统更新并重启以确保内核更新生效
- 安装
fedup
- 确保已获取最新版,您可以通过启用 updates-testing 源(命令行执行
yum --enablerepo=updates-testing install fedup
)
- 确保已获取最新版,您可以通过启用 updates-testing 源(命令行执行
3种方式可获得需要更新的软件包 - 使用网络安装源、本地 ISO 镜像或本地设备(例如硬盘或者光盘)。
网络
使用网络进行升级是最省事的办法 - 如果您当前的系统有一个比您要升级到的 Fedora 版本自带内核还要新的内核,这种方式可以消除潜在的问题。
- 执行下列命令准备升级
sudo fedup-cli --network 18 --debuglog fedupdebug.log
- 一旦准备完毕,检查
fedupdebug.log
文件查看是否有来自fedup-cli
的错误输出
ISO 文件
为了使用 ISO 镜像,您需要把它放置于文件系统上。本文假设其位于 /home/user/fedora-18.iso,您可以任意指定位置。如果这台机器联网,更新的升级将会联网获取。
- 下载适合您正运行的架构的 Fedora 41 的 ISO 文件。
- 为了便于说明,我们假设 ISO 位于
/home/user/fedora-18.iso
,不过您可以任意指定您的实际 ISO 文件位置,替换下面的/home/user/fedora-18.iso
即可
- 为了便于说明,我们假设 ISO 位于
- 执行下列命令准备升级
- sudo fedup-cli --iso /home/user/fedora-18.iso --debuglog=fedupdebug.log
- 一旦准备完毕,检查
fedupdebug.log
文件查看是否有来自fedup-cli
的错误输出
其他设备
光盘和其他可被挂载的设备均可被用作升级准备过程中使用的软件包安装源。
- 挂载源介质
- 为了便于说明,我们假设设备挂载于
/mnt/fedora
,不过您可以任意指定挂载位置。替换下面的/mnt/fedora
即可
- 为了便于说明,我们假设设备挂载于
- 执行下列命令准备升级
- sudo fedup-cli --device /mnt/fedora --debuglog=fedupdebug.log
- 一旦准备完毕,检查
fedupdebug.log
文件查看是否有来自fedup-cli
的错误输出
执行升级
- 如果
fedup
已完成工作且没有错误发生,则重启系统。 - 一旦系统重启,GRUB 菜单将会有一个新的条目,叫做
System Upgrade
- 如果您在启动参数里面添加
rd.upgrade.debugshell
,您会看到一个 shell 窗口,允许您在系统出现某些情况时进行修复
- 如果您在启动参数里面添加
- 选择
System Upgrade
条目继续 - 系统将会启动至升级环境,一个 plymouth 启动屏幕会显示出来
- 如果您按下 'esc' 键,一个更详细的进度日志会显示出来,但是如果您切换至之前的图形显示进度条界面,进度条会一直停留在 0%,不过您不必担心因为升级实际上在运行。这是一个 Bug。
- 一旦更新完成,系统将会重启,grub 菜单会多出一个启动 Fedora 41 的选项
GRUB 更新
更新 GRUB2 (BIOS 系统)
- 升级完成后,之前安装的 grub2 仍然会启动 F17 版本,您需要手工升级
- 按照 本页的说明 重新安装并升级 grub
更新 GRUB (UEFI 系统)
Grub2 不会作为升级的一部分而被安装,需要手工安装:
sudo yum install grub2-efi
迁移 Grub 设定
很不幸,除非您手工迁移,否则大多数启动设置在更新后将不会保留。您需要自己查看您之前设定的配置文件,在这里:/boot/efi/EFI/redhat/grub.conf
并找到最近的启动条目。无需跟下面的示例一模一样,您只需要找到最近的即可。
title Fedora (3.6.11-1.fc17.x86_64) root (hd0,2) kernel /vmlinuz-3.6.11-1.fc17.x86_64 rd.luks.uuid=luks-f664c3a9-e939-410e-8478-891f48b80f12 rd.md=0 rd.dm=0 KEYTABLE=us SYSFONT=True rd.lvm.lv=vg_test/lv_root root=/dev/mapper/vg_test-lv_root ro rd.lvm.lv=vg_test/lv_swap LANG=en_US.UTF-8 rhgb quiet initrd /initramfs-3.6.11-1.fc17.x86_64.img
不要 被 kernel
这么多参数迷惑,绝大多数通过 rd.
启动,而剩下的一小部分就是我们需要关注的重点:
rd.luks.uuid=luks-f664c3a9-e939-410e-8478-891f48b80f12 rd.md=0 rd.dm=0 rd.lvm.lv=vg_test/lv_root root=/dev/mapper/vg_test-lv_root ro rd.lvm.lv=vg_test/lv_swap rhgb quiet
欲开始迁移,请用 sudo 或者以 root 身份打开 /etc/default/grub
并粘贴下面这一部分文字:
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX="" GRUB_DISABLE_RECOVERY="true" GRUB_THEME="/boot/grub2/themes/system/theme.txt"
Take the kernel args that we extracted before and insert them inside the quotes following GRUB_CMDLINE_LINUX. In this example, it would look like the following. Note that formatting has been slightly altered for the wiki - there should be no newlines in the text following GRUB_CMDLINE_LINUX.
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX="rd.luks.uuid=luks-f664c3a9-e939-410e-8478-891f48b80f12 rd.md=0 rd.dm=0 rd.lvm.lv=vg_test/lv_root root=/dev/mapper/vg_test-lv_root ro rd.lvm.lv=vg_test/lv_swap rhgb quiet" GRUB_DISABLE_RECOVERY="true" GRUB_THEME="/boot/grub2/themes/system/theme.txt"
Now that we've migrated the required grub settings, we can wrap up by generating a new grub configuration using these new settings and symlinking this new configuration to /etc/grub2-efi.cfg
.
grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg ln -s /boot/efi/EFI/fedora/grub.cfg /etc/grub2-efi.cfg
Updating the EFI boot entry
Once the grub2-efi
package is installed, we need to add a new EFI boot entry. The easiest way to do this is to just modify the command used when Fedora was first installed. Note that you will not be using the exact same command when upgrading to grub2 as the location of some files has changed. The older reference command can be found in /var/log/anaconda/anaconda.program.log and should end with a command similar to:
efibootmgr -c -w -L Fedora -d /dev/sdX -p Y -l \EFI\redhat\grub.efi
Find the current boot number for fedora using efibootmgr
:
efibootmgr -v
You are looking for a line similar to:
Boot0004* Fedora HD(1,800,34800,6733749f-b42a-4b8c-a0de-5a1d3505f8af)File(\EFI\redhat\grub.efi)
The boot number in this example is 0004.
Remove the old boot entry using the following command (<boot number>) is the boot number you found above:
efibootmgr -b <boot number> -B
Once you have the command that was used and the boot number of the old boot entry, you can change it to use the new grub2-efi installation:
sudo efibootmgr -c -w -L Fedora -d /dev/sdX -p Y -l '\EFI\fedora\grubx64.efi' -b <boot number>
Now your system should have a working grub2-efi bootloader and it should be loaded when you reboot.