Comment «apt» décide-t-il du nombre de vieux noyaux à conserver?


23

Je gère quelques serveurs pour les services de base (NTP, DNS, etc.) et je viens de penser qu'un des serveurs semble garder les 3 derniers noyaux, au lieu de 2 sur les autres:

nul@quark:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@quark:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-51-generic       3.13.0-51.84                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-51-generic 3.13.0-51.84                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

...

nul@dwarf:~$ sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
nul@dwarf:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     amd64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             amd64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     amd64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             amd64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     amd64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     amd64        Generic Linux kernel image

Tous les serveurs sont maintenus à l'identique, je ne sais pas ce que j'aurais pu faire, doit être un paramètre quelque part mais ne le trouve pas!

Veuillez nourrir ma curiosité! Merci

Réponses:


32

Un fichier généré automatiquement indique apt-getles noyaux à supprimer automatiquement et ceux à conserver.
Le fichier qui indique de apt-getquels noyaux il s'agit est à partir /etc/apt/apt.conf.d/01autoremove-kernelsduquel il est généré /etc/kernel/postinst.d/apt-auto-removal.

Habituellement, ce qui se passe, c'est que lorsque vous recevez des mises à jour du noyau, lorsque la version du noyau change, disons de 3.13à 3.16, /etc/apt/apt.conf.d/01autoremove-kernelsest ensuite mise à jour pour conserver les 3.16*noyaux et est ensuite définie pour supprimer tous les 3.13noyaux, sauf indication contraire du script de génération à ne pas supprimer.

Du apt-auto-removalscript:

# Auteur: Steve Langasek 
#
# Marquer comme non-pour-suppression automatique les paquets du noyau qui sont:
# - la version actuellement démarrée
# - la version du noyau pour laquelle nous avons été appelés
# - la dernière version du noyau (déterminée à l'aide de règles copiées depuis le grub
# package pour décider du noyau à démarrer)
# - la deuxième version la plus récente du noyau, si la version du noyau démarré est
# déjà la dernière et ce script est appelé pour cette même version,
# pour garantir la disponibilité d'un système de secours en cas de nouvelle installation
# le noyau à cet ABI ne démarre pas
# Dans le cas courant, cela entraîne exactement deux noyaux enregistrés, mais cela peut
# entraîne la sauvegarde de trois noyaux. Il vaut mieux se tromper du côté de
# sauver trop de noyaux que d'en sauver trop peu.
#
# Nous générons cette liste et l'enregistrons dans /etc/apt/apt.conf.d au lieu de marquer
# packages dans la base de données car cela s'exécute à partir d'un script postinst et apt
# écrasera la base de données à sa sortie.

Cependant, cela ne les marque parfois pas pour la suppression automatique car une partie du codage a changé au fil des versions pour éviter que cela ne se produise.

Si vous souhaitez marquer les noyaux précédents à l' autoremoveexception des noyaux requis en fonction des scripts, exécutez la commande suivante à partir d'une fenêtre de terminal:

sudo apt-mark auto ^linux-image-

Ensuite, lorsque vous exécutez la apt-get autoremovecommande, seuls ceux qui sont anciens et qui ne sont plus nécessaires peuvent être supprimés. J'ai mis des exemples ci-dessous:

Ce premier montre tous les noyaux du système moins le noyau en cours d'exécution.

root @ terrance-Linux: / home / share # dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "$ (uname -r | sed" s /\(.*\)-\([^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d '
linux-headers-3.16.0-34
linux-headers-3.16.0-34-generic
linux-headers-3.16.0-36
linux-headers-3.16.0-36-generic
linux-headers-3.16.0-37
linux-headers-3.16.0-37-generic
linux-headers-4.0.0-040000
linux-headers-4.0.0-040000-generic
linux-image-3.16.0-34-generic
linux-image-3.16.0-36-generic
linux-image-3.16.0-37-generic
linux-image-4.0.0-040000-generic
linux-image-extra-3.16.0-34-generic
linux-image-extra-3.16.0-36-generic
linux-image-extra-3.16.0-37-generic

