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

669

Chaque fois que j'installe un nouveau noyau Linux, il reste dans le paramètre grub_config, ce qui allonge le menu de démarrage plus longtemps.

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?

    
posée Hans 22.01.2016 - 16:20
la source

37 réponses

577

16.04 et les 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 ils ne dépendent plus. Cela inclut les anciennes versions de linux-headers-* et linux-image-* . (Ce processus est également intelligent, laissant une version de secours 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ées dans Ubuntu affichent automatiquement le dernier noyau et masquent les anciens noyaux que vous avez éventuellement installés.

Sivousnevoyezpasvotregroupe,n'oubliezpasd'appuyersurMajlorsdudémarrage.

Commevouspouvezleconstater,seullederniernoyauestaffiché.

Sivoussélectionnezl'optionaffichée(appuyezsurEntrée),touslesanciensnoyauxdeviennentvisiblesetdisponiblespourdémarrer.

Comment supprimer définitivement les anciens noyaux

Commencez par démarrer avec le dernier noyau disponible.

Il existe plusieurs façons de supprimer les anciens noyaux. Personnellement, je ne toucherais pas à Computer Janitor car il est reconnu que cela casserait votre ordinateur avec ses suggestions.

synaptique

Une alternative est Synaptic ( sudo apt install synaptic )

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

Répétezlarecherchemaiscettefoispourlinux-header-vouspouvezsupprimerlesen-têtesassociéspourl'imagedunoyauchoisieprécédemment.

Synapticn'essaieracependantpasdevérifiercequevousessayezdesupprimer...vouspourriezsupprimerparinadvertancevotrederniernoyau-oumêmesupprimertousvosnoyauxviacetoutil,cequivouslaissaitavecundémarrageimpossibleUbuntu!.

N'oubliezpasdevérifierquelnoyauvousutilisez,tapez:

uname-r

Lerésultatseraitsimilaireà:

Mémorisez le résultat et le numéro - veillez à 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, le plus récent compris. La raison de cette recommandation est que vous aurez au moins un / deux autres noyaux avec lesquels démarrer, si pour quelque raison que ce soit, le dernier noyau que vous ne parvenez pas à démarrer ou à introduire une fonctionnalité régressée telle que le sans fil cassé.

    
réponse donnée fossfreedom 08.05.2018 - 18:09
la source
367

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 

Recherchez 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 sélectionné.

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

Enfin, lancez les commandes ci-dessous pour mettre à jour grub2

sudo update-grub2 

Redémarrez votre système.

    
réponse donnée penreturns 11.07.2018 - 10:33
la source
267

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 que | utilise la sortie de la commande précédente comme entrée de la suivante)

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

Dénouement de l'invocation de sed :

  • -n dit à sed de rester silencieux
  • 'uname -r' affiche la version actuelle du noyau installé - nous l'incluons dans des backticks afin que la sortie soit incluse avec la commande (vous pouvez également le voir sous la forme $(uname -r)
  • /something/q dit que vous arrêtez lorsque vous faites correspondre quelque chose (dans ce cas, quelque chose est produit par uname -r ) - le / entoure une expression régulière
  • p is print
  • le ; est le séparateur de commande, donc /something/q;p dit qu'il faut quitter quand vous correspondez quelque chose, sinon affichez

Dans l’ensemble, sed -n '/''uname -r''/q;p' affiche les lignes jusqu’à concordance avec le nom du noyau actuel.

Si vous êtes paranoïaque (comme moi), vous pouvez créer la dernière partie xargs echo sudo apt-get -y purge afin que la commande de purge des anciens noyaux soit imprimée, puis 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]\+\)//")"'/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]\+\)//")"'/q;p' | xargs sudo apt-get -y purge

Remarque: l'invocation de sed est modifiée. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)//")" extrait uniquement la version (par exemple "3.2.0-44"), sans "-générique" 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]\+\)//")"'/q;p') | xargs sudo apt-get -y purge
    
réponse donnée David Kemp 21.07.2015 - 08:27
la source
56

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 conservés:

sudo purge-old-kernels --keep 3
    
réponse donnée bmaupin 21.05.2017 - 20:34
la source
42

Supprimer des entrées de Grub 2 Les entrées doivent être supprimées en modifiant ou en supprimant les fichiers du dossier /etc/grub.d. Le fichier /boot/grub/grub.cfg est en lecture seule et ne devrait normalement pas être modifié.

