Comment puis-je 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 allonge le menu de démarrage à chaque fois.

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

Ubuntu fournit-il un moyen plus simple de les nettoyer ou de les empêcher de s'afficher dans la liste de démarrage?

16.04 et versions plus récentes d'Ubuntu

sudo apt autoremove

Cette commande supprime les paquets qui ont été automatiquement installés pour résoudre une dépendance, mais dont on ne dépend plus. Cela inclut les anciennes versions de linux-headers-* et linux-image-*. (C'est aussi intelligent à propos de ce processus, laissant une version de rechange du noyau 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 grub - alors 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 affichée (appuyez sur Enter) ensuite, tous les anciens noyaux deviennent visibles et disponibles pour démarrer à partir de.

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 les 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, faites un clic droit sur un noyau et choisissez Suppression complète et enfin cliquez sur le Appliquer bouton pour supprimer le noyau.

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

Synaptique cependant, nous n'essaierons pas de vérifier ce que vous essayez de supprimer... vous pourriez supprimer par inadvertance votre nouveau noyau - ou même supprimer tous vos noyaux via cet outil, vous laissant avec un noyau non amorçable Ubuntu!.

N'oubliez pas de vérifier quel noyau 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

Ma recommandation est de garder au moins deux ou de préférence trois noyaux, y compris le dernier. La raison de la recommandation est que vous aurez au moins un / deux autres noyaux avec lesquels démarrer, si pour une raison quelconque le dernier noyau avec lequel vous ne parvenez pas à démarrer ou si vous introduisez une capacité régressée telle qu'une connexion sans fil cassée.

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

uname -r 

NE SUPPRIMEZ PAS CE NOYAU!

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

dpkg --list '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.

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 de la suivante)

  • dpkg --list répertorie tous les paquets installés
  • grep linux-image recherche les images Linux installées
  • awk '{ print $2 }' affiche simplement la 2ème colonne (qui est le nom du package)
  • 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 invocation:

  • -n dire sed pour être tranquille
  • `uname -r` affiche la version actuelle du noyau installée - nous l'incluons dans les backticks afin que la sortie soit incluse dans le cadre de la commande (vous pouvez également voir cela comme $(uname -r)
  • /something/q dit stop lorsque vous faites correspondre "quelque chose" (dans ce cas, quelque chose est la sortie de uname -r) - le / entourer une expression régulière
  • p est imprimé
  • le ; la commande est-elle séparée, donc /something/q;p dit quitter lorsque vous correspondez à quelque chose, sinon imprimer

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

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 purgedpkg --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 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 à partir 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

Ubuntu 16.04 et plus:

$ 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 versions ultérieures:

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 bikeshedsudo purge-old-kernels

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

sudo purge-old-kernels --keep 3

La suppression des entrées des entrées de Grub 2 doit être supprimée en éditant ou en supprimant des fichiers dans /etc/grub.dossier d. Le fichier / boot / grub / grub.le fichier 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 type de terminal uname-r.

  • Noyaux supprimés via APT (Synaptic, & quot;apt-get remove& quot;, etc.) mettra 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 ubuntu tweak

  • Ubuntu-Tweak sera disponible sous Applications & gt; Outils système.

Supprimer Les Anciennes Entrées du Noyau

  • Sélectionnez & quot; Nettoyeur de paquets" sur la gauche et & quot;Nettoyer le noyau" 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 du noyau et les en-têtes que vous souhaitez supprimer. Le noyau en cours d'utilisation n'est pas répertorié.

  • Appuyez sur le bouton "Nettoyer" 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 & quot; 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 voulez pas que d'autres systèmes d'exploitation soient entrés dans le menu, désactivez /etc / grub.d / 30_sprober

  • Exécutez 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 l'incorporation des modifications dans grub.cfg

Source

Note:Après les mises à jour du noyau, une nouvelle entrée est ajoutée au menu GRUB.Vous pouvez supprimer l'ancien si vous le souhaitez.Cependant, les utilisateurs les plus expérimentés vous conseilleront de conserver au moins une entrée de rechange au cas où quelque chose ne va pas avec une mise à niveau et que vous deviez démarrer une ancienne version du noyau à des fins de dépannage.

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

pour GRUB pas GRUB2

startupmanager