Celui-ci montre le noyau en cours d'exécution.

terrance @ terrance-Linux: ~ $ uname -r
4.0.1-040001-générique
terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
[sudo] mot de passe pour terrance: 
Lecture des listes de packages ... Terminé
Construction d'un arbre de dépendance       
Lecture des informations d'état ... Terminé
0 mis à niveau, 0 nouvellement installé, 0 à supprimer et 0 non mis à niveau.
terrance @ terrance-Linux: ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33-generic ne peut pas être marqué car il n'est pas installé.
linux-image-extra-3.13.0-27-generic ne peut pas être marqué car il n'est pas installé.
linux-image-3.13.0-44-lowlatency ne peut pas être marqué car il n'est pas installé.
linux-image-3.13.0-27-generic ne peut pas être marqué car il n'est pas installé.
linux-image-3.16.0-31-lowlatency ne peut pas être marqué car il n'est pas installé.
linux-image-3.16.0-36-generic défini sur installé automatiquement.
linux-image-lowlatency-lts-utopic ne peut pas être marqué car il n'est pas installé.
linux-image-extra-3.13.0-36-generic ne peut pas être marqué car il n'est pas installé.
linux-image-3.13.0-36-generic ne peut pas être marqué car il n'est pas installé.
linux-image-4.0.0-040000-generic défini sur installé automatiquement.
linux-image-extra-3.13.0-45-generic ne peut pas être marqué car il n'est pas installé.
linux-image-3.16.0-25-generic ne peut pas être marqué car il n'est pas installé.

REMARQUE: celle ci-dessus était trop longue pour être répertoriée, j'ai donc tronqué un peu.

terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
Lecture des listes de packages ... Terminé
Construction d'un arbre de dépendance       
Lecture des informations d'état ... Terminé
Les packages suivants seront SUPPRIMÉS:
  linux-image-3.16.0-34-générique linux-image-3.16.0-36-générique
  linux-image-4.0.0-040000-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic
0 mis à niveau, 0 nouvellement installé, 5 à supprimer et 0 non mis à niveau.
Après cette opération, 613 Mo d'espace disque seront libérés.
Voulez-vous continuer? [O / n]

Ainsi, après avoir exécuté ces commandes, vous pouvez voir que je peux maintenant supprimer automatiquement tous les anciens mais le noyau actuel (4.0.1-040001-générique) et le suivant le plus récent (3.16.0-37-générique).

J'espère que cela aide.


Ubuntu ne fait pas de suppression automatique par défaut, n'est-ce pas?. Nous avons l'option mais il a été (encore) jugé impossible de décider ce qu'est un noyau "indésirable" (sur un autre système d'exploitation "indésirable" est égal à "inutilisé").
Rinzwind

D'accord. J'ai mal lu votre article à ce sujet ;-)
Rinzwind

1
@Terrance J'ai essayé de passer sudo apt-mark auto ^linux-image-suivi sudo apt-get autoremove --purgemais en vain; cependant, un peu dist-upgrademodifié 2 noyaux (3.13.0-52 et 3.16.0.37) et les suivants se autoremovesont débarrassés de 3.13.0-51 ...
ionreflex

1
@ionreflex Heureux que vous l'ayez trouvé. Toutes les réponses ne sont pas parfaites, et cela peut ne pas fonctionner pour tout le monde. Mais je trouve agréable que des gens comme vous puissent faire un petit dépannage et trouver un moyen de les supprimer. Je pense que dist-upgradevous avez couru le coup d'envoi /etc/kernel/postinst.d/apt-auto-removalqui a ensuite modifié le /etc/apt/apt.conf.d/01autoremove-kernelspuis lui dire lesquels garder.
Terrance

1
@Terrance Je suis sûr que j'ai fait un dist-upgradeavant, mais peut-être que le fait que les noyaux aient été mis à niveau ce matin a fait l'affaire ... de toute façon, bravo et merci pour votre réponse, j'ai beaucoup appris grâce à cela!
ionreflex
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.