Trop de noyaux?

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

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

  • Ubuntu-Tweak est un excellent outil pour supprimer les noyaux (et les entrées de menu). Il s'agit d'une application à interface graphique sûre et facile à utiliser.

  • Installez le tweak ubuntu

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

Supprimer les anciennes entrées du noyau

  • Sélectionnez "Package Cleaner" à gauche et "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 utilisé n'est pas listé.

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

Supprimer les systèmes d'exploitation du menu Grub

  • Les autres systèmes d'exploitation supprimés de l'ordinateur seront également supprimés du menu une fois que "update-grub" sera 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

Source

Remarque: Après la mise à jour du noyau, une nouvelle entrée est ajoutée au menu GRUB. Vous pouvez supprimer l’ancienne si vous le souhaitez. Cependant, les utilisateurs les plus expérimentés vous conseilleront de conserver au moins une entrée de réserve en cas de problème lors d’une mise à niveau. démarrez une ancienne version du noyau à des fins de dépannage.

Autre moyen de supprimer les entrées du noyau (antérieures à 10.04)

pour GRUB pas GRUB2

startupmanager

Vous pouvez le trouver sous Système > > Administration > >

Vous voyez dans la deuxième capture d'écran que vous pouvez sélectionner le nombre de noyaux à afficher? En général, je ne le garde que 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 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 bien, je le repasse à 1.

    
réponse donnée karthick87 11.03.2017 - 19:59
la source
39

Purement en ligne de commande, cela supprimera tout sauf le courant et le deuxième 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
    
réponse donnée Kees Cook 08.05.2015 - 19:01
la source
34

Mise à jour: purge-old-kernels est obsolète de nos jours.

J'ai créé 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 uniquement purger les noyaux (et les packages associés) plus anciens que le noyau actuellement utilisé, vous pouvez utiliser ce script .

Il existe également une page de documentation Ubuntu à laquelle j'ai contribué à la suppression des anciens noyaux ici .

    
réponse donnée jarno 19.11.2017 - 16:00
la source
29

Vous pouvez suivre la Utilisation de la section de package "Unattended-upgrades" de Mises à jour automatiques de sécurité sur Ubuntu Wiki pour effectuer cette opération.

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

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

avec

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

pour supprimer automatiquement les anciens packages, y compris les noyaux.

Supprimez ou commentez également la ligne

"^linux-image.*"; 

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

    
réponse donnée Qwerty 01.03.2013 - 13:44
la source
27

Le moyen le plus rapide / simple (applicable au moins depuis le 12.04) qui existe déjà 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 vous assurer que si la version actuelle du noyau échoue d’une manière ou d’une autre, vous avez encore du chemin à faire. retour à un état antérieur). Procédez comme suit:

sudo apt-get autoclean

Ceci é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 puisqu'il faut 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érifiera tous les paquets inutilisés et les supprimera si nécessaire. C’est formidable pour les bibliothèques et les paquets de dépendance qui ne sont plus nécessaires depuis aucune application installée.

    
réponse donnée Luis Alvarado 22.08.2017 - 21:44
la source
25

Méthode 10.04 de l'interface graphique

Computer Janitor peut nettoyer les anciens noyaux et je pense qu’il est installé par défaut dans Ubuntu (mais pas Kubuntu).

GRUB 1, si vous utilisez cela, a une option dans /boot/grub/menu.lst pour spécifier le nombre de noyaux à afficher au maximum. GRUB 2, autant que je sache, ne le fait pas.

    
réponse donnée maco 26.03.2012 - 10:58
la source
24

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

dpkg -l | grep linux-image

dpkg -l | grep linux-headers

Vous pouvez ensuite les supprimer un par un ou ensemble, en veillant à conserver le plus récent.

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

lien

Les revendications suivantes permettent de supprimer tous les noyaux et en-têtes non utilisés:

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

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

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]

\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The 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-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Found linux image: /boot/vmlinuz-4.15.0-34-generic
Found initrd image: /boot/initrd.img-4.15.0-34-generic
Adding boot menu entry for EFI firmware configuration
done
Removing 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-generic
I: /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-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Adding boot menu entry for EFI firmware configuration
done
Removing 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 removed
Purging 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 -r
4.15.0-36-generic
    
réponse donnée mikewhatever 20.10.2018 - 15:45
la source
16

Pour supprimer les noyaux d'image Linux plus anciens, commencez par démarrer dans le noyau que vous souhaitez conserver.

Vous pouvez également vérifier la version du noyau à l'aide de la commande uname -r afin de ne pas supprimer la mauvaise par erreur.

