System Maintenance

Regular maintenance keeps Debian-based systems healthy and secure.

Regular Maintenance Checklist

Weekly

# Update and upgrade
sudo apt update && sudo apt upgrade

# Check for failed services
systemctl --failed

# Review journal errors
journalctl -p 3 -xb

Monthly

# Full upgrade (handles dependency changes)
sudo apt full-upgrade

# Remove unused packages
sudo apt autoremove

# Clean package cache
sudo apt clean

# Check for orphaned packages
deborphan

Package Cache Management

View Cache Size

du -sh /var/cache/apt/archives/

Clean Cache

# Remove all cached packages
sudo apt clean

# Remove outdated packages only
sudo apt autoclean

# Remove everything (aggressive)
sudo apt clean && sudo apt autoclean

Unused Package Removal

Autoremove

# Remove unused dependencies
sudo apt autoremove

# With purge (removes configs too)
sudo apt autoremove --purge

Find Orphaned Packages

# Install deborphan
sudo apt install deborphan

# List orphans
deborphan

# Remove orphans
sudo apt purge $(deborphan)

# Aggressive orphan search
deborphan --guess-all

Remove Old Kernels

# List installed kernels
dpkg --list | grep linux-image

# Remove old kernels (Ubuntu)
sudo apt autoremove --purge

# Manual removal (keep current + one backup)
uname -r  # Current kernel
sudo apt purge linux-image-X.X.X-XX-generic

Configuration File Management

Find Modified Config Files

# List modified configs for package
dpkg --status package | grep -A1 "Conffiles"

# Compare with default
debsums -ce

Reinstall Default Configs

# Reinstall package with fresh configs
sudo apt install --reinstall -o Dpkg::Options::="--force-confask,confnew,confmiss" package

# Reset specific config
sudo dpkg-reconfigure package

System Health Checks

Check for Issues

# Failed systemd services
systemctl --failed

# Recent errors in journal
journalctl -p err -b

# Errors since last boot
journalctl -p 3 -xb

# Disk space
df -h

Verify Installed Packages

# Install debsums
sudo apt install debsums

# Check all packages
sudo debsums -s

# Check specific package
debsums package

# Check configs only
debsums -e

Check Disk Usage

# Overall disk usage
df -h

# Largest directories
du -sh /* 2>/dev/null | sort -h | tail -10

# Package cache size
du -sh /var/cache/apt/

# Journal size
journalctl --disk-usage

Fix Broken Packages

# Fix broken dependencies
sudo apt --fix-broken install

# Reconfigure pending packages
sudo dpkg --configure -a

# Force install
sudo apt install -f

Journal Maintenance

View Journal Size

journalctl --disk-usage

Clean Journal

# Keep only last 2 weeks
sudo journalctl --vacuum-time=2weeks

# Limit to 500MB
sudo journalctl --vacuum-size=500M

Persistent Configuration

Edit /etc/systemd/journald.conf:

[Journal]
SystemMaxUse=500M
SystemMaxFileSize=50M
MaxRetentionSec=1month

Then restart:

sudo systemctl restart systemd-journald

Automatic Updates

Unattended Upgrades

# Install
sudo apt install unattended-upgrades

# Configure
sudo dpkg-reconfigure unattended-upgrades

# Test
sudo unattended-upgrade --dry-run --debug

Configuration

Edit /etc/apt/apt.conf.d/50unattended-upgrades:

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";
    "${distro_id}:${distro_codename}-security";
    "${distro_id}:${distro_codename}-updates";
};

Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";

Enable automatic updates in /etc/apt/apt.conf.d/20auto-upgrades:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

Release Upgrades

Ubuntu LTS to LTS

# Update current system
sudo apt update && sudo apt full-upgrade

# Install upgrade tool
sudo apt install update-manager-core

# Check for new release
do-release-upgrade -c

# Upgrade
sudo do-release-upgrade

Debian Stable Upgrade

# Backup sources.list
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

# Update codename (e.g., bullseye → bookworm)
sudo sed -i 's/bullseye/bookworm/g' /etc/apt/sources.list

# Update and upgrade
sudo apt update
sudo apt full-upgrade

# Reboot
sudo reboot

# Clean up
sudo apt autoremove

Automation Script

Create a maintenance script at ~/bin/debian-maintenance:

#!/bin/bash
set -e

echo "=== Debian/Ubuntu Maintenance ==="

echo -e "\n[1/6] Updating package lists..."
sudo apt update

echo -e "\n[2/6] Upgrading packages..."
sudo apt upgrade -y

echo -e "\n[3/6] Removing unused packages..."
sudo apt autoremove -y

echo -e "\n[4/6] Cleaning package cache..."
sudo apt clean

echo -e "\n[5/6] Checking failed services..."
systemctl --failed

echo -e "\n[6/6] Cleaning journal..."
sudo journalctl --vacuum-time=2weeks

echo -e "\n=== Maintenance Complete ==="
df -h /

Make executable:

chmod +x ~/bin/debian-maintenance