SSD Nodes Learn 🎉 VPS vanaf $5.50/mnd
Gidsen Matt ConnorDoor Matt Connor · Bijgewerkt 2026-08-15

Ubuntu /boot partitie vol door oude kernels opschonen

Wanneer /boot volloopt met oude linux-image pakketten stopt apt met werken. Leer hoe u veilig overbodige kernels verwijdert en de actieve kernel behoudt voor een stabiel systeem.

Waarom apt stopt met werken wanneer /boot volloopt met oude kernels

Op Ubuntu schrijft elke kernel-update een nieuwe set bestanden naar /boot en laat de voorgaande bestanden staan. Hierdoor raakt een kleine /boot-partitie vol en kan apt een installatie niet voltooien. Het herstel bestaat uit twee stappen. Bepaal welke pakketten op de server kernels zijn en welke u momenteel gebruikt, en verwijder vervolgens de rest met apt autoremove --purge.

De volgorde is van belang. De actieve kernel is het enige pakket dat u niet mag verwijderen, en de server kan zich al in een toestand bevinden waarin apt helemaal niet meer kan draaien. Voer eerst een diagnose uit.

Hoe de fout er in werkelijkheid uitziet

Een kernelversie installeert twee grote bestanden in /boot: de gecomprimeerde kernel (vmlinuz-<version>) en de initramfs (initial RAM filesystem, initrd.img-<version>, het kleine archief dat de kernel uitpakt voordat deze de werkelijke root mount). De initramfs wordt tijdens de installatie op uw machine gebouwd; daarom heeft de installatie vrije schijfruimte nodig en niet alleen downloadbandbreedte. Bij een gebrek aan ruimte mislukt het bouwproces en wordt het pakket niet correct geïnstalleerd.

update-initramfs: Generating /boot/initrd.img-6.8.0-64-generic
gzip: stdout: No space left on device
E: mkinitramfs failure gzip 1
update-initramfs: failed for /boot/initrd.img-6.8.0-64-generic with 1.
dpkg: error processing package linux-image-6.8.0-64-generic (--configure):
 installed linux-image-6.8.0-64-generic package post-installation script subprocess returned error exit status 1

De versiereeks is afhankelijk van uw systeem. De naam van de compressor komt uit COMPRESS= in /etc/initramfs-tools/initramfs.conf, waardoor een recente image zstd kan benoemen, terwijl een oudere image gzip gebruikt. De twee regels die dit probleem identificeren zijn No space left on device en de dpkg: error processing package-regel daaronder.

Daarna blijft het pakket half geconfigureerd achter. Elke latere apt-run probeert het opnieuw te configureren, faalt op dezelfde wijze en eindigt met E: Sub-process /usr/bin/dpkg returned an error code (1). Dit is het punt dat verder gaat dan alleen schijfruimte: unattended-upgrades draait volgens zijn timer, stuit op dezelfde fout en stopt. De server lijkt gezond, maar stopt stilletjes met het toepassen van beveiligingspatches. Dit betekent ook dat elke niet-gerelateerde installatie die u probeert, faalt met diezelfde regel. De schuld wordt dan ten onrechte gelegd bij het pakket dat u op dat moment probeerde toe te voegen. Daarom is een Tailscale-installatie die faalt op Ubuntu het lezen waard als een apt-fout. Als apt update faalt voordat u dit punt bereikt, is er sprake van een afzonderlijk probleem, vaak een dubbele vermelding na de deb822 sources-migratie.

Controleer of /boot een aparte partitie is

Voordat u bestanden verwijdert, moet u vaststellen wat u daadwerkelijk vrijmaakt.

findmnt /boot
findmnt -T /boot
df -h /boot /

Het eerste commando toont alleen een regel als /boot een eigen mountpoint is. Het tweede commando toont altijd uitvoer en benoemt het bestandssysteem waar /boot zich daadwerkelijk bevindt. Als beide hetzelfde bestandssysteem als / benoemen, dan is /boot slechts een map op het root-bestandssysteem en kan deze niet zelfstandig volraken: uw root-bestandssysteem is vol en oude kernels zijn slechts een van de vele factoren. In dat geval creëert sudo apt clean, dat de gedownloade .deb-bestanden onder /var/cache/apt/archives verwijdert, extra ruimte. Op een machine met een echte /boot-partitie maakt apt clean daar helemaal niets vrij, omdat de cache op een ander bestandssysteem staat.

