How to Upgrade to Ubuntu 26.04 LTS Safely

Ubuntu 26.04 LTS (Resolute Raccoon) was released on April 23, 2026. The upgrade path from 24.04 LTS is officially supported and runs through do-release-upgrade. Until Ubuntu 26.04.1 ships (expected August 2026), you need the -d flag to trigger the upgrade prompt. Preparation — specifically cgroup v2 verification and PPA cleanup — matters more than the upgrade command itself.

What Actually Changes Between Ubuntu 24.04 and 26.04

This isn't a cosmetic release. A few things in 26.04 will surprise you if you go in without reading ahead. Linux kernel 7.0 replaces 6.8, GNOME 50 drops the X11 session entirely (apps still run via XWayland, but there's no GNOME-on-X11 desktop session), and the default Python jumps from 3.12 to 3.14. More significantly, sudo has been replaced by sudo-rs — a Rust rewrite — and initramfs-tools has been swapped for Dracut. Both are mostly compatible but have edge cases that bite automation and custom kernel hooks.

The one change that will flat-out block your upgrade if you miss it: cgroup v1 support is gone. systemd 259 removes it entirely, and the upgrade tool enforces this — it refuses to proceed on systems still using the legacy cgroup hierarchy.

Component Ubuntu 24.04 Ubuntu 26.04
Kernel 6.8 7.0
Python (default) 3.12 3.14
sudo sudo 1.9.x (C) sudo-rs (Rust)
initramfs initramfs-tools Dracut
GNOME session Wayland + X11 Wayland only (XWayland for apps)
cgroup v1 + v2 v2 only
/tmp Disk-backed tmpfs (RAM) by default
Removable media mount /media /run/media
Support until April 2029 April 2031

Before You Run Anything: The Pre-Upgrade Checklist

Most failed upgrades I've seen come down to the same three things: the system wasn't fully updated, a stale PPA broke dependency resolution mid-upgrade, or the cgroup check was skipped. Work through these before you even think about running do-release-upgrade.

1. Verify cgroup v2 is active

This is the hard blocker. Run:

stat -fc %T /sys/fs/cgroup

You need the output to be cgroup2fs. If it says tmpfs, you're still on cgroup v1 (or a hybrid), and the upgrade will refuse to proceed. Modern desktop Ubuntu installs default to cgroup v2, so most desktops are fine. Servers with older container setups — especially anything with LXC configs or monitoring agents that write directly to cgroup v1 paths — need to be audited first. Check with:

grep -r cgroup /etc

If you find v1 references in container runtime configs or custom scripts, migrate those before touching the OS.

2. Fully update your 24.04 system and reboot

sudo apt update
sudo apt full-upgrade -y
sudo apt autoremove --purge -y
sudo apt clean

If any of those pulled in a new kernel, reboot now and log back in. The upgrade tool won't run cleanly on a system that's booted into a stale kernel. After the reboot, confirm nothing is held back:

apt list --upgradable 2>/dev/null | grep -v Listing

Empty output means you're clean. If you see held packages, resolve them with sudo apt full-upgrade before continuing.

3. Check disk space

The upgrade downloads and temporarily stores several gigabytes of packages. You want at least 10 GB free on your root partition, and honestly 15 GB if you can swing it. Check:

df -h /

If you're tight, sudo apt clean recovers the package cache. Old kernel images are usually good for another few hundred MB:

sudo apt autoremove --purge -y

4. Document and disable third-party PPAs

apt-cache policy | grep http | awk '{print $2 " " $3}' | sort -u

Write down every PPA. The upgrade tool disables them automatically, but you'll need to know which ones to re-enable afterward — only for those that have published packages for Ubuntu 26.04 (codename: resolute). Docker is a common one that needs its repo re-added manually after the upgrade.

5. Ensure the upgrade tool is installed

sudo apt install update-manager-core -y

Then confirm the upgrade prompt is set to LTS-only:

grep Prompt /etc/update-manager/release-upgrades

It should say Prompt=lts. If it says Prompt=never, change it to lts with your editor of choice before continuing.

6. Take a backup

On a VM, take a snapshot now — it's a one-click rollback if something goes sideways. On bare metal, use Timeshift or at minimum rsync your home directory and any custom configs in /etc to external storage. On ZFS:

sudo zfs snapshot rpool/ROOT/ubuntu_noble@pre-upgrade

For SSH-connected servers, also open a backup access method (IPMI, cloud console, or out-of-band management). The upgrade tool opens a second SSH listener on port 1022 as a fallback, but verify you can reach the box another way if your main connection drops.

How to Upgrade to Ubuntu 26.04 (The Actual Commands)

If you're upgrading over SSH, wrap the session in screen or tmux first so a dropped connection doesn't leave you with a half-upgraded system:

sudo apt install screen -y
screen -S upgrade

If you get disconnected, reconnect and run screen -r upgrade to reattach.

Now run the upgrade. Until Ubuntu 26.04.1 ships (currently expected around August 2026), the standard LTS-to-LTS prompt won't appear automatically because Canonical only updates the LTS meta-release file after the first point release. The -d flag uses the development release meta file, which already lists 26.04 as a valid upgrade target:

sudo do-release-upgrade -d

The tool checks the system, then shows you a summary of packages to be removed, installed, and upgraded. Read it. Pay attention to anything it flags as no longer supported. When you're ready, confirm and let it run — on a typical machine with a decent connection, expect 20–45 minutes depending on the number of installed packages.

