ENVIRONMENT
Fedora 43 → 44 upgrade (KDE Plasma, Wayland)
Filesystem: btrfs with subvolume layout — subvol=/root, subvol=/home on nvme
Boot disk: third disk in system (hd2 in GRUB), UEFI
nvidia driver + CUDA stack via RPM Fusion nonfree
dnf5 version: 5.x (shipped with F43)
SYMPTOM
After a successful sudo dnf system-upgrade download --releasever=44 --allowerasing and running sudo dnf5 offline reboot, the system reboots but returns to Fedora 43 every time with no error, no progress screen, and no indication anything went wrong. The upgrade simply does not run.
ROOT CAUSE
The dnf5-offline-transaction.service and dnf-system-upgrade.service units both have ConditionPathExists=/system-update. On systems where root is a btrfs subvolume (subvol=/root), the /system-update symlink is created inside the subvolume. When systemd evaluates the condition early in the boot sequence, it is running against the top-level btrfs volume (subvolid=5), where the symlink does not exist. Both services are skipped, system-update-cleanup.service removes the symlink, and the system boots normally.
Confirmed in journal:
dnf-system-upgrade.service skipped, unmet condition check ConditionPathExists=/system-update
dnf5-offline-transaction.service skipped, unmet condition check ConditionPathExists=/system-update
rm[1136]: removed ‘/system-update’
WHAT DID NOT WORK
Manually creating the symlink at the top-level btrfs volume via sudo mount -o subvol=/ /dev/nvme0n1p3 /mnt && sudo ln -s /var/lib/dnf/system-upgrade /mnt/system-update and enabling the service with sudo systemctl enable dnf-system-upgrade.service — the system still booted past the upgrade environment each time. The symlink timing issue with btrfs subvolumes appears to be deeper than a simple path fix can resolve with dnf5’s current implementation.
WHAT WORKED — CONFIRMED FIX
Drop to a non-graphical multi-user target, then use dnf-3 (dnf4) explicitly instead of dnf5 for both the download and reboot steps. dnf-3’s offline upgrade implementation handles the btrfs subvolume layout correctly where dnf5’s does not.
1. Drop to non-graphical target (eliminates KDE/Plasma/Wayland from the equation
and ensures a clean environment for the upgrade trigger)
sudo systemctl isolate multi-user.target
2. Re-download packages using dnf-3 explicitly
sudo dnf-3 system-upgrade download --releasever=44 --allowerasing
3. Reboot into the offline upgrade using dnf-3
sudo dnf-3 system-upgrade reboot
The upgrade ran successfully on the next boot. Fedora 44 with KDE Plasma 6.6, kernel 6.19, and nvidia driver 580.x all came up cleanly.
ADDITIONAL BLOCKER ENCOUNTERED
RPM Fusion release packages (rpmfusion-free-release-43, rpmfusion-nonfree-release-43) also block the transaction because they are version-pinned. The F44 replacements require system-release(44) which doesn’t exist pre-upgrade, so dnf install rejects them. Pre-stage them with:
sudo rpm -Uvh --nodeps
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-44.noarch.rpm
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-44.noarch.rpm
SUGGESTED FIX FOR DNF5
dnf5 offline reboot should detect btrfs subvolume root layouts and write the /system-update symlink to the top-level btrfs volume, not only inside the subvolume. Alternatively the condition check timing in the systemd units needs to be reviewed relative to btrfs subvolume mount ordering. At minimum, a warning when the symlink cannot be confirmed visible outside the subvolume would prevent silent failure.