Bepaal nu de waarde waar u mee gaat werken.

df -h /boot
ls -lh /boot/vmlinuz-$(uname -r) /boot/initrd.img-$(uname -r)

Vergelijk de kolom Avail met de grootte van die twee bestanden. De initrd is het grootste bestand. De volgende kernel-update heeft ruimte nodig voor een nieuw paar van ongeveer diezelfde grootte; als Avail dus kleiner is dan de huidige initrd, zal de volgende update al mislukken.

De actieve kernel achterhalen

uname -r
cat /var/run/reboot-required.pkgs

uname -r toont de release-string van de kernel die momenteel in het geheugen is geladen. Kopieer deze string naar een veilige plek. Dit is de enige versie die u niet mag verwijderen.

Het tweede bestand bestaat alleen wanneer een pakket om een herstart heeft gevraagd. Een linux-image-regel in dit bestand betekent dat er een nieuwere kernel op de schijf staat die nog niet in gebruik is, omdat de machine sinds de installatie niet is herstart. Herstart de machine indien mogelijk voordat u opschoont. apt beschermt de actieve kernel en de nieuwste versie; als u opschoont terwijl u een oude kernel draait, blijft er één versie meer behouden dan strikt noodzakelijk is.

Lijst de kernelpakketten op en lees hun status

dpkg --list | grep -E 'linux-(image|modules|headers|tools)' | awk '{print $1, $2}'

Het eerste veld is de statuscode van dpkg. ii betekent geïnstalleerd en geconfigureerd. iF betekent geïnstalleerd maar half geconfigureerd; dit is precies wat de bovenstaande mislukte upgrade achterlaat. rc betekent verwijderd, waarbij de configuratie nog op de schijf staat. Dit neemt geen ruimte in beslag in /boot en kan veilig worden verwijderd met purge.

Het tweede veld geeft aan om wat voor soort pakket het gaat. Een naam met een versie erin, zoals linux-image-6.8.0-64-generic, is een specifieke kernel. Een naam zonder versie, zoals linux-image-generic, linux-headers-generic of linux-generic, is een metapakket. Dit bevat zelf geen kernel. De enige taak is afhankelijk te zijn van de nieuwste kernelversie, zodat apt upgrade nieuwe kernels ophaalt. Het verwijderen van een metapakket zorgt ervoor dat de machine geen kernel-updates meer ontvangt, en er volgt achteraf geen waarschuwing.

De families zijn als volgt onderverdeeld. linux-image-* bevat de gecomprimeerde kernel in /boot. linux-modules-* en linux-modules-extra-* bevatten de drivers onder /lib/modules. linux-headers-* bevat build-headers onder /usr/src; dit betekent dat het opschonen van headers ruimte vrijmaakt op het root-bestandssysteem en niet op de /boot-partitie. Als uw probleem een volle /boot-partitie is, moet u zich richten op de image-pakketten.

ls -1 /boot/vmlinuz-*
ls -1 /lib/modules/

Deze twee lijsten moeten met elkaar en met de output van dpkg --list overeenkomen. Een map in /lib/modules waarvoor geen bijbehorend geïnstalleerd pakket bestaat, is een restant van het handmatig verwijderen van bestanden.

Hoe apt bepaalt welke kernels behouden blijven

apt autoremove verwijdert geen kernel die als beschermd wordt beschouwd, en de set met beschermde kernels bevat de kernel die u op dit moment gebruikt. Het retentiebeleid is tussen Ubuntu-releases gewijzigd; lees het daarom af van uw eigen machine in plaats van te vertrouwen op een getal dat ergens is opgeschreven.

apt-config dump | grep -i -e neverautoremove -e versionedkernel
ls -l /etc/apt/apt.conf.d/01autoremove /etc/apt/apt.conf.d/01autoremove-kernels