Allez maintenant dans le gestionnaire de paquets synaptic, recherchez linux-image et supprimez les anciennes versions, à l'exception de celle indiquée par la commande supérieure. Généralement, je préfère aller avec le dernier.

Lorsque vous redémarrez, vous verrez un menu de menu plus propre.

    
réponse donnée anurag-jain 03.03.2011 - 14:10
la source
14

Vous pouvez installer ubuntu-tweak puis allez dans Applications - > Outil système - > Ubuntu tweak et

cliquez sur le nettoyeur de paquet et sur le nettoyage des noyaux. il ne montre pas le noyau actuellement utilisé, vous serez donc toujours en sécurité.

    
réponse donnée Lincity 03.03.2011 - 14:26
la source
8

Personnellement, j'aime utiliser Synaptic . Cela me rend plus sûr de ce qui se passe. La seule application que j'ai utilisée et qui offre la possibilité de supprimer les anciens noyaux est Ubuntu Tweak .

Comment supprimer les noyaux que vous n'utilisez pas:

  • Ouvrez UbuntuTweak
  • Cliquez sur "Package Cleaner" sous "Applications" dans le volet de gauche
  • .
  • Sur le côté droit de la "vue de nettoyage", appuyez sur "Nettoyer les noyaux"
  • Sélectionne tous les noyaux - Je pense que celui utilisé n'est pas répertorié, mais juste au cas où vérifier lancer uname -a dans un terminal
réponse donnée Alan Featherston 08.04.2013 - 02:24
la source
6

Vous pouvez désinstaller les anciens noyaux ( linux-image-... packages) à l’aide de Synaptic, ce qui les supprimera du menu de démarrage. Veillez à ne pas supprimer le noyau en cours d’exécution (vous pouvez vérifier sa version avec uname -r ).

N'oubliez pas qu'avoir une ou deux versions plus anciennes peut vous aider à résoudre les problèmes éventuels en cas de problème.

Vous pouvez également modifier / supprimer les entrées manuellement ( gksu gedit /boot/grub/grub.cfg ), mais elles seront régénérées lorsque vous mettrez à jour un noyau plus récent. Si vous envisagez de supprimer recovery mode options, ne le faites pas. Ils peuvent être utiles si vous cassez quelque chose qui vous empêche de démarrer.

Consultez cette .

    
réponse donnée evgeny 13.04.2017 - 14:14
la source
4

Ceci est une solution pure en ligne de commande.

Commencez par générer une liste de toutes les versions de noyau installées, à l'exception du noyau en cours d'exécution:

dpkg-query -W -f='${Package}\n' |
  grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
    grep -v $(uname -r | cut -d- -f1,2))

Vous pouvez également générer une liste de toutes les versions du noyau installées à l'exception des deux dernières:

dpkg-query -W -f='${Package}\n' |
  grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
    sort -V | head -n -2)

Examinez la liste. Assurez-vous que les versions du noyau que vous souhaitez conserver ne font pas partie de la liste. Utilisez la commande uname -r pour voir la version du noyau en cours d’exécution.

Si les résultats vous conviennent, vous pouvez utiliser apt-get pour supprimer les packages.

D'abord un essai à sec (en utilisant le premier générateur comme exemple):

sudo apt-get --dry-run purge $(
  dpkg-query -W -f='${Package}\n' |
    grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
      grep -v $(uname -r | cut -d- -f1,2)))

Ensuite, une vraie course:

sudo apt-get purge $(
  dpkg-query -W -f='${Package}\n' |
    grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
      grep -v $(uname -r | cut -d- -f1,2)))

Si vous souhaitez automatiser le processus, ajoutez le paramètre --yes :

sudo apt-get --yes purge $(
  ...)
    
réponse donnée lesmana 16.05.2015 - 18:18
la source
3

L'avantage de cette réponse est le fait que Ubuntu Bash est natif sans installation d'applications tierces. Les utilisateurs de noyaux personnalisés n'ayant pas utilisé apt ou dpkg peuvent modifier ce script bash en fonction de leurs besoins. Cette réponse est basée sur ( Comment purger de manière sélective tous les anciens noyaux à la fois ).

Solution basée sur Zenity

Zenity fournit au terminal une interface graphique conviviale permettant de traiter une liste et de sélectionner des éléments avec des boutons radio :

