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


Chaque fois que j'installe un nouveau noyau Linux, il reste dans le grub_config, ce qui rend le menu de démarrage plus long à chaque fois.

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

Ubuntu offre-t-il un moyen plus simple de les nettoyer ou de les empêcher de figurer dans la liste de démarrage?


658


origine


En plus de supprimer les anciens noyaux, décommentez cette ligne dans /etc/default/grub si vous voulez vous débarrasser des éléments 'recovery' dans le menu: # GRUB_DISABLE_LINUX_RECOVERY = "true" - poolie
Dans les versions récentes, Ubuntu cache les noyaux dans le sous-menu de Grub, ce n'est donc pas gênant. Cependant, il peut être judicieux de supprimer les noyaux supplémentaires pour économiser de l’espace, surtout si vous avez une petite partition / boot séparée. - jarno
Il existe une commande ubuntu appelée purge-old-kernels pour faire le travail. Voir mon répondre pour plus d'informations. - jarno
sudo apt-get autoremove devrait faire le tour sur Ubuntu 14.04+ - hobs
L'accumulation d'anciens noyaux est un bug, avec les correctifs en cours: bugs.launchpad.net/bugs/1357093 . Lorsque le correctif est publié, les anciens noyaux seront supprimés par défaut. - user535733


Réponses:


16.04 et versions plus récentes d'Ubuntu

sudo apt autoremove

Cette commande supprime les packages qui ont été installés automatiquement pour résoudre une dépendance, mais dont il ne dépend plus. Cela inclut les anciennes versions de linux-headers-* et linux-image-*. (Il est également intelligent à propos de ce processus, en laissant une version du noyau disponible comme solution de secours!)

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 peut-être installés.

GNU GRUB

Si vous ne voyez pas votre ver - alors rappelez-vous d'appuyer sur Décalage pendant le démarrage.

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

Si vous sélectionnez l'option affichée (appuyez sur Entrer) alors tous les anciens noyaux deviennent visibles et disponibles pour démarrer.

GNU GRUB Previous versions 

Comment supprimer définitivement les anciens noyaux

Premier démarrage avec le dernier noyau disponible.

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

synaptique

Une alternative est Synaptique (sudo apt install synaptic)

rechercher linux-image, cliquez-droit sur un noyau et choisissez la suppression complète et enfin cliquez sur le Appliquer bouton 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 ne tentera pas de vérifier ce que vous tentez de supprimer ... vous pourriez supprimer par inadvertance votre nouveau noyau - ou même supprimer tous vos noyaux via cet outil, vous laissant ainsi Ubuntu!

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

uname -r

Le résultat serait similaire à:

Terminal <uname -r>

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

Recommandation

Je recommande de conserver au moins deux ou de préférence trois noyaux, dont le dernier. La raison de la recommandation est que vous aurez au moins un ou deux autres noyaux à démarrer si, pour une raison quelconque, le dernier noyau que vous ne parvenez pas à démarrer ou à introduire une fonctionnalité de régression telle que le sans-fil cassé.


568



