748 votes

Comment supprimer les anciennes versions du noyau pour nettoyer le menu de démarrage ?

Chaque fois que j'installe un nouveau noyau Linux, il est laissé dans le grub_config, rendant le menu de démarrage plus long à chaque fois.

Je sais que je peux rechercher manuellement dans les paquets installés et les supprimer.

Ubuntu propose-t-il un moyen plus simple de les nettoyer ou de les empêcher d'apparaître dans la liste de démarrage ?

0 votes

En plus de supprimer les anciens noyaux, décommentez cette ligne dans le fichier /etc/default/grub si vous voulez vous débarrasser des éléments de "récupération" dans le menu : #GRUB_DISABLE_LINUX_RECOVERY="true"

0 votes

Dans les versions récentes Ubuntu cache les noyaux dans le sous menu de Grub, donc ce n'est pas si gênant. Cependant, il peut être une bonne idée de supprimer les noyaux supplémentaires pour économiser de l'espace, surtout, si vous avez une petite partition /boot séparée.

10 votes

Il existe une commande ubuntu appelée purge-old-kernels pour faire ce travail. Voir mon réponse pour plus d'informations.

635voto

Paul Beckingham Points 7460

16.04 et versions plus récentes d'Ubuntu

sudo apt autoremove

Cette commande supprime les paquets qui étaient automatiquement installés pour résoudre une dépendance, mais qui ne sont plus dépendants. Cela inclut les anciennes versions de linux-headers-* y linux-image-* . (Il est également intelligent à propos de ce processus, en laissant une version de rechange du noyau comme solution de repli).

11.10 et versions plus récentes d'Ubuntu

GRUB2 et son affichage de tous les noyaux

Les dernières versions de Grub2 installé dans Ubuntu affiche automatiquement le dernier noyau et masque les anciens noyaux que vous avez pu installer.

GNU GRUB

Si vous ne voyez pas votre Grub - puis n'oubliez pas d'appuyer sur Shift pendant le démarrage.

Comme vous pouvez le voir, seul le dernier noyau est affiché.

Si vous sélectionnez l'option indiquée (appuyez sur Enter ) alors tous les anciens noyaux deviennent visibles et disponibles pour le démarrage.

GNU GRUB Previous versions

Comment supprimer définitivement les anciens noyaux

Démarrage avec le dernier noyau disponible.

Il existe plusieurs façons de supprimer les anciens noyaux. Personnellement, je ne toucherais pas à Concierge d'ordinateur puisque c'est reconnu pour casser votre ordinateur avec ses suggestions.

synaptique

Une alternative est Synaptique ( sudo apt install synaptic )

recherche de linux-image cliquez avec le bouton droit de la souris sur un noyau et choisissez la suppression complète. Appliquer pour supprimer le noyau.

Synaptic Package Manager

Répétez la recherche mais cette fois pour linux-header - vous pouvez supprimer les en-têtes associés à l'image du noyau choisie précédemment.

Synaptique mais n'essaiera pas de vérifier ce que vous essayez de supprimer... vous pourriez supprimer par inadvertance votre noyau le plus récent - ou même supprimer tous vos noyaux via cet outil, ce qui vous laisserait avec un système non amorçable. Ubuntu !.

N'oubliez pas de vérifier le type de noyau que vous utilisez :

uname -r

Le résultat serait similaire à :

Terminal <uname -r>

Retenez le résultat et le numéro - assurez-vous de ne pas supprimer l'image ou l'en-tête correspondant.

Recommandation

Ma recommandation est de conserver au moins deux ou de préférence trois noyaux, dont le dernier. La raison de cette recommandation est que vous aurez au moins un ou deux autres noyaux pour démarrer, si pour une raison ou une autre, vous ne pouvez pas démarrer avec le dernier noyau ou si vous introduisez une capacité régressive comme un système sans fil cassé.

3 votes