Commeletitrel'indique,lenoyauactuelaveclequelvousavezdémarrénepeutpasêtresuppriméetn'estpasinclusdanslaliste.Latailleindiquéecorrespondaumontantquiseraenregistrédanslerépertoire/boot.Plusestenregistrésurvotredisque,carlesfichiersbinairesdunoyaurésidentégalementdansd’autresdomaines.Remarquedu27juillet2017:lesrépertoires/usr/src/*kernel_version*et/lib/modules/*kernel_version*sontégalementinclus.

Ladatedemodificationestdécouverteàl'aidedelacommandestat.Surmonsystème,cettedateest"touchée" à chaque démarrage du noyau à l'aide de cette option ( Comment savoir quand une version du noyau spécifique a été initialisée? ) Cron script de redémarrage. Cependant, sur votre système, la date sera la date de publication du noyau, et non la dernière fois que vous l’avez initialisé.

apt-get purge vous donne une chance d'avorter

Vous avez enfin la possibilité de voir tout ce qui sera purgé et de voir l'espace disque total (quelque peu trompeur) qui sera récupéré:

The following packages will be REMOVED:
  linux-headers-4.7.1-040701* linux-headers-4.7.1-040701-generic*
  linux-headers-4.7.2-040702* linux-headers-4.7.2-040702-generic*
  linux-headers-4.7.3-040703* linux-headers-4.7.3-040703-generic*
  linux-headers-4.8.1-040801* linux-headers-4.8.1-040801-generic*
  linux-headers-4.8.10-040810* linux-headers-4.8.10-040810-generic*
  linux-headers-4.8.11-040811* linux-headers-4.8.11-040811-generic*
  linux-headers-4.8.4-040804* linux-headers-4.8.4-040804-generic*
  linux-headers-4.8.5-040805* linux-headers-4.8.5-040805-generic*
  linux-image-4.7.1-040701-generic* linux-image-4.7.2-040702-generic*
  linux-image-4.7.3-040703-generic* linux-image-4.8.1-040801-generic*
  linux-image-4.8.10-040810-generic* linux-image-4.8.11-040811-generic*
  linux-image-4.8.4-040804-generic* linux-image-4.8.5-040805-generic*
0 upgraded, 0 newly installed, 24 to remove and 2 not upgraded.
After this operation, 2,330 MB disk space will be freed.
Do you want to continue? [Y/n] 

Le code

Copiez ce code dans un fichier exécutable nommé rm-kernels dans /usr/local/bin :

#!/bin/bash

# NAME: rm-kernels
# PATH: /usr/local/bin
# DESC: Provide zenity item list of kernels to remove

# DATE: Mar 10, 2017. Modified Jul 28, 2017.

# NOTE: Will not delete current kernel.

#       With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
#       # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
#       First time for 'du' 34 seconds.
#       Second time for 'du' 1 second.

# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
#       By default 'du' is not used and estimated size is displayed.

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    zenity --error --text "root access required. Use: sudo rm-kernels"
    exit 99
fi

OLDIFS="$IFS"
IFS="|"
choices=()

current_version=$(uname -r)

for f in /boot/vmlinuz*
do
    if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
    [[ $f =~ vmlinuz-(.*) ]]
    v=${BASH_REMATCH[1]}        # example: 4.9.21-040921-generic
    v_main="${v%-*}"            # example: 4.9.21-040921

    # Kernel size in /boot/*4.9.21-040921-generic*
    s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')

    if [[ $# -ne 0 ]] ; then    # Was a parameter passed?
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             # Kernel headers size in /usr/src/*4.9.21-040921*
             s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
        else
             s2="0M"            # Linux Headers are not installed
        fi
        # Kernel image size in /lib/modules/4.9.21-040921-generic*
        s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
    else
        # Estimate sizof of optional headers at 125MB and size of image at 220MB
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             s2="125M"
        else
             s2="0M"            # Linux Headers are not installed
        fi
        s3="220M"
    fi

    # Strip out "M" provided by human readable option of du and add 3 sizes together
    s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
    t=$(( t + s ))
    s=$s" MB"
    d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
    choices=("${choices[@]}" false "$v" "$d" "$s")
done

# adjust width & height below for your screen 640x480 default for 1920x1080 HD screen
# also adjust font="14" below if blue text is too small or too large

choices=('zenity \
        --title "rm-kernels - Total: $t MB excluding: $current_version" \
        --list \
        --separator="$IFS" \
        --checklist --multiple \
        --text '<span foreground="blue" font="14">Check box next to kernel(s) to remove</span>' \
        --width=640 \
        --height=480 \
        --column "Select" \
        --column "Kernel Version Number" \
        --column "Modified Date" \
        --column " Size " \
        "${choices[@]}"')
IFS="$OLDIFS"

i=0
list=""
for choice in "${choices[@]}" ; do
    if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
    ((i++))

    short_choice=$(echo $choice | cut -f1-2 -d"-")
    header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)

    # If -lowlatency and -generic are purged at same time the _all header directory
    # remains on disk for specific version with no -generic or -lowlatency below.
    if [[ $header_count -lt 3 ]]; then
        # Remove all w.x.y-zzz headers
        list="$list""linux-image-$choice- linux-headers-$short_choice"
    else
        # Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
        list="$list""linux-image-$choice- linux-headers-$choice" 
    fi

done

if [ "$i" -gt 0 ] ; then
     apt-get purge $list
fi

REMARQUE: vous devez disposer de l'autorisation sudo pour créer le fichier. Veuillez utiliser:

gksu gedit /usr/local/bin/rm-kernels

Pour rendre le fichier exécutable, utilisez:

sudo chmod +x /usr/local/bin/rm-kernels

Version du serveur

rm-kernels-server est la version du serveur permettant de supprimer sélectivement tous les noyaux à la fois. Au lieu d’une boîte de dialogue graphique (graphique), une boîte de dialogue textuelle est utilisée pour sélectionner les noyaux à purger.

  • Avant d'exécuter le script, vous devez installer la fonction de dialogue à l'aide de:

    .

    sudo apt install dialog

La boîte de dialogue se trouve dans l'installation par défaut du bureau Ubuntu, mais pas dans Ubuntu Server.

Exemple d'écran

rm-kernels-servercodebash

#!/bin/bash # NAME: rm-kernels-server # PATH: /usr/local/bin # DESC: Provide dialog checklist of kernels to remove # Non-GUI, text based interface for server distro's. # DATE: Mar 10, 2017. Modified Jul 28, 2017. # NOTE: Will not delete current kernel. # With 10 kernels on an SSD, empty cache from sudo prompt (#) using: # # free && sync && echo 3 > /proc/sys/vm/drop_caches && free # First time for 'du' 34 seconds. # Second time for 'du' 1 second. # PARM: If any parm 1 passed use REAL kernel size, else use estimated size. # By default 'du' is not used and estimated size is displayed. # Must be running as sudo if [[ $(id -u) != 0 ]]; then echo "root access required. Use: sudo rm-kernels-server" exit 99 fi # Must have the dialog package. On Servers, not installed by default command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed. Aborting."; exit 99; } OLDIFS="$IFS" IFS="|" item_list=() # Deviate from rm-kernels here. current_version=$(uname -r) i=0 for f in /boot/vmlinuz* do if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version [[ $f =~ vmlinuz-(.*) ]] ((i++)) # Item List v=${BASH_REMATCH[1]} # example: 4.9.21-040921-generic v_main="${v%-*}" # example: 4.9.21-040921 # Kernel size in /boot/*4.9.21-040921-generic* s=$(du -ch /boot/*-$v* | awk '/total/{print $1}') if [[ $# -ne 0 ]] ; then # Was a parameter passed? if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then # Kernel headers size in /usr/src/*4.9.21-040921* s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}') else s2="0M" # Linux Headers are not installed fi # Kernel image size in /lib/modules/4.9.21-040921-generic* s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}') else # Estimate sizof of optional headers at 125MB and size of image at 220MB if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then s2="125M" else s2="0M" # Linux Headers are not installed fi s3="220M" fi # Strip out "M" provided by human readable option of du and add 3 sizes together s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} )) t=$(( t + s )) s=$s" MB" d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display item_list=("${item_list[@]}" "$i" "$v ! $d ! $s" off) done cmd=(dialog --backtitle "rm-kernels-server - Total: $t MB excluding: $current_version" \ --title "Use space bar to toggle kernel(s) to remove" \ --column-separator "!" \ --separate-output \ --ascii-lines \ --checklist " Kernel Version --------- Modified Date Size" 20 60 15) selections=$("${cmd[@]}" "${item_list[@]}" 2>&1 >/dev/tty) IFS=$OLDIFS if [ $? -ne 0 ] ; then echo cancel selected exit 1 fi i=0 choices=() for select in $selections ; do ((i++)) j=$(( 1 + ($select - 1) * 3 )) choices[i]=$(echo ${item_list[j]} | cut -f1 -d"!") done i=0 list="" for choice in "${choices[@]}" ; do if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop ((i++)) short_choice=$(echo $choice | cut -f1-2 -d"-") header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l) # If -lowlatency and -generic are purged at same time the _all header directory # remains on disk for specific version with no -generic or -lowlatency below. if [[ $header_count -lt 3 ]]; then # Remove all w.x.y-zzz headers list="$list""linux-image-$choice- linux-headers-$short_choice" else # Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency list="$list""linux-image-$choice- linux-headers-$choice" fi done if [ "$i" -gt 0 ] ; then apt-get purge $list fi

REMARQUE: dans l'appel à dialog , la directive --ascii-lines est transmise pour remplacer le jeu de caractères étendu de tracé (ce que ssh n'aime pas) par "+ --- - + "pour les boîtes à dessin. Si vous n'aimez pas cette apparence, vous pouvez utiliser la directive --no-lines sans aucune boîte.

Mises à jour du 28 juillet 2017

La taille calculée de chaque noyau a été prise à partir de /boot/*kernel_version* , soit 5 fichiers totalisant environ 50 Mo. La formule a été modifiée pour inclure les fichiers dans /usr/src/*kernel_version* et /lib/modules/*kernel_version* . La taille calculée pour chaque noyau est maintenant d’environ 400 Mo. Le code ci-dessus pour rm-kernels et rm-kernels-server a été mis à jour. Cependant, les exemples d'écrans ci-dessus ne reflètent pas encore ces modifications.

La valeur par défaut consiste à estimer la taille des fichiers pour les en-têtes linux à 125 Mo et celle à linux-image à 220 Mo car du peut être très lent à moins que les fichiers ne soient en cache. Pour obtenir la taille réelle en utilisant du , transmettez n’importe quel paramètre au script.

Le total de toutes les tailles de noyau (à l'exception de la version en cours d'exécution qui ne peut pas être supprimée) est maintenant affiché dans la barre de titre.

La boîte de dialogue utilisée pour afficher la date du dernier accès de chaque noyau. Cette date peut être écrasée en masse pour tous les noyaux lors d'une sauvegarde ou d'opérations similaires. La boîte de dialogue affiche désormais la date de modification .

    
réponse donnée WinEunuuchs2Unix 29.07.2017 - 00:35
la source
2

Un moyen simple de supprimer presque tous les paquets obsolètes, ceux qui ne figurent plus dans une liste de paquets, ainsi que les noyaux obsolètes, consiste à effectuer l'une des opérations suivantes:

dpkg --purge $(aptitude search ?obsolete)

Cependant, cela manquera les packages qui sont toujours recommandés par d'autres packages, et l'argument -R / - without-recommend ne résout pas ce problème.

dselect après le changement de mode de tri avec 'o' affichera tous les paquets obsolètes, y compris ceux qui manquent, mais certaines personnes n'aiment pas l'utiliser.

    
réponse donnée Chris Cheney 06.04.2013 - 05:03
la source
2

La réponse acceptée utilisant sed pour supprimer les anciens noyaux de façon permanente présente certaines failles. Si quelqu'un n'a pas redémarré l'ordinateur après la mise à niveau du noyau, la commande supprimera également le noyau le plus récent.

Voici une solution alternative qui prend en compte toutes les situations pour supprimer uniquement les noyaux plus anciens:

#!/bin/bash
kernels=( $(grep -Po "^linux-image-[^-]+-[^-]+-generic\b" < <(dpkg --get-selections)) )
cur_rel=$(grep -Po ".*(?=-[a-z]*$)" < <(uname -r))

for kernel in "${kernels[@]}"; do
    ker_rel=$(grep -Po "[0-9].*(?=-[a-z]*)" <<< "$kernel")
    dpkg --compare-versions "$ker_rel" gt "$cur_rel" && echo "Please Restart your computer first" && break
    dpkg --compare-versions "$ker_rel" lt "$cur_rel" && sudo apt-get remove "$kernel"
done

Si vous avez une version plus récente que la version actuelle, cela vous avertira de redémarrer votre ordinateur en premier. Notez également que les anciens noyaux sont préservés pour une bonne raison: si vous gâchez votre noyau actuel pour rendre votre système instable, vous devriez pouvoir démarrer sur n’importe quel noyau plus ancien.

    
réponse donnée heemayl 17.04.2015 - 21:21
la source
1

ailurus permet de supprimer les anciens noyaux ainsi que les configurations inutilisées. Personnellement, je le retire manuellement de synaptic. Vous pouvez installer ailurus à partir de getdeb et de ppa.

    
réponse donnée sagarchalise 17.09.2010 - 12:53
la source
1

Vous pouvez utiliser ukuu (tout est graphique) pour mettre à jour et supprimer les anciens noyaux. Ça marche pour moi!

N'oubliez pas de laisser les 2 derniers installés et évidemment le noyau "en cours d'exécution".

Vous pouvez également configurer ukuu pour n’afficher que les versions principales, même les noyaux RC, les versions masquées.

VouspouveztrouverukuudansSynaptic,oulesinstructionssontici:

OMG! Ubuntu ukuu instructions d'installation

    
réponse donnée sprocketoctopus 07.09.2017 - 12:39
la source
0

Voici un aperçu de ce que j'ai fait. Attention, je ne suis pas un expert en Linux. Assurez-vous de savoir ce que vous faites et de sauvegarder tous les fichiers que vous modifiez.

gedit /boot/grub/grub.cfg

puis trouvez les entrées que vous souhaitez conserver, nous les mettrons en surbrillance et les copions

cd /etc/grub.d
ls

vous verrez une liste de fichiers comme 10_linux et 30_os-prober

sudo chmod -x 10_linux

Ceci arrêtera automatiquement l’ajout de toutes les entrées linux dans le menu de démarrage de grub.

gksudo gedit 40_custom

ouvrez le fichier de menu de démarrage personnalisé, puis retournez dans le fichier grub.cfg (qui devrait rester ouvert dans gedit), puis copiez les entrées à conserver, telles que

.
menuentry "My Default Karmic" {
  set root=(hd0,1)
  search --no-floppy --fs-uuid --set cb201140-52f8-4449-9a95-749b27b58ce8
  linux /boot/vmlinuz-2.6.31-11-generic root=UUID=cb201140-52f8-4449-9a95-749b27b58ce8 ro quiet splash
  initrd /boot/initrd.img-2.6.31-11-generic
}

collez-les dans 40_custom , puis enregistrez-les.

sudo chmod 755 40_custom

le rend exécutable, puis finalement nous mettons à jour grub qui va changer le fichier grub.cfg:

sudo update-grub

Maintenant, ATTENTION, si vous mettez à jour votre noyau ou votre système d'exploitation, votre menu de démarrage ne sera probablement pas mis à jour ... vous devrez le faire manuellement. Mais cette procédure vous permettra de personnaliser un peu plus le menu de démarrage, comme supprimer la version du noyau et simplement mettre le nom Ubuntu ... c'est-à-dire Ubuntu Lucid 10.04, etc ...

J'espère que quelqu'un trouvera cela utile, car il m'a fallu un certain temps pour comprendre ... je n'ai vu cette solution nulle part ...

    
réponse donnée Joe 09.01.2012 - 00:31
la source
0

Installez le gestionnaire de paquets synaptic et allez dans l'onglet Filtres (je pense filtres, sinon essayez les 5) et sélectionnez "local". Cela vous montrera des paquets orphelins sur votre système, tels que les noyaux. Une fois que vous les avez désinstallés, exécutez update-grub . Cette commande met à jour la liste des options de démarrage pour grub.

Si cela échoue, vous pouvez toujours essayer apt-get remove linux-image-version-generic .

    
réponse donnée Relish 29.05.2013 - 18:41
la source
0

D'après une réponse précédente de David Kemp, le script suivant purgera tous les en-têtes et les images, à l'exception des dernières 2 versions.

#!/bin/sh
# This script assumes that the installed linux-image and linux-headers packages
# share the same versions (i.e. if a linux-image version number is installed,
# the corresponding linux-headers package will also be installed, and vice
# versa.)

SECONDTOLASTVER=$(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -r -n | sed '/^[^0-9]\+$/d' | sed 's/^.*-\([0-9\.]\+-[0-9]\+\).*//' | uniq | sed -n 2p)