APT::NeverAutoRemove is de lijst met patronen voor pakketnamen die apt autoremove weigert aan te passen. APT::VersionedKernelPackages is de lijst met naamprefixen die apt in de eerste plaats als versiebeheerde kernelpakketten behandelt. Op releases die /etc/apt/apt.conf.d/01autoremove-kernels genereren, wordt dat bestand elke keer dat een kernelpakket wordt geïnstalleerd door /etc/kernel/postinst.d/apt-auto-removal overschreven; handmatig bewerken heeft dus geen zin, aangezien de volgende kernelinstallatie uw wijziging overschrijft. Op releases waar het bestand ontbreekt, past apt intern dezelfde bescherming toe. Hoe dan ook, apt-config dump toont de regels die op uw systeem van kracht zijn, en die uitvoer is het juiste antwoord voor uw specifieke release.

De opschoonactie die veilig kan worden uitgevoerd

sudo apt update
sudo apt autoremove --purge --dry-run

--dry-run wijzigt niets op de schijf en toont precies wat de daadwerkelijke uitvoering zou verwijderen. Lees de lijst door. Twee zaken moeten u doen stoppen. Een metapakket zoals linux-generic of linux-image-generic in de verwijderlijst betekent dat iets het als automatisch heeft gemarkeerd; het verwijderen ervan beëindigt uw kernel-updates. De tekenreeks van uname -r in de verwijderlijst betekent dat de actieve kernel niet is beveiligd; dit hoort niet te gebeuren en vereist onderzoek voordat u verdergaat.

Als de lijst correct lijkt, voert u deze daadwerkelijk uit.

sudo apt autoremove --purge
df -h /boot

De --purge verwijdert zowel de achtergebleven configuratie als het pakket. Dit maakt weinig extra ruimte vrij, maar houdt dpkg --list vrij van opstapelende rc-regels, wat de volgende audit leesbaar houdt.

Bevestig daarna dat het opstartmenu opnieuw is opgebouwd. Het verwijderen van een kernelpakket voert update-grub voor u uit, dus het menu zou alleen moeten verwijzen naar bestanden die nog bestaan.

sudo grep -o 'vmlinuz-[^ ]*' /boot/grub/grub.cfg | sort -u
ls -1 /boot/vmlinuz-*

Elke versie in de eerste uitvoer moet voorkomen in de tweede. Een menu-item dat wijst naar een bestand dat niet meer bestaat, is de manier waarop een werkende server verandert in een server die stopt bij de GRUB-prompt. Dat is één route naar een VPS die niet opstart na een kernel-update, en het is vanaf een rescue-console veel lastiger te herstellen dan hier te voorkomen.

Waarom apt autoremove soms niets verwijdert

apt autoremove verwijdert alleen pakketten die als automatisch zijn gemarkeerd; dit zijn pakketten die als afhankelijkheid van iets anders zijn geïnstalleerd. Een kernel die u zelf hebt geïnstalleerd met apt install linux-image-6.8.0-40-generic, is gemarkeerd als handmatig. apt autoremove zal deze nooit verwijderen, ongeacht hoe oud deze wordt.

apt-mark showmanual | grep -E '^linux-'

Elke kernel met een versienummer in die uitvoer is onzichtbaar voor autoremove. Verwijder deze handmatig met de versiestrings uit uw eigen lijst:

sudo apt-mark auto linux-image-6.8.0-40-generic linux-modules-6.8.0-40-generic
sudo apt autoremove --purge --dry-run

Laat de metapakketten gemarkeerd als handmatig. Deze horen handmatig te zijn, omdat dit de pakketten zijn waar u zelf om hebt gevraagd.

Een specifieke kernel handmatig verwijderen

Soms wilt u dat een specifieke versie direct wordt verwijderd in plaats van te wachten tot het beleid dit toestaat. Geef de naam van het image-pakket op en laat apt de rest afhandelen.

sudo apt purge linux-image-6.8.0-40-generic

apt toont een lijst met te verwijderen pakketten voordat er actie wordt ondernomen, omdat linux-modules-extra-* afhankelijk is van het image-pakket en in dezelfde transactie moet worden verwijderd. Deze lijst is uw belangrijkste controlepunt; hier ziet u of er onbedoeld een metapakket wordt verwijderd samen met de versie die u wilde verwijderen. Antwoord met n als er onverwachte zaken in de lijst staan. Voer daarna sudo apt autoremove --purge uit om de module- en headerpakketten te verwijderen die nu hun bestaansrecht hebben verloren.