Vous pouvez le trouver sous Système & gt; & gt; Administration>>



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 lorsque je reçois une mise à niveau du noyau, je le change toujours en 2 avant de redémarrer afin de 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 ramène à 1.

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 $OLDfiapt-get -qy autoremove --purge

Mettre: purge-old-kernels être obsolète aujourd'.

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

Si vous souhaitez simplement purger les noyaux (et les packages associés) qui sont 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.

Vous pouvez suivre le Utilisation de la section du package" mises à niveau sans surveillance" de Mises à Jour de Sécurité Automatiques article sur Ubuntu Wiki pour effectuer cela.

Vous devez modifier la ligne suivante dans /etc / apt / apt.conf.d / 50améliorations sans surveillance fichier;

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

avec

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

pour 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.

Le moyen le plus rapide /le plus simple (applicable au moins depuis la version 12.04) possible 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 (à l'exception de la précédente que vous n'utilisez plus. C'est pour s'assurer que si la version actuelle du noyau échoue d'une manière ou d'une autre, vous avez un moyen de revenir à un état précédent). 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 un certain temps car il doit s'assurer que la suppression de la version du noyau n'a 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

ce qui vérifierait les paquets inutilisés et les supprimerait si nécessaire. C'est idéal pour les bibliothèques et les packages de dépendances qui ne sont plus nécessaires en installant une application.

Pour savoir quels noyaux et en-têtes sont installés, utilisez

dpkg -l | grep linux-imagedpkg -l | grep linux-headers

Vous pouvez ensuite les supprimer un par un ou ensemble, assurez-vous simplement de conserver les plus récents.

Il existe également des commandes et des scripts pratiques pour automatiser la suppression.

http://ubuntuforums.org/showthread.php?t=1658648

Les revendications suivantes pour supprimer tous les noyaux et en-têtes inutilisés:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge

(utiliser apt-get -y à retirer sans poser de question)

Voici ce qui se passe lors de l'exécution sur 18.04.1:

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purgeReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages will be REMOVED:  linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*  linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.After this operation, 671 MB disk space will be freed.(Reading database ... 227403 files and directories currently installed.)Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-image-4.15.0-33-generic (4.15.0-33.36) .../etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericFound linux image: /boot/vmlinuz-4.15.0-34-genericFound initrd image: /boot/initrd.img-4.15.0-34-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-genericI: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic/etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...(Reading database ... 156180 files and directories currently installed.)Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removedPurging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...~$ uname -r4.15.0-36-generic

‘sudo apt-get autoremove’ devrait faire l’affaire sur Ubuntu 14.04+

Il y a une commande ubuntu appelée purge-old-kernels pour faire le travail. Voir ma réponse pour plus d’informations.

Je reviens sans cesse sur cette page… le commentaire de @hobs ne fonctionne que si vos noyaux ont été installés automatiquement-cependant, vous faites ‘sudo apt-get autoremove pur purge’ * * la réponse* * en suivant les conseils de ‘apt-mark’ sur https://help.ubuntu.com/community/RemoveOldKernels

L’accumulation d’anciens noyaux est un bug, avec un correctif en cours: https://bugs.launchpad.net/bugs/1357093 . Lorsque le correctif est publié, les anciens noyaux seront supprimés automatiquement par défaut.

@hobs La commande ne fait pas l’affaire pour moi dans Ubuntu Studio 14.04, si les noyaux n’ont pas été installés automatiquement, mais par Software Updater.

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”

Dans les versions récentes, Ubuntu cache les noyaux dans le sous-menu de Grub, ce n’est donc pas si intrusif. Cependant, il peut être judicieux de supprimer des noyaux supplémentaires pour économiser de l’espace, en particulier si vous avez une petite partition /boot séparée.

Je ne trouve aucune réponse qui aiderait à supprimer les noyaux de la version précédente après la mise à niveau d’Ubuntu vers une version plus récente, même si une question spécifique à ce sujet a été marquée comme un double de ceci [ici] (grub2 - How do I remove old kernel versions to clean up the boot menu? - Ask Ubuntu). Voir aussi [rapport de bogue](https://bugs.launchpad.net/ubuntu/+source/vélo/ + bug / 1586303)

J’ai fait un script qui fait le travail. Je le publierai une fois mon objectif de prime atteint: Bountysource