# get a list of package names matching the argument passed to the function, and
# return only those package names which should be removed
get_pkgs_to_remove_matching () {
    if [ -n "$SECONDTOLASTVER" ]; then
        echo $(dpkg --list | grep $1 | awk '{ print $2 }' | sort | sed -n '/'"$SECONDTOLASTVER"'/q;p')
    fi
}

echo $(get_pkgs_to_remove_matching linux-image) $(get_pkgs_to_remove_matching linux-headers) | xargs sudo apt-get -y purge
    
réponse donnée Mark 12.06.2013 - 20:42
la source
0

La chaîne de commandes suivante purgera tous les noyaux Linux installés, à l'exception du noyau en cours d'exécution (grep -v uname -r ) et du dernier noyau disponible (dpkg -l | .... | tail -1):

dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | grep -v 'dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | tail -1' | grep -v 'uname -r' | xargs apt-get -y purge

J'utilise ceci pour garder les volumes de démarrage du bureau relativement propres, mais dans le cas d'un serveur, vous voudrez probablement développer la logique et écrire des scripts supplémentaires pour conserver une liste des derniers noyaux X démarrés par le serveur.

Quelque chose comme un script de démarrage qui fait:

uname -r >> /root/bootedkernels
cat /root/bootedkernels | sort -u | tail -3 > /root/bootedkernels # Keep the last 3 booted kernels

