Ubuntu 26.04 LTS (Resolute Raccoon) is the current long-term support release. If your machine still reports Ubuntu 25.04 (Plucky Puffin), you cannot jump straight to 26.04—you must upgrade to 25.10 (Questing Quokka) first, reboot, then run do-release-upgrade again.
I ran the full path on a VirtualBox VM named server1: pre-checks on 25.04, two do-release-upgrade runs, and three reboots. Files under /home and application data on / were still there afterward—no data loss on my test system. The sections below follow that order so you can compare your terminal output to mine. The main surprise was how often the upgrader stopped until I rebooted after a kernel update.
Tested on: Ubuntu 25.04 (Plucky Puffin) at start; finished on Ubuntu 26.04 LTS; kernel 7.0.0-27-generic after the final reboot.
.deb packages. See backup and rollback options below. To roll back afterward, restore that snapshot rather than forcing an in-place downgrade with downgrade Ubuntu 26.04 LTS to 25.04.
Quick command summary
Use this table as a checklist while you work through the longer sections. Each row maps to a phase in the two-hop upgrade.
| Task | Command |
|---|---|
| Confirm release | cat /etc/os-release and check Ubuntu version |
| Update current release | sudo apt update && sudo apt full-upgrade -y |
| Check reboot flag | cat /var/run/reboot-required |
| Reboot if needed | sudo reboot |
| See next release | do-release-upgrade -c |
| Upgrade interactively | sudo do-release-upgrade |
| Upgrade non-interactively | sudo DEBIAN_FRONTEND=noninteractive do-release-upgrade -f DistUpgradeViewNonInteractive |
| Confirm after upgrade | cat /etc/os-release && uname -r |
| Clean obsolete packages | apt list '?obsolete' then sudo apt autoremove --purge |
Upgrade path at a glance
Canonical treats each interim release as a stepping stone. You cannot retarget apt from plucky to resolute in one jump from 25.04—you must land on questing (25.10) first, reboot into its kernel, then run the upgrader again for 26.04 LTS.
| Phase | What happens |
|---|---|
| Prepare on 25.04 | apt full-upgrade, fix reboot flag |
| Reboot 1 | Load kernel installed by apt before first hop |
| Step 1 | do-release-upgrade → Ubuntu 25.10 |
| Reboot 2 | Load 25.10 kernel before second hop |
| Step 2 | do-release-upgrade → Ubuntu 26.04 LTS |
| Reboot 3 | Boot Linux 7.0 kernel shipped with 26.04 |
Total time on my VM: about 70 minutes across both do-release-upgrade runs, not counting reboots or the initial apt work.
Prerequisites
You need a healthy 25.04 install, enough disk for thousands of package downloads, and a session that survives long do-release-upgrade runs. The list below is what I verified on server1 before touching release metadata.
- Ubuntu 25.04 with sudo access and a working network mirror.
- At least 10 GB free on
/(my 58 GB disk used 14 GB before the upgrade and 17 GB after Step 2). Prompt=normalin/etc/update-manager/release-upgrades(default on my host).- A console or SSH session that will not drop for 30–40 minutes per upgrade run.
- A rollback plan—hypervisor snapshot, LVM snapshot, or fsarchiver archive (see next section).
Backup and rollback options
A release upgrade rewrites system packages under /usr and refreshes boot loaders—it does not delete /home, but a failed hop can still leave you unable to boot. Pick at least one rollback path before the first do-release-upgrade:
| Method | Best for | Guide |
|---|---|---|
| Hypervisor snapshot | VirtualBox, VMware, Proxmox guests | Use your hypervisor’s snapshot tool (fastest rollback on my test VM) |
| LVM snapshot | Ubuntu on LVM (ubuntu-vg, etc.) |
Linux LVM snapshot backup and restore |
| fsarchiver archive | Bare metal or when you need a portable root copy | Clone or backup a Linux partition with fsarchiver |
If GRUB or partition layout might change, save the partition table first with backup and restore the partition table in Linux.
Pre-upgrade checks on Ubuntu 25.04
Run these before changing releases. They establish a baseline—version, kernel, disk space, and apt health—so you can tell whether a later problem came from the upgrade or was already present. Save the output so you can diff later.
Confirm version, kernel, and disk
These three commands answer “what am I upgrading from?” and whether / has room for new kernels and desktop packages.
cat /etc/os-release
uname -r
df -h /
free -hOn my VM at the start:
PRETTY_NAME="Ubuntu 25.04"
VERSION_CODENAME=plucky
Linux server1 6.14.0-33-generic ...
/dev/mapper/ubuntu--vg-ubuntu--lv 58G 14G 42G 25% /Fully update the current release
do-release-upgrade expects your current release to be fully patched. Running apt upgrade and then apt dist-upgrade clears security fixes and kernel updates on 25.04 so the release upgrader does not stop with “install all available updates first.”
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -yThe first apt upgrade pulled 155 packages. A kernel bump to 6.14.0-37-generic only appeared after apt dist-upgrade.
Confirm apt is healthy
Held packages and broken dpkg state block any release hop. These commands list problems you must fix before do-release-upgrade.
dpkg --audit
apt-mark showhold
apt list --upgradableI had no held packages and no broken dpkg state.
See what release-upgrade offers
do-release-upgrade -c is a dry run: it checks mirrors and prints the next release without changing anything. On EOL 25.04 you should see 25.10—not 26.04 yet.
do-release-upgrade -cYour Ubuntu release is not supported anymore.
New release '25.10' available.
Run 'do-release-upgrade' to upgrade to it.That EOL message is expected on 25.04—the tool still offers 25.10 as the next hop.
Optional: note failed units
Failed systemd units rarely block do-release-upgrade, but noting them now helps if something misbehaves after the hop.
systemctl list-units --failedvboxadd.service was already failed on my VirtualBox guest. It did not block the upgrade.
Reboot 1 — before the first do-release-upgrade
When apt installs a new kernel, Ubuntu sets /var/run/reboot-required. The release upgrader refuses to run until you boot that kernel—otherwise package scripts that expect the running kernel version can misconfigure GRUB or modules.
After dist-upgrade installed linux-image-6.14.0-37-generic, the system set the reboot flag:
cat /var/run/reboot-required
cat /var/run/reboot-required.pkgs*** System restart required ***
gnome-shell
linux-image-6.14.0-37-generic
linux-baseWhen I tried do-release-upgrade without rebooting, it exited immediately:
You have not rebooted after updating a package which requires a reboot.
Please reboot before upgrading.Reboot, then confirm:
sudo rebootAfter Reboot 1:
uname -r
cat /var/run/reboot-required || echo "OK — no reboot pending"
do-release-upgrade -c6.14.0-37-generic
OK — no reboot pending
New release '25.10' available.This reboot gate appeared again before Step 2—treat /var/run/reboot-required as a hard stop.
Step 1 — upgrade Ubuntu 25.04 to 25.10
do-release-upgrade retargets /etc/apt/sources.list.d/ubuntu.sources from plucky to questing, then runs a dist-upgrade across the whole system. You answer prompts about config file merges and obsolete package removal—or use the non-interactive flag on servers.
Check and run
do-release-upgrade -c
sudo do-release-upgradeOn a headless server or automation job:
sudo DEBIAN_FRONTEND=noninteractive do-release-upgrade -f DistUpgradeViewNonInteractiveNear the start I saw a non-fatal download warning:
Download is performed unsandboxed as root as file 'questing.tar.gz.gpg' couldn't be accessed by user '_apt'The upgrade continued. On my VM Step 1 took about 34 minutes and rewrote thousands of packages (upgrade log ~4,890 lines). GRUB picked up 6.17.0-40-generic; GCC 15 and Clang 20 appeared in the package set. Disk use rose from 14 GB to 17 GB. Several snaps refreshed at the end (firefox, snap-store, gnome-46-2404).
Verify Step 1
Confirm /etc/os-release shows the new codename and that do-release-upgrade -c now offers 26.04 LTS. The running kernel may still be the pre-hop image until you reboot—that is expected.
cat /etc/os-release
do-release-upgrade -c
uname -rPRETTY_NAME="Ubuntu 25.10"
VERSION_CODENAME=questing
New release '26.04 LTS' available.
6.14.0-37-genericThe release file already shows 25.10, but the running kernel is still the old image until you reboot—that is normal.
Reboot 2 — before upgrading to 26.04 LTS
Step 1 installed another kernel (6.17.0-40-generic) and refreshed core libraries. The same reboot gate applies: clear /var/run/reboot-required before the second do-release-upgrade, or the tool exits immediately.
After Step 1, check the reboot list again:
cat /var/run/reboot-required.pkgslibc6
dbus
evolution-data-server
gnome-shell
linux-image-6.17.0-40-generic
linux-baseI hit the same blocker when I tried Step 2 without rebooting:
You have not rebooted after updating a package which requires a reboot.
Please reboot before upgrading.sudo rebootAfter Reboot 2:
uname -r
do-release-upgrade -c6.17.0-40-generic
New release '26.04 LTS' available.Step 2 — upgrade Ubuntu 25.10 to 26.04 LTS
The second hop retargets sources from questing to resolute and pulls in the 26.04 LTS package set—including Linux 7.0 and Python 3.14 on my VM. Patch 25.10 one last time, then start the upgrader.
Clear any last updates on 25.10, then run the upgrader:
sudo apt update
sudo apt full-upgrade -y
sudo do-release-upgradeNon-interactive:
sudo DEBIAN_FRONTEND=noninteractive do-release-upgrade -f DistUpgradeViewNonInteractiveStep 2 took about 36 minutes on my VM (~5,635 log lines). The upgrader installed linux-image-7.0.0-27-generic, moved Python from 3.13 to 3.14, and purged old 6.14.0-37 kernel packages during cleanup. I saw the same _apt sandbox warning (this time for resolute.tar.gz.gpg) and harmless os-prober messages during GRUB updates.
Verify Step 2
You should see resolute in /etc/os-release, both old and new kernels under /boot, and no further LTS offered by -c. The running kernel may still be 6.17 until Reboot 3.
cat /etc/os-release
do-release-upgrade -c
uname -r
ls /boot/vmlinuz-*PRETTY_NAME="Ubuntu 26.04 LTS"
VERSION_CODENAME=resolute
There is no development version of an LTS available.
6.17.0-40-generic
/boot/vmlinuz-6.17.0-40-generic
/boot/vmlinuz-7.0.0-27-genericdo-release-upgrade -c reporting no LTS development release is what you want—you are on the target LTS.
Post-upgrade sanity checks
These confirm disk use, pending upgrades, and dpkg integrity after the heavy package churn. A clean dpkg --audit means you can move on to kernel reboot or cleanup.
df -h /
apt list --upgradable
dpkg --audit
systemctl list-units --failedDisk stayed at 17 GB used. dpkg --audit was clean. Failed units on my VM: vboxadd.service (pre-existing) and systemd-tmpfiles-clean.service (new after Step 2).
Remove obsolete packages
The upgrader may offer to remove packages whose versions no longer exist in 26.04 sources. Accepting that prompt keeps the system tidy; if you skipped it, use the commands below.
Accept the cleanup prompt when do-release-upgrade asks. If you skipped it:
apt list '?obsolete'
sudo apt autoremove --purgeSee remove obsolete packages on Ubuntu for the full cleanup workflow. Remove unused packages helps if autoremove leaves orphans.
Reboot 3 — boot the 26.04 kernel
Installing linux-image-7.0.0-27-generic sets the reboot flag again. Until you reboot, uname -r still shows the 25.10 kernel even though /etc/os-release already reports 26.04 LTS.
After Step 2 the reboot flag returned:
cat /var/run/reboot-required.pkgslibc6
dbus
evolution-data-server
polkitd
gnome-shell
linux-image-7.0.0-27-generic
linux-baseReboot to load Linux 7.0:
sudo reboot
uname -r
cat /etc/os-release | grep PRETTY7.0.0-27-generic
PRETTY_NAME="Ubuntu 26.04 LTS"Until this reboot, uname -r still showed 6.17.0-40-generic even though 26.04 was already installed.
Troubleshooting
Most blockers on my VM were reboot-related or expected EOL messaging—not corrupt disks. Use this table when your output diverges from the steps above.
| Symptom | Likely cause | Fix |
|---|---|---|
Please reboot before upgrading |
/var/run/reboot-required set after kernel or libc update |
sudo reboot, confirm uname -r, retry |
Please install all available updates |
Pending apt upgrades | sudo apt update && sudo apt full-upgrade -y, reboot if flagged |
| EOL message but 25.10 offered | 25.04 is unsupported | Proceed to 25.10 first; 26.04 appears only from 25.10 |
_apt sandbox warning on .tar.gz.gpg |
Cache permissions | Usually safe to ignore; optional chown/chmod on /var/cache/apt/archives |
os-prober will not be executed |
Default GRUB config | Normal on single-OS VMs |
| Long pause on snap refresh | Concurrent snap changes | Wait; messages like Waiting for conflicting change in progress are common |
| No 26.04 prompt from 24.04 LTS | LTS-to-LTS timing | Canonical often opens 24.04 → 26.04 after the 26.04.1 point release |
References
- Ubuntu 26.04 LTS release notes (Canonical)
- Upgrade Ubuntu Desktop documentation
- Clone or backup a Linux partition with fsarchiver
- Linux LVM snapshot backup and restore
- Check Ubuntu version
- Remove obsolete packages on Ubuntu
- Remove unused packages on Ubuntu
Summary
Upgrading Ubuntu 25.04 to 26.04 LTS is a two-hop journey: fully update 25.04, reboot, run do-release-upgrade to 25.10, reboot again, then run do-release-upgrade to 26.04, and reboot once more to boot Linux 7.0. On my VirtualBox VM each release hop took a little over half an hour; the repeated reboot requirement—not disk space—was what slowed the calendar time. User files on /home were untouched throughout—no data loss on the test VM.
Before every do-release-upgrade, run apt full-upgrade, clear /var/run/reboot-required, and use do-release-upgrade -c to confirm the next target. After the final hop, accept obsolete-package cleanup or run apt autoremove --purge.