Waarom u nooit de actieve kernel moet verwijderen

De kernel die zich al in het geheugen bevindt, blijft draaien nadat de bijbehorende bestanden zijn verwijderd, waardoor er in eerste instantie niets lijkt te breken. Wat wel breekt, is alles wat de kernel nog niet heeft geladen. Het verwijderen van linux-modules-$(uname -r) wist /lib/modules/$(uname -r)/, waardoor het laden van de volgende module mislukt:

modprobe: FATAL: Module nf_tables not found in directory /lib/modules/6.8.0-64-generic

Een firewall-herlaadactie mislukt vanaf dat punt, evenals het koppelen van een bestandssysteemtype dat deze kernel sinds het opstarten niet heeft aangeraakt. Ondertussen is /boot/vmlinuz-$(uname -r) verdwenen, waardoor het opstartmenu de kernel die u draait niet langer aanbiedt en de volgende herstart op een onjuiste locatie eindigt. De machine blijft netwerkverkeer afhandelen terwijl deze al niet meer kan opstarten. Controleer elke keer uname -r tegen de verwijderingslijst.

Wanneer /boot te vol is om apt uit te voeren

Dit is de situatie die mensen naar deze pagina leidt. apt autoremove heeft dpkg nodig om het half geconfigureerde kernelpakket eerst af te ronden. Deze stap herbouwt een initramfs, waarvoor ruimte nodig is in een /boot die geen ruimte meer heeft. Doorbreek deze lus handmatig, voor één keer.

uname -r
ls -1 /boot/initrd.img-*

Kies één initrd waarvan de versie niet de tekenreeks is die uname -r u gaf, en verwijder dat specifieke bestand.

sudo rm /boot/initrd.img-6.8.0-40-generic
sudo apt --fix-broken install
sudo apt autoremove --purge
sudo update-grub

Elke regel heeft een reden. De rm is een bewuste uitzondering waardoor dpkg denkt dat een bestand bestaat terwijl dat niet zo is. apt --fix-broken install voltooit de configuratie die mislukte, nu er ruimte is voor de initramfs. autoremove --purge verwijdert vervolgens het pakket waarvan u het bestand heeft verwijderd, samen met de andere oude versies, waardoor dpkg weer synchroon loopt met de schijf. update-grub herbouwt het menu op basis van de bestanden die daadwerkelijk bestaan. Start niet opnieuw op tussen de rm en de update-grub, omdat het menu in dat tijdsbestek nog naar het bestand kan verwijzen dat u zojuist heeft verwijderd. Als dpkg klaagt dat het proces is onderbroken, voert sudo dpkg --configure -a hetzelfde herstel uit als apt --fix-broken install.

Dezelfde taak op dnf-systemen

Als uw VPS Fedora of een van de RHEL-rebuilds zoals Rocky Linux draait, is het mechanisme omgekeerd. Debian en Ubuntu beschermen kernels met apt autoremove-regels en laten het opschonen aan u of aan unattended-upgrades over, terwijl dnf een limiet afdwingt genaamd installonly_limit en automatisch de oudste kernel verwijdert zodra een nieuwe installatie dit aantal overschrijdt. Lees de actieve waarde met grep installonly_limit /etc/dnf/dnf.conf en man 5 dnf.conf, en ruim een bestaande achterstand op met sudo dnf remove --oldinstallonly. De actieve kernel wordt ook daar beschermd. Voor het bredere overzicht van de verschillen tussen beide pakketbeheerders, zie de dnf en apt commando-equivalenten.

Voorkom herhaling

Opschonen dat afhankelijk is van uw geheugen zal uiteindelijk falen. Plaats het daarom in het configuratiebestand dat de kernels installeert. Open /etc/apt/apt.conf.d/50unattended-upgrades en zoek naar de volgende sleutels, die in het standaardbestand al als commentaar aanwezig zijn:

Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