puis utilisez:

dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | grep -vf /root/bootedkernels | grep -v 'dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | tail -1' | grep -v 'uname -r' | xargs apt-get -y purge
    
réponse donnée Alexander Thompson 30.06.2013 - 20:37
la source
0

Pour avoir un peu plus de contrôle sur les versions à conserver, sélectionnez explicitement celles que vous souhaitez supprimer. Par exemple, si vous souhaitez supprimer les versions du noyau 3.2.0. [49-53], utilisez une simple boucle for :

for k in 49 51 52 53 ; do aptitude remove --purge linux-image-3.2.0-${k}-generic ; done

Ajustez la liste des versions du noyau pour qu'elle s'adapte.

    
réponse donnée NeilNjae 08.11.2013 - 13:51
la source
0

Essayez ceci. Exécutez-le en tant que root.

Enregistrez ce script sous le nom ./ keep-n-kernels.sh

.

Indiquez, en tant qu'argument de ligne de commande, le nombre de noyaux les plus récents que vous souhaitez conserver.

    
#!/bin/bash

# pass n as a command line argument, and it will find all the installed
# kernels and keep only the n most recent ones => uninstall all older ones

# dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d'
# this command gives the list of all packages EXCEPT for the latest kernel.
# source : https://help.ubuntu.com/community/Lubuntu/Documentation/RemoveOldKernels

