Tijdens het updaten van je server worden er soms ook nieuwe Kernels geïnstalleerd en als daarbij de melding "No space left on device" optreedt betekent het vaak dat de boot-partitie vol is:

No space left on device

Het installeren van de nieuwe Kernels is op dit moment niet gelukt, maar de bestaande Kernels zijn nog onaangeraakt gebleven. Zodra je de vrije ruimte opvraagt (df -h) van de partities zul je zien dat de /boot partitie vol is.

Ongebruikte Kernels verwijderen

Om alle ongebruikte Kernels te kunnen verwijderen, dien je allereerst te bepalen welke momenteel in gebruik is:

uname -r

Wanneer je echter een ls /boot uitvoert zul je zien dat vaak meer Kernels aanwezig zijn. Hierdoor kun je tijdens het opstarten schakelen tussen Kernels, mocht er een niet werken — juist een van de sterke kanten van Linux. Wanneer je huidige Kernel echter goed werkt kun je alle 'overbodige' verwijderen.

Door middel van je package-manager kun je zien welke Kernel-paketten er momenteel geïnstalleerd zijn:

dpkg -l | egrep 'ii  linux-(image|headers)'

Door vervolgende de output te "spliten" op een spatie en daar het 3e veld van te selecteren krijgen we een "schone" lijst van de Kernel namen:

dpkg -l | egrep 'ii  linux-(image|headers)' | cut -d' ' -f3

Vervolgens kan Kernel die momenteel in gebruik is worden gefilterd door grep -v, waar de v-trigger de match omkeert:

dpkg -l | egrep 'ii  linux-(image|headers)' | cut -d' ' -f3 | grep -v $(uname -r)

De output kan vervolgens worden geforward met xargs naar de aptitude package-manager om de paketten te verwijderen:

dpkg -l | egrep 'ii  linux-(image|headers)' | cut -d' ' -f3 | grep -v $(uname -r) | xargs dpkg --remove

Alle ongebruikte Kernels zijn nu verwijderd. Om zeker te zijn dat alles nog naar behoren werkt én dat Grub up to date is — zodat het systeem de volgende keer ook gewoon opstart — kun je de Grub-loader laten bijwerken:

update-grub

Wanneer dit geen fouten oplevert zit je goed.

De update afronden

De fout trad op tijdens het updateproces, waardoor de kans groot is dat de nieuwe Kernels half-geconfigureerd klaar staan. Daarom is het goed om dat proces eerst af te ronden:

dpkg --configure -a

De nieuwe Kernel wordt naast de huidige geïnstalleerd zodat je altijd nog terug kunt naar de vorige Kernel die wel werkte, mocht het systeem niet doorstarten met de gekozen Kernel. Vervolgens kun je voor de zekerheid nog een volledige systeemupdate uitvoeren zoals je gewend bent:

apt-get update
apt-get upgrade

Wanneer tijdens dit proces het updaten of installeren fout gaat kun je de cache van de aptitude package-manager legen en een nieuwe update starten:

rm -r /var/lib/apt/lists/*
mkdir -p /var/lib/apt/lists/partial
apt-get update
apt-get upgrade

In sommige gevallen mislukt de update alsnog. Dit is het geval bij foutmeldingen als:

  • Errors were encountered while processing:
    linux-headers-XXX
    ...
  • dpkg: error processing package linux-headers-XXX (--configure):
    package is in a very bad inconsistent state; you should
    reinstall it before attempting configuration

Je kunt dit oplossen door het betreffende pakket opnieuw te installeren:

apt-get install --reinstall linux-headers-XXX