Eliminare i vecchi kernel da Ubuntu

Aggiornamento dopo aggiornamento col tempo si finisce per installare su Ubuntu un certo numero di versioni successive del kernel Linux. Considerando che, in effetti, quella usata è solo l’ultima, le versioni precedenti possono essere tranquillamente disinstallate liberando così un bel po’ di spazio su disco. La cosa può essere fatta a manina, aprendo Synaptic ed andando a cercare tutti i pacchetti relativi alle versioni di kernel che non si usano più, oppure – come suggerisce questo articolo – usando uno script che lo faccia per noi.

Lo script dell’articolo riportato già funziona a dovere. Ma ho pensato di cambiarlo un pochino per quattro motivi:

  1. l’uso di un file su disco al solo scopo di memorizzare temporaneamente poche stringhe mi sembrava eccessivamente pesante. Inoltre, se l’esecuzione dello script venisse interrotta per qualsiasi motivo prima della fine, il file rimarrebbe inutilmente là;
  2. quando l’ho lanciato avevo 6 kernel installati, oltre a quello che stavo usando. Di quelli, solo 4 provenivano dai repository di Ubuntu: gli altri 2 erano kernel che io avevo compilato a mano direttamente dai sorgenti per i quali, evidentemente, non c’era nessun pacchetto .deb da disinstallare. In quei casi, piuttosto che visualizzare antiestetici messaggi di errore, ho preferito semplicemente passare oltre;
  3. lo script mi ha chiesto il permesso di disinstallare qualcosa per ben 4 volte. Visto che è possibile, molto meglio farglielo chiedere una volta sola;
  4. appena installato un nuovo kernel, se si eseguisse lo script prima di riavviare, l’effetto sarebbe quello di disinstallare il kernel nuovo e mantenere quello vecchio. Per evitare di fare questo ho aggiunto un controllo che fa uscire subito senza fare nulla nei casi in cui sia richiesto il riavvio del computer.

Ecco qua il risultato:

#!/bin/bash
# $URL: file:///C:/Documents%20and%20Settings/it7002/Documenti/My%20Dropbox/svnrepo/cleankernels/trunk/cleankernels $
# $Rev: 309 $
# $Date: 2011-01-19 12:40:46 +0100(mer, 19 gen 2011) $

# If a reboot is required, exit now
if [ -f /var/run/reboot-required ]; then
    echo "You need to reboot the system before!" >&2
    exit 1
fi

RUNNING_KERNEL_VERSION=`uname -r`
KERNELS_LIST=`ls /boot | grep vmlinuz | sed 's@vmlinuz-@linux-image-@g' | grep -v ${RUNNING_KERNEL_VERSION}`
KERNELS_TO_CLEAN=""

echo "Found the following kernels:"
echo "${KERNELS_LIST}"
echo ""

for K in ${KERNELS_LIST}; do
    if dpkg -l ${K}; then
        KERNELS_TO_CLEAN="${K} ${KERNELS_TO_CLEAN}"
    fi
done
if [ -n "${KERNELS_TO_CLEAN}" ]; then
    apt-get remove ${KERNELS_TO_CLEAN}
    update-grub
fi

Lo si può anche scaricare da qui:

Per usarlo si deve copiarlo in un posto adatto, ad esempio /usr/local/sbin/cleankernels:
$ sudo cp cleankernels /usr/local/sbin
Dopo aver copiato il file bisogna abilitarne il permesso di esecuzione:
$ sudo chmod +x /usr/local/sbin/cleankernels
Ed infine si può anche lanciare:
$ sudo cleankernels

Annunci

3 Pensieri su &Idquo;Eliminare i vecchi kernel da Ubuntu

  1. ciao, l’ho riscritto con alcune cosette in piú.
    ho copiato dal tuo il controllo del reboot, non la sapevo proprio questa! grazie 🙂


    #! /bin/sh

    ## Remove olds kernel and related packages (linux-tools, linux-backports-modules, linux-headers and linux-image) from Ubuntu

    clear
    currentKernel=`uname -r` # es. 2.6.35-25-generic

    echo "Installed kernels:" && installedKernels=$(ls /boot/ | grep vmlinuz | sed 's/vmlinuz-//') && echo "${installedKernels}" | sed 's/^/\t/' | sed "s/\(${currentKernel}\)/\1 &2 && exit 1 # If a reboot is required, exit now
    echo "---> Removing $rmKernel and related packages ..."
    ## linux-tools is common for generic, server and virtual version
    [ `echo ${rmKernel} | grep -v ${currentKernel%-*}` ] && echo "\tRemove linux-tools-${rmKernel%-*} too.\n" && rmKernel="${rmKernel} linux-tools-${rmKernel%-*}"
    sudo apt-get purge ${rmKernel} &> /dev/null
    [ dpkg -l grub ] && sudo update-grub
    [ dpkg -l burg ] && sudo update-burg
    sleep 1
    done

    echo "\tAll done, no more kernels to remove.\n"

    http://www.tuxjournal.net/?p=17928#comment-37729
    ciao

  2. azz, mi sto confondendo con i copia-incolla

    sostituite

    [ dpkg -l grub ] e [ dpkg -l burg ]
    con
    dpkg -l grub &> /dev/null
    e
    dpkg -l burg &> /dev/null

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...