La suppression des anciens paquets "linux-image*" en utilisant synaptic, a bien fonctionné avec 10.04 aussi. (Je le mentionne parce que le titre suggère qu'il peut être seulement pour 11.10 et plus)

4 votes

El -y à la fin de la apt-get est nécessaire, sinon apt-get demande juste une confirmation et comme l'entrée est un tuyau, il abandonne. Cela devrait donc se terminer par : | xargs sudo apt-get purge -y

0 votes

J'ai ajouté un autre moyen sans xargs pour qu'une confirmation soit demandée sur la console avant que les noyaux soient retirés

302voto

David Kemp Points 111

Ma méthode unique pour supprimer les anciens noyaux (ce qui libère aussi de l'espace disque)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

Explication (rappelez-vous, | utilise la sortie de la commande précédente comme entrée de la suivante)

  • dpkg --list liste tous les paquets installés
  • grep linux-image recherche les images linux installées
  • awk '{ print $2 }' ne sort que la 2ème colonne (qui est le nom du paquet)
  • sort -V met les éléments dans l'ordre par numéro de version
  • sed -n '/'`uname -r`'/q;p' imprime les lignes avant le noyau courant
  • xargs sudo apt-get -y purge purge les noyaux trouvés

Déroulement de la sed l'invocation :

  • -n dit à sed pour être tranquille
  • `uname -r` fournit la version actuelle du noyau installé - nous l'incluons entre guillemets afin que la sortie soit incluse dans la commande (vous pouvez également voir ceci sous forme de $(uname -r)
  • /something/q dit qu'il faut s'arrêter lorsque l'on correspond à "quelque chose" (dans ce cas, quelque chose est la sortie de uname -r ) - le / entourer une expression régulière
  • p est imprimé
  • le site ; est le séparateur de commande, donc /something/q;p dit d'arrêter quand vous avez trouvé quelque chose, sinon imprimez

tout à fait, sed -n '/'`uname -r`'/q;p' est d'imprimer les lignes jusqu'à ce qu'elles correspondent au nom du noyau actuel.

Si vous êtes paranoïaque (comme moi), vous pouvez faire en sorte que la dernière partie xargs echo sudo apt-get -y purge afin que la commande pour purger les anciens noyaux soit imprimée, vous pouvez alors vérifier que rien d'inattendu n'est inclus avant de l'exécuter.


Version modifiée pour enlever les en-têtes :

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

Remarque : le sed est modifié. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" extrait uniquement la version (par exemple "3.2.0-44"), sans "-generic" ou similaire de uname -r


Version tout-en-un pour supprimer les images et les en-têtes (combine les deux versions ci-dessus) :

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

2 votes

Notez qu'il est un peu dangereux de faire correspondre la version actuelle du noyau à une expression régulière comme celle-ci : Les points correspondent à n'importe quel caractère et 3.1.2-23 correspond à 3.1.2-2 (ou l'inverse). Voir aussi mon réponse .

20 votes

Voici une version tunée tout-en-un : sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done) Voir aussi mon réponse .

1 votes

@jarno qui m'a aidé dans une très large mesure... Félicitations pour votre one liner

62voto

duncan Points 884

Ubuntu 16.04+ :

$ sudo apt autoremove
...
The following packages will be REMOVED:
  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu 15.10 et inférieur :

Je trouve que c'est le moyen le plus simple et le plus rapide. Il conserve le dernier noyau ainsi que deux autres :

sudo apt-get install bikeshed
sudo purge-old-kernels

Pour modifier le nombre de noyaux supplémentaires qui sont conservés :

sudo purge-old-kernels --keep 3

1 votes

Cette commande est un Shell ShellscriptShell, dont vous pouvez trouver l'emplacement par which purge-old-kernels .

0 votes

Heureux qu'ils aient rendu cela beaucoup plus facile dans la 16.04 ! J'espère que cette réponse continuera à faire son chemin...

0 votes

Sur Ubuntu 16.04, j'ai purge-old-kernels sans bikeshed ( des outils utiles aléatoires qui n'ont pas encore de domicile permanent Évitez d'utiliser le paquet apt-get -y c'est comme fermer les yeux et espérer que tout va bien se passer. Aussi aquí c'est comment autoremove décide du nombre de vieux noyaux à conserver.

44voto

Rob Gray Points 1556

Suppression des entrées de Grub 2 Les entrées doivent être supprimées en modifiant ou en supprimant les fichiers dans le dossier /etc/Grub.d. Le fichier /boot/Grub/Grub.cfg est en lecture seule et ne devrait normalement pas nécessiter d'édition.

Trop de noyaux ?

  • Si vous n'êtes pas sûr du noyau que vous utilisez actuellement, dans un terminal, tapez uname -r .

  • Les noyaux supprimés via APT (Synaptic, "apt-get remove", etc.) mettront automatiquement à jour Grub.cfg et aucune action de l'utilisateur n'est requise.

  • Un excellent outil pour supprimer les noyaux (et les entrées de menu) est Ubuntu-Tweak, une application GUI sûre et facile à utiliser.

  • Installer ubuntu tweak

  • Ubuntu-Tweak sera disponible sous Applications > Outils système.

Supprimer les anciennes entrées du noyau

  • Sélectionnez "Package Cleaner" sur la gauche et "Clean Kernel" dans le panneau de droite.

  • Appuyez sur le bouton "Déverrouiller" en bas à droite, entrez votre mot de passe.

  • Sélectionnez dans la liste affichée les images et les en-têtes du noyau que vous souhaitez supprimer. Le noyau en cours d'utilisation n'est pas répertorié.

  • Appuyez sur le bouton "Nettoyage" en bas à droite pour supprimer les images et les en-têtes du noyau sélectionnés.

Supprimer les systèmes d'exploitation du menu Grub.

  • Les autres systèmes d'exploitation qui ont été supprimés de l'ordinateur seront également supprimés du menu une fois que "update-Grub" est exécuté en tant que root.

  • Les éléments de menu sont placés sur le menu Grub2 par scripts. Si vous ne voulez pas que d'autres systèmes d'exploitation soient inscrits dans le menu, désactivez /etc/scripts.d/30_osprober.

  • Exécuter cette commande pour arrêter l'exécution du script.
    sudo chmod -x /etc/grub.d/30_os-prober

  • DISABLE_30_OS-PROBER='true' dans /etc/default/Grub

Supprimer Memtest86+ du menu Grub.
sudo chmod -x /etc/grub.d/20_memtest86+

  • Exécutez la commande update-Grub pour permettre aux changements d'être incorporés dans Grub.cfg

Source :

Nota: Après les mises à jour du noyau, une nouvelle entrée est ajoutée au menu Grub.Vous pouvez supprimer l'ancienne si vous le souhaitez.Cependant, la plupart des utilisateurs expérimentés vous conseilleront de garder au moins une entrée de rechange au cas où quelque chose se passe mal avec une mise à niveau et que vous devez démarrer une ancienne version du noyau à des fins de dépannage.

Autre moyen de supprimer les entrées du noyau (avant 10.04)

pour Grub pas GRUB2

gestionnaire de démarrage Install startupmanager

Vous pouvez le trouver sous Système>>Administration>>. alt text
alt text
Vous voyez dans la deuxième capture d'écran que vous pouvez sélectionner le nombre de noyaux à afficher ? Je le garde généralement sur 1, mais quand j'ai une mise à jour du noyau, je le change toujours en 2 avant de redémarrer pour pouvoir sélectionner l'ancien noyau si le nouveau noyau a des problèmes avec mon matériel. Une fois que je sais que le nouveau noyau fonctionne bien, je le remets à 1.

2 votes

En fait, le gestionnaire de démarrage ne m'a pas donné une fenêtre comme celle-ci sur Ubuntu 10.04, mais une fenêtre avec deux onglets -> Options de démarrage et Avancé et dans Avancé, il n'y a pas d'option pour limiter le nombre de noyaux. Donc s'il vous plaît mettez à jour la réponse pour Ubuntu 10.04. (Et c'est pourquoi j'ai voté contre )

0 votes

Une idée de la façon dont le "nombre de noyaux à conserver" peut être défini sur une machine qui n'a pas d'interface graphique installée (serveur) ?

0 votes

Startupmanager est périmé. Voir grup-customizer

41voto

Brian Childress Points 437

Purement en ligne de commande, cela supprimera tout sauf le courant et le deuxième plus courant (via le "-2" dans la commande head ci-dessous) :

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |
    awk '{print "linux-image-" $0 " linux-headers-" $0}' )
if [ -n "$OLD" ]; then
    apt-get -qy remove --purge $OLD
fi
apt-get -qy autoremove --purge

9 votes

Une phrase de : dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e [0-9] | xargs sudo apt-get -y purge

0 votes

@DmitryPaskal, Vous devriez ajouter ceci comme une nouvelle réponse.

10 votes

@DmitryPaskal Comme toujours, ne faites pas de copier-coller sans les comprendre. Sur ma machine, cette phrase correspond également à linux-libc-dev:amd64 qui ne devraient pas être supprimés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X