Supprimer les anciens paquets "linux-image *" en utilisant synaptic, a également bien fonctionné avec 10.04. (Je le mentionne parce que le titre suggère qu'il ne peut être que pour 11.10 et plus) - mivk
la -y passer à la fin du apt-get ligne est nécessaire, sinon apt-get demande juste une confirmation et comme l'entrée est un tube, il suffit d'interrompre. Donc ça devrait finir par: | xargs sudo apt-get purge -y - Josh
Suppression d'environ 20 versions de l'ancien linux-image et linux-headers libéré 4,5 Go d'espace sur ma machine. - Andrew Mao
Cette méthode fonctionne bien, mais la suppression de chaque noyau régénère de manière excessive grub.cfg, ce qui prend du temps. Est-il possible de désactiver cette option pour la suppression par lots, puis de la régénérer une fois? - spacediver
J'appuie la question de @spacediver - il s'agit d'un processus extrêmement lent lorsque vous avez 38 noyaux inutiles, car chaque fois que vous les désinstallez, ils passent par tous les autres en générant un nouveau fichier grub.cfg. C'est ce que nous appelons une opération N ^ 2 - elle traite un noyau d'environ (38 ^ 2/2) = 722 fois et est très lente. Ubuntu peut sûrement proposer quelque chose de mieux .... - nealmcb


Tout d'abord, redémarrez votre système pour vous assurer qu'il utilise le dernier noyau. Ouvrez ensuite le terminal et vérifiez votre noyau actuel:

uname -r 

NE RETIREZ PAS CE KERNEL!

Ensuite, tapez la commande ci-dessous pour afficher / répertorier tous les noyaux installés sur votre système.

dpkg --list | grep linux-image 

Trouvez tous les noyaux inférieurs à votre noyau actuel. Lorsque vous savez quel noyau supprimer, continuez ci-dessous pour le supprimer. Exécutez les commandes ci-dessous pour supprimer le noyau que vous avez sélectionné.

sudo apt-get purge linux-image-x.x.x-x-generic 

Enfin, exécutez les commandes ci-dessous pour mettre à jour grub2

sudo update-grub2 

Redémarrez votre système.


365



En procédant ainsi en 10.04 et 12.04, j'ai trouvé que update-grub était automatiquement exécuté pendant le processus de purge. - aidan
bash extension d'accolade peut être utilisé, par ex. sudo apt-get purge linux-image-3.2.0-3{0..5}-generic (enlève 30,31, .., 35) - ajo
Plus besoin de redémarrer le système par la suite. En fait, vous devez redémarrer le système avant Effectuez ces étapes pour vous assurer que vous utilisez la dernière version du noyau que vous avez probablement téléchargée et installée (vous avez déjà effectué une mise à niveau d'apt-get update && apt-get avant, n'est-ce pas?) - Ricket
Vous pouvez également désinstaller le linux-signed-image packages pouvant être installés dans des systèmes UEFI: sudo apt-get purge linux-signed-image-3.11.0-{12,14,24}-generic qui supprimerait 12, 14 et 24 - devius
@jarno Je ne sais pas si j'utilise un noyau signé ou non, mais uname -r n'a pas de signed chaîne sur mon système. Je semble avoir une image signée installée et le résultat de cette ls commande est: /boot/vmlinuz-3.19.0-16-generic.efi.signed. - devius


Mon one-liner pour supprimer les anciens noyaux (cela libère également 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 pour la suivante)

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

Dérouler le sed invocation:

  • -n raconte sed se taire
  • `uname -r` affiche la version actuelle du noyau installé - nous l'incluons dans les backticks pour que la sortie soit incluse dans la commande (vous pouvez également voir ceci comme $(uname -r) 
  • /something/q dit stop quand vous faites correspondre quelque chose (dans ce cas, quelque chose est sorti de uname -r) - la / entourer une expression régulière
  • p est imprimé
  • la ; est le separtor de commande, donc /something/q;p dit quitter quand vous correspondez à quelque chose, sinon imprimer

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

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


Version modifiée pour supprimer 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

Noter la sed l'invocation est modifiée. "$(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

261



Notez qu'il est peu dangereux de faire correspondre la version actuelle du noyau avec une expression régulière comme ceci: Les points correspondent à n'importe quel caractère et 3.1.2-23 correspond à 3.1.2-2 (ou est-ce une autre façon de contourner). Voir aussi mon répondre. - jarno
Voici une version tout-en-un mise au point: 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épondre. - jarno
@jarno qui m'a beaucoup aidé ... Félicitations à votre seule ligne - Clain Dsilva
En raison de dépendances non satisfaites, je devais l'utiliser avec dkpg -Pau lieu. Voici la version complète: 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 dpkg -P - Sebastian Sastre
NON NE FAITES PAS CE! "Ce mannequin a l'air un peu dangereux, mais sûrement 220 électeurs ne peuvent pas se tromper!" Je me suis dit et collé à l'aveuglette. Redémarré, directement à GRUB. Cette commande a effacé tous mes noyaux, y compris celui que j'utilisais. Peut-être que j'utilisais un noyau en temps réel, je ne me souviens même pas. Actuellement, je cherche une clé USB dans ma maison pour installer Ubuntu Live CD sur :( - Andreas Jansson


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 ci-dessous:

Je trouve cela 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 changer le nombre de noyaux supplémentaires conservés:

sudo purge-old-kernels --keep 3

55



Cette commande est un script shell dont vous pouvez trouver l'emplacement par which purge-old-kernels. - jarno
Heureux qu'ils aient rendu cela beaucoup plus facile en 16.04! J'espère que cette réponse continue à faire son chemin ... - Toby J
Sur Ubuntu 16.04, j'ai purge-old-kernels sans bikeshed (des outils utiles aléatoires qui n'ont pas encore de domicile permanent) paquet ou un particulier.Évitez à utiliser apt-get -y option, c'est comme fermer les yeux et espérer que tout va bien se passer. Aussi ici c'est comme ça autoremove décide du nombre d'anciens noyaux à conserver. - Pablo Bianchi
En 16.04, purge-old-kernels est fourni par le package byobu (indice: apt-file search purge-old-kernels). D'accord sur apt-get -y, Je vais l'enlever - bmaupin
@Dan puisque je n'utilise pas de versions non-LTS, je n'étais pas sûr de savoir exactement quand il a commencé. Mais je peux dire avec certitude que sudo apt-get autoremove ne supprime pas les noyaux en 14.04. N'hésitez pas à mettre à jour la réponse avec la version spécifique si vous savez ce que c'est! - bmaupin


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

