Dans un article précédent jai donné la commande à utiliser pour supprimer les anciens noyaux pour une distribution basée sur les paquets RPM (RedHat, CentOS et Fedora), ici je propose une solution pour les distributions utilisant les paquets DEB (Debian, Ubuntu).

Pour la distribution Aptosid, il y a un script d’installé en standard, il s’agit du paquet kernel-remover qui est accédé depuis le menu Applications > Outils système > kernel-remover.

Les tests ont été effectués dans VirtualBox avec une VM fonctionnant sous Ubuntu 10.04.

Pour obtenir la liste des noyaux installés, il faut regarder le contenu du dossier /boot. Pour chaque noyau, il y a un fichier vmlinuz-* :

    yvon@Slim64b:~$ ls -lrt /boot/vmlinuz-2.6.32-2*
    -rw-r--r-- 1 root root 4037888 2010-04-16 13:32 /boot/vmlinuz-2.6.32-21-generic
    -rw-r--r-- 1 root root 4037792 2010-06-04 00:53 /boot/vmlinuz-2.6.32-22-generic
    -rw-r--r-- 1 root root 4045536 2010-06-11 13:28 /boot/vmlinuz-2.6.32-23-generic
    -rw-r--r-- 1 root root 4050848 2010-09-16 20:24 /boot/vmlinuz-2.6.32-24-generic
    -rw-r--r-- 1 root root 4049888 2010-12-02 05:42 /boot/vmlinuz-2.6.32-27-generic
    -rw-r--r-- 1 root root 4052512 2011-01-11 01:27 /boot/vmlinuz-2.6.32-28-generic
    yvon@Slim64b:~$

Le fichier vmlinuz-2.6.32-21-generic correspond au noyau linux-image-2.6.32-21-generic.
Le dernier noyau (linux-image-2.6.32-28-generic) est celui actuellement utilisé, il ne faut pas le supprimer. Il est également conseillé de garder l’avant dernier noyau en cas de soucis.

Pour obtenir la liste des noyaux en retirant les 2 derniers, on va utiliser la commande :

    yvon@Slim64b:~$ ls -rt /boot/vmlinuz-* | head -n -2
    /boot/vmlinuz-2.6.32-21-generic
    /boot/vmlinuz-2.6.32-22-generic
    /boot/vmlinuz-2.6.32-23-generic
    /boot/vmlinuz-2.6.32-24-generic
    yvon@Slim64b:~$

La commande head affiche les 10 premières lignes d’un fichier ou de l’entrée stdin, l’option -n permet de spécifier le nombre de ligne à afficher (head -n 3 toto.txt affiche les 3 premières lignes du fichier toto.txt).
En inversant l’option du nombre de lignes (-2) on affiche les premières lignes à l’exception des 2 dernières lignes.

Le résultat obtenu indique le nom du noyau vmlinuz alors que le nom du paquet est linux-image. Il y a également le nom du sossier (/boot) dans le résultat.
Pour corriger cela, on va utiliser la commande sed pour remplacer vmlinuz par linux-image et pour supprimer /tools.
On obtient alors :

    yvon@Slim64b:~$ ls -rt /boot/vmlinuz-* | head -n -2 | sed 's@vmlinuz-@linux-image-@g' | sed 's@/boot/@@'
    linux-image-2.6.32-21-generic
    linux-image-2.6.32-22-generic
    linux-image-2.6.32-23-generic
    linux-image-2.6.32-24-generic
    yvon@Slim64b:~$

Une fois obtenu la liste des paquets à supprimer, il faut passer ce résultat à la commande apt-get remove, pour cela on utilise la commande xargs :

    ls -rt /boot/vmlinuz-* | head -n -2 | sed 's@vmlinuz-@linux-image-@g' | sed 's@/boot/@@' | xargs -I {} apt-get remove -y {}

