Eliminare i vecchi kernel da Ubuntu con uno script Bash

13 gennaio, 2011 11 Commenti »

Uno script di poche righe consente di eliminare velocemente tutti i vecchi kernel ancora presenti sul nostro sistema, così da liberare un bel po’ di spazio su disco.


Avete appena installato GNU/Linux, magari utilizzate Ubuntu e avete più volte aggiornato il sistema ma non sapete come rimuovere tutte le voci dei vecchi kernel dal menu del boot-loader Grub all’avvio del computer? Una possibile soluzione potrebbe essere quella di aprire Synaptic e rimuovere uno per volta tutti i vecchi kernel presenti sulla vostra macchina, così da liberare spazio su disco e ripulire il menu di Grub.

Oppure potete utilizzare lo script che vedete qui in basso, pubblicato qualche tempo fa sugli Ubuntuforums, che vi consente di eliminare tutti i vecchi kernel con un solo comando. Tutto ciò che dovete fare è aprire il vostro editor di testo predefinito e incollare queste righe all’interno di un nuovo documento, chiamato cleanKernels.sh:

#/bin/bash
ls /boot/ | grep vmlinuz | sed ‘s@vmlinuz-@linux-image-@g’ | grep -v `uname -r` > /tmp/kernelList
for I in `cat /tmp/kernelList`
do
aptitude remove $I
done
rm -f /tmp/kernelList
update-grub

Salvate e chiudete il documento, poi da Terminale lanciate le seguenti direttive:

sudo bash cleanKernels.sh

Ed il gioco è fatto! Provare per credere.

Potrebbero interessarti ...

  • KAROO

    lo script toglie le voci dei kernel dalla lista ma non i kernel in sé, che rimangono così ad occupare spazio :P

    • http://matrobriva.altervista.org matrobriva

      Sei sicuro? Non sto usando ubuntu quindi non posso provare, tuttavia penso che aptitude remove pulisca lista e kernel…

      • Giuseppe

        @ KAROO
        credo anche io, siamo in due contro uno quindi vinciamo noi :-)

        • KAROO

          Avete ragione infatti, ho letto lo script troppo in fretta ;P

  • Giuseppe

    Ho migliorato lo script, includendo anche la rimozione dei relativi linux-tools e degli headers.
    Inoltre il grep e’ inserito prima in modo da non dover elaborare anche la linea contenente il kernel usato.
    Eliminato l’inutile ciclo for ed anche il file temporaneo contenente la lista, ora e’ in una variabile.
    In fine ho messo i comandi uno dietro l’altro tramite gli “and”, in questa maniera se un comando non va a buon fine, non verranno eseguiti i successivi.
    fiuu


    #! /bin/sh

    oldKernelsList=$(ls /boot/ | grep vmlinuz | grep -v `uname -r` | sed 's/vmlinuz-\(.*\)\(-.*\)$/\tlinux-image-\1\2\n\tlinux-tools-\1\n\tlinux-headers-\1\2\n\tlinux-headers-\1\n/g') && aptitude remove ${oldKernelsList} && update-grub

    … é uno shell script, non piu’ uno script bash, per evitare incompatibilita’ nel caso si usino altre shell.

    ciao ciao

    • Giuseppe

      piccolo ritocco:
      se lo usate con sudo, allora bisogna aggiungere sudo prima dei comandi aptitude e update-grep.
      Meglio ancora se al posto di aptitude usiamo apt-get -y purge, cosi eliminiamo anche file di configurazione, nel caso ci fossero)


      #! /bin/sh

      ## Eliminare i vecchi kernel da Ubuntu con uno script

      oldKernelsList=$(ls /boot/ | grep vmlinuz | grep -v `uname -r` | sed 's/vmlinuz-\(.*\)\(-.*\)$/linux-image-\1\2\nlinux-tools-\1\nlinux-headers-\1\2\nlinux-headers-\1\n/g') && sudo apt-get -y purge ${oldKernelsList} && sudo update-grub

      dovrebbe bastare
      Bye

      • Massimiliano

        GRAZIE HO APPENA PROVATO LA TUA SOLUZIONE…….X ME SEI UN MAGO ;) FUNZIONA BENISSIMO GRAZIE!! VORREI IMPARARE MA SO COME SE DICE A ROMA DE COCCIO HAHAHAHAH DEVO ESSERE GUIDATO ;)

        INTANTO TI RINGRAZIO DI ESSERE COSI GENTILE CON TUTTI, OPS PARLIAMO DI ME DAI SONO IO CHE SO IMBRANATO….GRAZIE

      • giuseppe

        scusatemi, chi aveva scritto lo script iniziale l’aveva provato bene, al contrario di me e mi sono accorto che alle volte la mia soluzione potrebbe dare problemi per la mancanza del for, quindi ora lo rifaccio implementando il ciclo, il che’ permette al sistema di fare il lavoro di pulizia ad ogni eliminazione kernel.

        lo postero’ al piu’ presto, nel frattempo NON UTILIZZATE la mia soluzione.

      • giuseppe

        ok, spero di aver risolto, migliorandolo anche!
        ringrazio gpz500 per l’idea del controllo del reboot.

        Ho aggiunto la visualizzazione dei kernel installati e quello usato.
        Adesso elimina linux-image-$VER, linux-headers-$VER, linux-backports-modules-$VER e, solo se non é piú usato, linux-tools-$VER
        Fá l’aggiornamento di grub e, se installato, di burg.


        #! /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"

        Spero che questa volta funzioni senza problemi.
        In ogni caso il problema che mi aveva dato lo script precedente era che eliminava i collegamenti della root (vmlinuz e initrd.img) al kernel di avvio, quindi bastava ricreardi nuovamente e andava. Questo script ha risolto questo difettuccio.

        A presto

        • giuseppe

          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

  • gpz500

    Quest’articolo mi ha solleticato! Anch’io ho scritto una piccola evoluzione, che ho pubblicato qui: http://gpz500.wordpress.com/2011/01/13/eliminare-i-vecchi-kernel-da-ubuntu/