web-dev-qa-db-fra.com

Comment enlever les vieux noyaux du terminal

J'ai traversé diverses questions sur la façon de nettoyer les anciens noyaux Linux. Ils semblent tous avoir des réponses différentes et sont vieux, alors quelqu'un est obligé de dire que la question est trop ancienne et de commencer un nouveau post, alors la voici:

Je veux faire tout ce qui suit:

  1. Supprimez manuellement les anciens noyaux Linux dans le terminal.
  2. Supprimer tous les fichiers de configuration
  3. Supprimer tous les fichiers d'en-tête
  4. Supprimer les inodes inutiles?
  5. Expliquez pourquoi dpkg -l | grep linux-image ne renvoie pas les mêmes résultats que ce que je vois dans ma liste grub2 lors du démarrage
  6. Expliquez rc vs ii dans dpkg -l | liste grep linux-image
  7. Expliquez la différence entre les entrées du répertoire/usr/src (ou l'emplacement de ces fichiers dans d'autres versions d'Ubuntu) et les deux méthodes ci-dessus pour déterminer les versions de noyau en surplus.
  8. Quelles sont les conséquences d'un nettoyage complet des noyaux plus anciens? Dois-je m'inquiéter des dépendances? Comment savoir si des applications sur mon ordinateur dépendent des fichiers de configuration de noyaux plus anciens.

Ce que je ne veux pas:

  • Des liens vers d'autres réponses que vous n'avez pas personnellement testées ou que vous ne résolvez pas TOUS les problèmes liés à un nettoyage complet.
  • Toute réponse que vous n'avez pas personnellement testée.
  • Les scripts qui tentent de tout nettoyer automatiquement à la fois. Je veux juste le faire manuellement jusqu'à ce que je comprenne bien tout ce qui se passe.

Trouvons une solution complète au problème de la compilation du noyau. Je joue actuellement avec une version plus ancienne d'Ubuntu (10.04) avant de procéder à la mise à niveau, mais j'ai eu le même problème avec Ubuntu 12.04. Si la solution est différente pour différentes versions, veuillez indiquer la version que vous avez utilisée pour tester votre solution.

Ce qui fonctionne:

uname -r

Cela retourne correctement la version du noyau que j'utilise actuellement.

Ce qui ne marche pas:

Sudo apt-get autoremove
Sudo apt-get clean
Sudo apt-get autoremove linux-image-x.x.xx-xx-generic

Ce que je pensais devrait fonctionner, mais ne l’a pas fait:

Sudo apt-get purge linux-image-x.x.xx-xx-generic

Cela a permis de réduire la liste générée par dpkg -l | grep linux-image:

Sudo dpkg --purge linux-image-x.x.xx-xx-generic

Voici également une longueur d’avance sur le problème rc/ii:

ii signifie "Il devrait être installé et il est installé" alors que rc signifie "Il a été supprimé/désinstallé mais ses fichiers de configuration sont toujours présents".

Je pense que cela résout le problème entre l’écart entre la liste des terminaux et le menu grub2 au démarrage. Si je me souviens bien, les listes ii correspondent à celles de grub2. La question ici est de savoir comment les entrées ii y sont arrivées en premier lieu?

7
JamesH

L’accumulation de vieux noyaux jusqu’à ce que/boot soit plein, brisant ainsi apt, est un bogue: LP # 135709 , avec un correctif implémenté dans toutes les versions d’Ubuntu 16.04 et versions ultérieures.

La plupart des utilisateurs qui remarquent ce problème ont installé le 'chiffrement intégral du disque', qui crée une minuscule partition/boot non chiffrée. Comme elle est minuscule, la partition se remplit rapidement et ces utilisateurs remarquent le problème beaucoup plus tôt que d’autres.

Lorsqu'un nouveau noyau est installé, le script /etc/kernel/postinst.d/apt-auto-removal marque les anciens noyaux comme éligibles pour autoremoval ... mais ne s'exécute pas. autoremove. L’absence de suppression automatique visait à l’origine à permettre à un utilisateur de consulter la liste des paquets supprimés.

Le correctif à LP # 135709 fonctionne pour la plupart des utilisateurs - s'il ne fonctionne pas pour vous, une autre cause sous-jacente empêche les anciens paquets du noyau d'être marqués par apt comme pouvant être supprimés automatiquement. Recherchez une aide personnalisée dans les canaux de support Ubuntu.

Dans les anciennes versions d'Ubuntu, vous devez corriger les anciens noyaux de mauvaises herbes pour préserver l'espace manuellement. La façon dont vous le corrigez manuellement dépend de si votre/boot est plein ou non. La plupart des utilisateurs ne remarquent pas le problème tant que/boot n'est pas complet et obtiennent des erreurs apt et dpkg no-space-left-on-device.

Si/boot n'est pas complet , et apt fonctionne correctement, une simple

Sudo apt-get autoremove      ## Ubuntu 14.04 and older
Sudo apt autoremove          ## Ubuntu 16.04 and newer

devrait supprimer tous les paquets du noyau éligibles pour le retrait automatique.

Si/boot est plein et que les actions d'apt échouent avec l'erreur dpkg 'il ne reste plus d'espace sur le périphérique', il est trop tard pour utiliser le suppression automatique.

Il est trop tard, car Aptdaemon met en file d'attente les actions du package. Le retrait automatique se trouve à l'arrière de la file d'attente et apt abandonne la totalité de la file d'attente restante en cas d'échec d'une action ... y compris d'un manque d'espace. (C'est sans doute un bug dans apt/aptdaemon)

La meilleure pratique consiste à utiliser 'uname' et 'dpkg' pour supprimer un ou deux anciens noyaux, en libérant de l'espace pour permettre à apt de mener à bien ses actions en file d'attente. Ensuite, autoremove fonctionnera.

Exemple:

$ uname -r
3.16.0-36-generic    ## This is kernel you MUST NOT remove.

$ dpkg -l | grep linux-image
rc  linux-image-3.16.0-23-generic    ## 'rc' means already removed
rc  linux-image-3.16.0-28-generic    ## 'rc' can be safely ignored
rc  linux-image-3.16.0-29-generic
ii  linux-image-3.16.0-30-generic    ## 'ii' means installed. Removable
ii  linux-image-3.16.0-31-generic    ## Removable
ii  linux-image-3.16.0-33-generic    ## Removable
ii  linux-image-3.16.0-34-generic    ## Backup working kernel. Don't remove
ii  linux-image-3.16.0-36-generic    ## Current kernel. DO NOT REMOVE

## Use dpkg to remove one older kernel, freeing enough space for apt to work
$ Sudo dpkg --remove linux-image-3.16.0-30-generic
$ Sudo apt-get autoremove     ## Ubuntu 14.04 and older
$ Sudo apt autoremove         ## Ubuntu 16.04 and newer

Si vous avez longtemps ignoré le problème , il existe des effets de second ordre, tels que linux-image-generic pointant sur la mauvaise version du noyau. , et les erreurs de dépendance apt. Il n'y a pas un moyen unique de régler tous ces problèmes en même temps.

Généralement, le moyen le plus simple de nettoyer la plupart de ces problèmes consiste à nettoyer les anciens paquets de votre cache de paquets local, à mettre à jour votre base de paquets et à réinstaller les paquets défectueux à partir des référentiels Ubuntu (au lieu de votre cache local).

$ Sudo apt-get update       ## Refresh the package database (14.04 and older)
$ Sudo apt update           ##                              (16.04 and newer)

$ Sudo apt-get autoclean    ## Delete the obsolete packages from your local cache (14.04 and older)
$ Sudo apt autoclean        ##                                                    (16.04 and newer)

$ Sudo apt-get install --reinstall <packagename>     ## Reinstall the offending package with the latest version in the Ubuntu repositories (14.04 and older)
$ Sudo apt install --reinstall <packagename>         ##                (16.04 and newer)

Si vous rencontrez toujours des erreurs apt et/ou dpkg, demandez une aide personnalisée dans les canaux de support Ubuntu.

7
user535733

Vous pouvez essayer ces commandes pour supprimer les anciens fichiers de configuration et les anciens noyaux:

exec Sudo -i

CONFOLD=$(dpkg -l | grep '^rc' | awk '{print $2}')

KERNELCUR=$(uname -r | sed 's/-*[a-z]//g' | sed 's/-386//g')

PKGLINUX="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAPKGLINUX="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

KERNELSOLD=$(dpkg -l | awk '{print $2}' | grep -E "$PKGLINUX" | grep -vE "$METAPKGLINUX" | grep -v "$KERNELCUR")

apt-get purge "$CONFOLD"

apt-get purge "$KERNELSOLD"

update-grub
1
kyodake

Vous pouvez exécuter la commande ci-dessous pour trouver la liste des noyaux installés.

noyau rpm -q

Après avoir trouvé la liste des noyaux, exécutez la commande ci-dessous pour supprimer les noyaux.

Sudo apt-get remove linux-image-x.x.x.x-generic

0
vembutech