Ce qui donne :

    root@Slim64b:~# ls -rt /boot/vmlinuz-* | head -n -2 | sed 's@vmlinuz-@linux-image-@g' | sed 's@/boot/@@' | xargs -I {} apt-get remove -y {}
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances       
    Lecture des informations d'état... Fait
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
      linux-headers-2.6.32-21-generic linux-headers-2.6.32-24-generic linux-headers-2.6.32-21 linux-headers-2.6.32-22 linux-headers-2.6.32-23
      linux-headers-2.6.32-24 linux-headers-2.6.32-22-generic linux-headers-2.6.32-23-generic
    Veuillez utiliser « apt-get autoremove » pour les supprimer.
    Les paquets suivants seront ENLEVÉS :
      linux-image-2.6.32-21-generic
    0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
    Après cette opération, 125Mo d'espace disque seront libérés.
    (Lecture de la base de données... 229520 fichiers et répertoires déjà installés.)
    Suppression de linux-image-2.6.32-21-generic ...
    Running postrm hook script /usr/sbin/update-grub.
    Generating grub.cfg ...
    Found linux image: /boot/vmlinuz-2.6.32-28-generic
    Found initrd image: /boot/initrd.img-2.6.32-28-generic
    Found linux image: /boot/vmlinuz-2.6.32-27-generic
    Found initrd image: /boot/initrd.img-2.6.32-27-generic
    Found linux image: /boot/vmlinuz-2.6.32-24-generic
    Found initrd image: /boot/initrd.img-2.6.32-24-generic
    Found linux image: /boot/vmlinuz-2.6.32-23-generic
    Found initrd image: /boot/initrd.img-2.6.32-23-generic
    Found linux image: /boot/vmlinuz-2.6.32-22-generic
    Found initrd image: /boot/initrd.img-2.6.32-22-generic
    Found memtest86+ image: /boot/memtest86+.bin
    done
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances       
    Lecture des informations d'état... Fait
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
      linux-headers-2.6.32-21-generic linux-headers-2.6.32-24-generic linux-headers-2.6.32-21 linux-headers-2.6.32-22 linux-headers-2.6.32-23
      linux-headers-2.6.32-24 linux-headers-2.6.32-22-generic linux-headers-2.6.32-23-generic
    Veuillez utiliser « apt-get autoremove » pour les supprimer.
    Les paquets suivants seront ENLEVÉS :
      linux-image-2.6.32-22-generic
    0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
    Après cette opération, 125Mo d'espace disque seront libérés.
    (Lecture de la base de données... 226344 fichiers et répertoires déjà installés.)
    Suppression de linux-image-2.6.32-22-generic ...
    Running postrm hook script /usr/sbin/update-grub.
    Generating grub.cfg ...
    Found linux image: /boot/vmlinuz-2.6.32-28-generic
    Found initrd image: /boot/initrd.img-2.6.32-28-generic
    Found linux image: /boot/vmlinuz-2.6.32-27-generic
    Found initrd image: /boot/initrd.img-2.6.32-27-generic
    Found linux image: /boot/vmlinuz-2.6.32-24-generic
    Found initrd image: /boot/initrd.img-2.6.32-24-generic
    Found linux image: /boot/vmlinuz-2.6.32-23-generic
    Found initrd image: /boot/initrd.img-2.6.32-23-generic
    Found memtest86+ image: /boot/memtest86+.bin
    done
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances       
    Lecture des informations d'état... Fait
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
      linux-headers-2.6.32-21-generic linux-headers-2.6.32-24-generic linux-headers-2.6.32-21 linux-headers-2.6.32-22 linux-headers-2.6.32-23
      linux-headers-2.6.32-24 linux-headers-2.6.32-22-generic linux-headers-2.6.32-23-generic
    Veuillez utiliser « apt-get autoremove » pour les supprimer.
    Les paquets suivants seront ENLEVÉS :
      linux-image-2.6.32-23-generic
    0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
    Après cette opération, 128Mo d'espace disque seront libérés.
    (Lecture de la base de données... 223168 fichiers et répertoires déjà installés.)
    Suppression de linux-image-2.6.32-23-generic ...
    Running postrm hook script /usr/sbin/update-grub.
    Generating grub.cfg ...
    Found linux image: /boot/vmlinuz-2.6.32-28-generic
    Found initrd image: /boot/initrd.img-2.6.32-28-generic
    Found linux image: /boot/vmlinuz-2.6.32-27-generic
    Found initrd image: /boot/initrd.img-2.6.32-27-generic
    Found linux image: /boot/vmlinuz-2.6.32-24-generic
    Found initrd image: /boot/initrd.img-2.6.32-24-generic
    Found memtest86+ image: /boot/memtest86+.bin
    done
    Lecture des listes de paquets... Fait
    Construction de l'arbre des dépendances       
    Lecture des informations d'état... Fait
    Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
      linux-headers-2.6.32-21-generic linux-headers-2.6.32-24-generic linux-headers-2.6.32-21 linux-headers-2.6.32-22 linux-headers-2.6.32-23
      linux-headers-2.6.32-24 linux-headers-2.6.32-22-generic linux-headers-2.6.32-23-generic
    Veuillez utiliser « apt-get autoremove » pour les supprimer.
    Les paquets suivants seront ENLEVÉS :
      linux-image-2.6.32-24-generic
    0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
    Après cette opération, 128Mo d'espace disque seront libérés.
    (Lecture de la base de données... 219868 fichiers et répertoires déjà installés.)
    Suppression de linux-image-2.6.32-24-generic ...
    Running postrm hook script /usr/sbin/update-grub.
    Generating grub.cfg ...
    Found linux image: /boot/vmlinuz-2.6.32-28-generic
    Found initrd image: /boot/initrd.img-2.6.32-28-generic
    Found linux image: /boot/vmlinuz-2.6.32-27-generic
    Found initrd image: /boot/initrd.img-2.6.32-27-generic
    Found memtest86+ image: /boot/memtest86+.bin
    done
    root@Slim64b:~#

A chaque suppression de noyau, le Grub est mis à jour.
Au final, il reste 2 noyaux dans le dossier /boot :

    root@Slim64b:~# ls /boot/vmlinuz-2.6.32-2*
    /boot/vmlinuz-2.6.32-27-generic  /boot/vmlinuz-2.6.32-28-generic