n=$1

# find the installed kernel versions :
# dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sort -n
# gives version numbers, one in each line
# dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sed 's/\...$//g' | grep -v '\...$'| sort -u
# gives only the ones that appear in linux-image

# suffix, e.g. -generic-pae
# the kind of kernel you boot into
suffix=$(uname -r | sed 's:^[0-9]\.[0-9]\.[0-9]\-[0-9]\{2\}::g')

command="apt-get purge "

for version in $(dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sed 's/\...$//g' | grep -v '\...$'| sort -u | head -n -${n})
do
    command=${command}"^linux-image-${version}${suffix} "
done

$command

Exemple d'utilisation:

# ./keep-n-kernels.sh 4 # launch the apt-get command to remove all but the 4 most recent kernels

Si vous voulez [ET À VOS RISQUES], vous pouvez ajouter un -y (ou un indicateur de force) à la commande apt-get et la rendre non interactive.

    
réponse donnée Sankalp 28.01.2014 - 21:47
la source
0

J'utilise un bureau KDE, et l'option la plus simple que j'ai trouvée était d'utiliser l'application kde-config-grub2 comme suggéré ici: link (que j'avais déjà installé pour définir l'image d'arrière-plan, l'option de démarrage par défaut, etc.). En regard de la liste déroulante dans laquelle vous pouvez choisir l'entrée par défaut, vous trouverez un bouton "Supprimer les anciennes entrées". En cliquant sur ce bouton, vous obtenez une liste de tous les noyaux installés et vous pouvez sélectionner ceux à supprimer. Lorsque vous appliquez les modifications, dpkg sera utilisé pour les supprimer du système ainsi que du menu GRUB.

    
réponse donnée Ben 06.07.2014 - 19:44
la source
0

Juste pour vous faire entendre, vous pouvez aussi émettre

apt-get remove linux-{image,headers}-x.y.z-{1,2,...,n}

en tant que root, le travail sera terminé.

    
réponse donnée Severo Raz 27.11.2014 - 03:26
la source
0

J'ai un script pour cela qui n'a pas besoin d'analyse syntaxique très sophistiquée.

Supprimer les en-têtes et les images, à l'exception de l'image en cours, pour libérer de l'espace

sudo apt-get autoremove --purge 'linux-headers-[0-9].*' linux-headers-$(uname -r)+ linux-headers-$(uname -r | cut -d- -f1,2)+ 'linux-image-[0-9].*' linux-image-$(uname -r)+
    
réponse donnée Paulo Santos 16.05.2015 - 11:40
la source

Lire d'autres questions sur les étiquettes