Haal het commentaarteken weg in plaats van een tweede kopie aan het einde toe te voegen. In apt-configuratie wint de laatste toewijzing van een sleutel; een duplicaat zorgt er dus voor dat het bestand zichzelf tegenspreekt en maakt onduidelijk welke waarde actief is. Controleer wat de parser uiteindelijk heeft verwerkt en observeer een run die niets wijzigt:

apt-config dump | grep -i 'Unattended-Upgrade::Remove'
sudo unattended-upgrade --dry-run --debug
sudo tail -n 40 /var/log/unattended-upgrades/unattended-upgrades.log

Het logbestand is het bewijs. Het registreert elke run, waardoor een upgrade die faalt wegens ruimtegebrek daar zichtbaar is lang voordat iemand merkt dat de machine achterloopt met patches. De rest van die configuratie wordt behandeld in automatische beveiligingsupdates op Ubuntu.

Voordat de volgende kernel wordt geïnstalleerd, is er één getal dat u moet controleren. Gebruik hiervoor hetzelfde paar commando's als aan het begin van deze handleiding:

df -h /boot
ls -lh /boot/initrd.img-$(uname -r)

Als Avail niet aanzienlijk groter is dan dat bestand, zal de volgende kernel op precies dezelfde wijze falen als hierboven beschreven. Los dit dus nu op in plaats van tijdens de upgrade. Deze controle is de moeite waard om naast uw andere schijfgezondheidscontroles op een VPS uit te voeren. Dit is vooral van belang vlak voor een release-upgrade, omdat het upgraden van Ubuntu 24.04 naar 26.04 vroeg in het proces een nieuwe kernel installeert en do-release-upgrade zal weigeren door te gaan wanneer /boot onvoldoende ruimte heeft.

FAQ

Waarom behoudt Ubuntu oude kernels in plaats van ze te verwijderen?

Omdat een kernel die niet opstart u zonder alternatieven achterlaat. Het behouden van de vorige versie betekent dat een mislukte update herstelbaar is via het GRUB-menu, in plaats van via een rescue-console van uw provider. apt beschermt daarom een set kernelpakketten tegen automatische verwijdering, inclusief de versie die u op dat moment gebruikt. Voer apt-config dump | grep -i neverautoremove uit om de exacte patronen te zien die uw release beschermt, aangezien het beleid tussen releases is gewijzigd.

Is apt autoremove --purge veilig om uit te voeren op een productieserver?

Ja, mits u eerst de dry run controleert. Voer sudo apt autoremove --purge --dry-run uit; dit voert geen wijzigingen door en toont de lijst met acties. Stop als deze een metapakket bevat zoals linux-generic of linux-image-generic, omdat het verwijderen daarvan toekomstige kernel-updates stopt. Stop ook als de lijst de versie bevat die uname -r toont. Als geen van beide het geval is, betreft het verwijderingen van oude kernels en verweesde afhankelijkheden.

apt autoremove heeft niets verwijderd en /boot is nog steeds vol. Wat nu?

De oude kernels zijn vrijwel zeker gemarkeerd als handmatig geïnstalleerd, en autoremove verwijdert alleen pakketten die als automatisch zijn gemarkeerd. Voer apt-mark showmanual | grep -E '^linux-' uit. Elke kernel met een versienummer die daar wordt vermeld, is op enig moment handmatig geïnstalleerd. Markeer deze als automatisch met sudo apt-mark auto linux-image-<version> en voer de dry run opnieuw uit, of verwijder die specifieke versie direct met sudo apt purge linux-image-<version>.

Kan ik handmatig bestanden uit /boot verwijderen?

Alleen als een bewuste eenmalige actie, wanneer /boot zo vol is dat apt het defecte kernelpakket niet kan configureren. Verwijder één enkel initrd.img-<version>-bestand waarvan de versie niet overeenkomt met de uitvoer van uname -r, en voer daarna direct sudo apt --fix-broken install, sudo apt autoremove --purge en sudo update-grub uit. Bestanden verwijderen zonder deze vervolgstappen zorgt ervoor dat dpkg pakketten registreert waarvan de bestanden weg zijn en laat GRUB-menu-items achter die naar ontbrekende bestanden verwijzen. De machine zal dan bij de volgende herstart falen in plaats van op het moment dat u de fout maakte.