Trop de noyaux? 

  • Si vous n'êtes pas sûr du noyau que vous utilisez actuellement, dans un type de terminal 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 graphique sûre et facile à utiliser.

  • Installer tweak ubuntu

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

Supprimer les anciennes entrées du noyau

  • Sélectionnez "Cleaner Package" à gauche et "Clean Kernel" à partir du 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 du noyau et les en-têtes à supprimer. Le noyau utilisé 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 dans le menu Grub2 par des scripts. Si vous ne souhaitez pas que d'autres systèmes d'exploitation soient entrés dans le menu, désactivez /etc/grub.d/30_osprober

  • Exécutez cette commande pour empêcher le script de s'exécuter
    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 modifications d'être incorporées dans grub.cfg

La source 

Remarque: Après les mises à jour du noyau, une nouvelle entrée est ajoutée au menu GRUB. Vous pouvez supprimer l'ancienne version si vous le souhaitez. Cependant, les utilisateurs les plus expérimentés vous conseillent de conserver au moins une entrée de secours en cas de problème avec une mise à niveau. démarrer une ancienne version du noyau à des fins de dépannage.

Autre méthode pour supprimer les entrées du noyau (antérieures à 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 combien de noyaux montrer? Je le garde généralement sur 1, mais quand je reçois une mise à jour du noyau, je le change toujours sur 2 avant de redémarrer pour pouvoir sélectionner le noyau plus ancien si le nouveau noyau a des problèmes avec mon matériel. Une fois que je sais que le nouveau noyau fonctionne correctement, je le remplace par 1.


41



En fait, startupmanager dint me donne une fenêtre comme celle-ci sur Ubuntu 10.04, au lieu de cela, il donne juste une fenêtre avec deux onglets -> Options de démarrage et Avancé .. et à l'avance il peut 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 cela ..) - Sen
une idée de la façon dont "nombre de noyaux à conserver" peut être défini sur une machine sur laquelle aucune interface graphique n'est installée (serveur)? - sylvainulg
startupmanager est obsolète. Voir grup-customizer - muhasturk


A la ligne de commande, cela supprimera tout sauf le courant et le second 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

38



one-liner de Là: 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 - Dmitry Verkhoturov
@ DimitPaskal, vous devriez ajouter ceci comme nouvelle réponse. - saji89
@DmitryPaskal Comme toujours, ne vous contentez pas de les coller sans les comprendre. Sur ma machine, ce one-liner correspond aussi linux-libc-dev:amd64 qui ne devrait pas être enlevé. - jamesadney
@Kees Cook, l'argument awk ne devrait-il être entouré que par des guillemets simples? Si votre intention est d’ajouter "linux-image-" aux lignes, cela ne semble fonctionner que si vous utilisez awk '{print "linux-image-" $0}'. - Mark
Cela ne fonctionne pas pour moi, cela inclut mon noyau installé sur mesure (Ubuntu 14.04 avec 3.17) - Alex R


Mettre à jour: purge-old-kernels est déconseillé aujourd'hui.

J'ai fait un script pour purger les noyaux même dans des conditions difficiles. On l'appelle linux-purge et vous pouvez le trouver ici.

Si vous souhaitez simplement purger les noyaux (et les packages associés) plus anciens que le noyau actuellement utilisé, lorsque le système n'est pas cassé, vous pouvez utiliser ce script.

Il y a aussi une page de documentation Ubuntu à laquelle j'ai contribué concernant la suppression des anciens noyaux ici.


34



Ressemble à purge-old-kernelsn'est pas dans la version précise (1.22) des bikeshed. Existe-t-il un moyen raisonnable / sûr d’obtenir un vélo plus récent pour être précis? Ou serait-il plus simple / plus sûr d'installer le script? Je préférerais utiliser un repo malgré la longue liste de dépendances. - drevicko
@drevicko Voir ici. - jarno
Une question un peu plus tangentielle: à moins d’aller à la source, existe-t-il un moyen de déterminer quelles commandes sont disponibles lors de l’installation de Bikeshed? - drevicko
@ drevicko, bien sûr dlocate -lsbin bikeshed - jarno
@ drevicko, voir aussi une autre question - jarno


Vous pouvez suivre le Utiliser la section du package "mises à jour sans surveillance" de Mises à jour de sécurité automatiques article sur Ubuntu Wiki pour effectuer cela.

Vous devez changer la ligne suivante dans /etc/apt/apt.conf.d/50unattended-upgrades fichier;

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

avec

Unattended-Upgrade::Remove-Unused-Dependencies "true";

supprimer automatiquement les anciens paquets, y compris les noyaux.

Supprimez ou commentez également la ligne

"^linux-image.*"; 

dans la section "NeverAutoRemove" du fichier /etc/apt/apt.conf.d/01autoremove.


29



Je l'ai fait, mais il collectait toujours plus de 3 vieux noyaux consommant des centaines de Mo. Donc j'ai ajouté apt-get autoremove à mon travail cron quotidien qui effectue les mises à niveau, car il ne passe pas toujours par le gestionnaire de mise à jour intégré. - Marcos
Je pense que cela fonctionne dans Trusty uniquement pour les noyaux qui ont été installés automatiquement. - jarno
Cela est excellent pour empêcher la construction d'anciens noyaux lors de la mise à niveau automatique de packages, par ex. avec des mises à niveau sans surveillance. Cependant, si vous ne redémarrez pas, vous pourriez trouver que le paquet pour le noyau en cours d'exécution a été désinstallé! Un problème que cela peut causer: les nouveaux périphériques que vous branchez peuvent ne pas fonctionner, car le module ne peut pas être chargé à chaud, car il n’est plus sur votre disque. (Une solution rapide à cette question consiste à réinstaller le package du noyau, puis à débrancher et à rebrancher le périphérique.) - joeytwiddle
j'ai crée une solution automatisée à la question susmentionnée. Si vous pensez que c'est une bonne approche, n'hésitez pas à l'ajouter à la réponse de Qwerty. - joeytwiddle


Le moyen le plus rapide / le plus simple possible (applicable au moins depuis le 12.04) qui est déjà fourni avec Ubuntu est apt-get. Procédez comme suit si vous souhaitez supprimer toutes les anciennes versions du noyau qui ne sont pas utilisées (sauf la précédente que vous n'utilisez pas. Cela permet de vous assurer que si la version actuelle du noyau échoue d'une manière ou d'une autre, retour à un état antérieur). Procédez comme suit:

sudo apt-get autoclean

Cela éliminera tous les anciens fichiers (y compris les versions du noyau) que vous pourriez avoir. Notez que si vous avez beaucoup d'anciennes versions, cela prendra du temps car il doit s'assurer que la suppression de la version du noyau ne pose aucun problème. Pour moi, la suppression des 12 dernières versions du noyau a pris environ 2 minutes. Vous pouvez également effectuer les opérations suivantes:

sudo apt-get clean

Ce qui éliminera tout ce qui est téléchargé et stocké dans le dossier cache d'apt. Enfin vous avez:

sudo apt-get autoremove

qui vérifierait pour tous les paquets inutilisés et les supprimer si nécessaire. C'est génial pour les bibliothèques et les paquets de dépendances qui ne sont plus nécessaires par aucune application installée.


27



Je suppose que cela a changé dans les nouvelles versions comme en 14.04, cela nettoie simplement le cache du paquet et n'affecte pas les paquetages installés ou grub. - jarno
Je peux confirmer que sudo apt-get autoremove supprime les anciens noyaux (plus d'une version) au 14.04. Vous devrez peut-être l'exécuter avant et après la mise à niveau de votre noyau. Lorsque j'ai couru avant la mise à niveau, cela n'a supprimé que la version générique de l'ancien noyau. Ensuite, après la mise à niveau de mon noyau, il a également supprimé la version lowlatency de l’ancien noyau. - tekNorah
Je voulais dire le sudo apt-get autoclean commander. @tekNorah J'ai installé quelques noyaux plus anciens et par la suite, j'ai couru sudo apt-get autoremove dans Ubuntu Studio 14.04. Il n'a pas enlevé de noyaux. Je n'ai installé que des noyaux de faible intensité. Pourquoi avez-vous installé les deux noyaux -generic et -lowlatency? - jarno
Oui, cela a fonctionné à merveille pour moi, nettoyé tous les vieux noyaux correctement, et ne repose pas sur des scripts d'une seule ligne! Recommandé, j'aimerais pouvoir voter plus d'une fois! - Jeff Atwood
@JeffAtwood bien, il pourrait enlever plus de noyaux sûrs. Voir rapport d'erreur - jarno