Keeping Ubuntu updated is essential for security, stability, and performance. But anyone who has used Linux long enough knows that updates can occasionally introduce issues, especially when core packages or kernels are involved.

This guide walks through a simple, reliable workflow that minimizes risk while keeping your system clean and up to date.
Before touching anything, take a snapshot of your system. This gives you a quick rollback option if something breaks. This step alone turns a risky update into a reversible operation. Using Timeshift (recommended):
sudo timeshift --create --comments "pre-update"
The following steps will will support any update doubts.
- Fix broken packages before starting:
sudo dpkg --configure -a
sudo apt -f install
- Update your package index so Ubuntu knows what’s available:
sudo apt update
- Look for anything unusual, such as major libraries or desktop environment components. Check what will actually change:
apt list --upgradable
- Simulate the upgrade. This is one of the most underrated commands:
sudo apt full-upgrade --dry-run
- Apply the Upgrade:
sudo apt full-upgrade -y
- Remove leftover packages and free disk space:
sudo apt autoremove --purge
sudo apt autoclean
- Update Snap packages, if you use Snap apps:
sudo snap refresh
- Update firmware and BIOS (requires fwupd + supported hardware)
sudo systemctl start fwupd
sudo fwupdmgr refresh --force
sudo fwupdmgr get-updates
sudo fwupdmgr update
- Update GPU drivers (NVIDIA only — AMD/Intel are covered by step 4)
ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
- Check if a reboot is required:
if [ -f /var/run/reboot-required ]; then
echo "Reboot required"
else
echo "No reboot needed"
fi
- Reboot (Only If Needed)
sudo reboot