Throughout the process you'll be prompted about config files that have local modifications. The safe default for most people is to keep your existing version (N) unless you know you need the new default. The upgrade logs everything to /var/log/dist-upgrade/ if you need to review what happened.

After Ubuntu 26.04.1 releases, the -d flag is no longer needed and plain sudo do-release-upgrade will offer the path directly.

After the Reboot

Reboot when prompted. After you're back in, confirm the upgrade worked:

lsb_release -a

You should see Ubuntu 26.04 LTS and codename resolute. Verify the kernel:

uname -r

Output should be a 7.0.x kernel. Then clean up:

sudo apt autoremove --purge -y
sudo apt clean
sudo apt update && sudo apt full-upgrade -y

That last full-upgrade catches anything held back during the release upgrade that resolves cleanly now that you're on 26.04. After that, start re-enabling PPAs — but only those that publish for resolute. If the PPA hasn't published 26.04 packages yet, leave it disabled until it does.

Upgrade Problems You'll Actually Hit

Python virtual environments stop working

This is probably the most common post-upgrade surprise for developers. The system Python jumped from 3.12 to 3.14, and existing venv environments are pinned to the interpreter they were created with. They won't load. Rebuild them inside the new Python 3.14 after the upgrade — there's no shortcut here.

sudo-rs behaves differently in edge cases

For routine interactive sudo use, you won't notice any difference. If you have scripts that use sudo -S (password from stdin), complex sudoers plugin configurations, or LDAP-backed sudo via the old sudo-ldap package, those will break. The sudo-ldap package is gone — the replacement is PAM-based LDAP authentication. One visible change: sudo-rs now shows asterisks as you type your password. To turn that off, add Defaults !pwfeedback to your sudoers file.

Custom initramfs hooks don't run

If you've dropped anything into /etc/initramfs-tools/hooks/ or /etc/initramfs-tools/scripts/ — custom disk unlock scripts, hardware-specific early-boot configs — those won't run. Dracut uses a completely different hook structure. Check ls /etc/initramfs-tools/ for anything non-default and migrate it. initramfs-tools stays in the repo as an optional package if you need a temporary fallback while you migrate.

NVIDIA drivers 470 and below are incompatible

Kernel 7.0 dropped support for older NVIDIA driver series. If you're on driver 470 or below, update to a supported driver series before upgrading the OS. Check your current driver with nvidia-smi. Driver 525 and newer work fine.

Scripts that reference /media break

Removable media now mounts under /run/media instead of /media. Any backup scripts, fstab entries, or automation that hardcodes /media/username/drivename paths will need updating.

Should You Upgrade Now or Wait for 26.04.1?

If you're running a desktop or a non-critical home lab server, upgrading now with -d is fine. The 26.04 release has been stable since April and the upgrade path is well-tested. I've run it on three machines without issue.

If you're managing production infrastructure, wait for 26.04.1 (expected August 2026). That first point release is when Canonical considers the LTS stable enough to push upgrade prompts to all 24.04 systems, and it'll have two months of real-world post-release bug fixes baked in. Ubuntu 24.04 has security support through April 2029, so there's zero urgency to rush a production system. The tradeoffs from cgroup v2 migration, Python venv rebuilds, and the initramfs-tools → Dracut transition deserve a proper maintenance window on anything that matters.


Frequently Asked Questions

Why does sudo do-release-upgrade say "no new release found"?

Canonical doesn't enable the LTS-to-LTS upgrade prompt in the standard meta-release file until after the first point release (26.04.1, expected August 2026). Until then, use sudo do-release-upgrade -d to bypass this and upgrade now. After 26.04.1 ships, the plain command works.

Can I upgrade from Ubuntu 22.04 directly to 26.04?

No. Ubuntu only supports sequential LTS upgrades. From 22.04, you must go to 24.04 first, then to 26.04. There's no skip path.

Will my Docker containers still work after upgrading?

Docker 20.10 and newer uses cgroup v2 by default, so modern setups are fine. Verify your host is already on cgroup v2 before upgrading: stat -fc %T /sys/fs/cgroup should return cgroup2fs. If it does, Docker survives the upgrade unchanged. Older LXC configurations and any container workloads that still call cgroup v1 APIs will break and need migration first.

Is sudo-rs a drop-in replacement for the original sudo?

Mostly yes — it reads the same /etc/sudoers and /etc/sudoers.d/ files and covers the common use cases. The gaps are in the plugin API (if you use sudo_noexec.so or custom policy plugins) and LDAP-backed sudo (removed entirely). If you need the original sudo, install the sudo.ws package, which provides it under that name.

How long does the upgrade take?

On a typical machine with a 100 Mbps connection, figure 20–45 minutes from start to reboot prompt. A minimal server install takes less time; a desktop with a lot of installed packages takes longer. On a 4-core VM with 4 GB RAM and 100 Mbps, one test run took about 12 minutes — but your package count will vary.

What if the upgrade gets interrupted mid-run?

Don't panic. If you used screen or tmux, reconnect and reattach. If you connected over SSH, try the backup listener the upgrade tool opened on port 1022: ssh -p 1022 user@server-ip. Once you're back in, run:

sudo dpkg --configure -a
sudo apt -f install

Those two commands clear most interrupted-upgrade states. If the system is unrecoverable, that's what the pre-upgrade snapshot or backup is for.


Official references:
Ubuntu 26.04 LTS Release Notes
Ubuntu Server: How to Upgrade Your Release (official docs)