In che modo 'apt' decide quanti vecchi kernel conservare?


23

Sto gestendo un paio di server per servizi core (NTP, DNS, ecc.) E mi è appena venuto in mente che uno dei server sembra mantenere gli ultimi 3 kernel, anziché 2 sugli altri:

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

Tutti i server sono gestiti in modo identico, non so cosa avrei potuto fare, deve essere un parametro da qualche parte ma non riesco a trovarlo!

Per favore, alimenta la mia curiosità! Grazie

Risposte:


32

Esiste un file generato automaticamente che dice apt-getquali kernel devono essere rimossi e quali conservare.
Il file che dice da apt-getquali kernel sono /etc/apt/apt.conf.d/01autoremove-kernelsgenerati /etc/kernel/postinst.d/apt-auto-removal.

Di solito succede che quando si ricevono aggiornamenti del kernel, quando la versione del kernel cambia, diciamo da 3.13a 3.16, /etc/apt/apt.conf.d/01autoremove-kernelsviene quindi aggiornato per mantenere i 3.16*kernel e viene quindi impostato per rimuovere tutti i 3.13kernel a meno che non sia specificato dallo script di generazione per non essere rimosso.

Dalla apt-auto-removalsceneggiatura:

# Autore: Steve Langasek 
#
# Contrassegna come non-autoremoval quei pacchetti del kernel che sono:
# - la versione attualmente avviata
# - la versione del kernel per cui siamo stati richiesti
# - l'ultima versione del kernel (determinata usando le regole copiate dal grub
# pacchetto per decidere quale kernel avviare)
# - la seconda versione del kernel più recente, se la versione del kernel avviata è
# già l'ultimo e questo script è chiamato per quella stessa versione,
# per garantire che un fallback rimanga disponibile nel caso in cui la nuova installazione
# kernel in questo ABI non si avvia
# Nel caso comune, ciò si traduce in esattamente due kernel salvati, ma può farlo
# comporta il salvataggio di tre kernel. È meglio sbagliare dalla parte di
# salvare troppi kernel piuttosto che salvarne troppo pochi.
#
# Generiamo questo elenco e lo salviamo in /etc/apt/apt.conf.d invece di contrassegnarlo
# pacchetti nel database perché eseguito da uno script postinst e apt
# sovrascriverà il db quando esce.

Tuttavia, questo a volte non li contrassegnerà per la rimozione automatica poiché parte della codifica è stata modificata rispetto alle versioni per evitare che ciò accada.

Se si desidera contrassegnare i kernel precedenti ad autoremoveeccezione dei kernel richiesti in base agli script, eseguire il comando seguente da una finestra del terminale:

sudo apt-mark auto ^linux-image-

Quindi, quando si esegue il apt-get autoremovecomando, è possibile rimuovere solo quelli vecchi e non più necessari. Ho messo degli esempi di seguito:

Questo primo mostra tutti i kernel sul sistema meno l'attuale kernel in esecuzione.

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-generic-3.16.0-34
linux-image-generic-3.16.0-36
linux-image-generic-3.16.0-37
linux-image-generic-4.0.0-040000
linux-image-extra-3.16.0-34-generic
linux-image-extra-3.16.0-36-generic
linux-image-extra-3.16.0-37-generic

Questo mostra l'attuale kernel in esecuzione.

terrance @ terrance-Linux: ~ $ uname -r
4.0.1-040001-generic
terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
[sudo] password per terrance: 
Lettura degli elenchi dei pacchetti ... Fine
Costruire l'albero delle dipendenze       
Lettura delle informazioni sullo stato ... Fatto
0 aggiornati, 0 appena installati, 0 da rimuovere e 0 non aggiornati.
terrance @ terrance-Linux: ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33-generic non può essere contrassegnato in quanto non è installato.
linux-image-extra-3.13.0-27-generic non può essere contrassegnato in quanto non è installato.
linux-image-3.13.0-44-lowlatency non può essere contrassegnato in quanto non è installato.
linux-image-3.13.0-27-generic non può essere contrassegnato in quanto non è installato.
linux-image-3.16.0-31-lowlatency non può essere contrassegnato in quanto non è installato.
linux-image-3.16.0-36-generic impostato su installato automaticamente.
linux-image-lowlatency-lts-utopic non può essere contrassegnato in quanto non è installato.
linux-image-extra-3.13.0-36-generic non può essere contrassegnato in quanto non è installato.
linux-image-3.13.0-36-generic non può essere contrassegnato in quanto non è installato.
linux-image-4.0.0-040000-generic impostato su installato automaticamente.
linux-image-extra-3.13.0-45-generic non può essere contrassegnato in quanto non è installato.
linux-image-3.16.0-25-generic non può essere contrassegnato in quanto non è installato.

NOTA: quello sopra era troppo lungo per essere elencato, quindi ho troncato un po '.

terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
Lettura degli elenchi dei pacchetti ... Fine
Costruire l'albero delle dipendenze       
Lettura delle informazioni sullo stato ... Fatto
I seguenti pacchetti saranno RIMOSSI:
  linux-image-3.16.0-34-generic linux-image-3.16.0-36-generic
  linux-image-4.0.0-040000-generico linux-image-extra-3.16.0-34-generico
  linux-image-extra-3.16.0-36-generic
0 aggiornati, 0 installati, 5 da rimuovere e 0 non aggiornati.
Dopo questa operazione, verranno liberati 613 MB di spazio su disco.
Vuoi continuare? [Y / n]

Quindi, dopo aver eseguito questi comandi, puoi vedere che ora posso rimuovere automaticamente tutto il kernel vecchio ma quello attuale (4.0.1-040001-generico) e il successivo più recente (3.16.0-37-generico).

Speriamo che questo aiuti.


Ubuntu non si rimuove automaticamente per impostazione predefinita? Abbiamo l'opzione, ma è stato (ancora) ritenuto impossibile decidere cosa sia un kernel "indesiderato" (su un altro sistema operativo "indesiderato" è uguale a "non utilizzato").
Rinzwind,

Ok. Ho letto male il tuo post su quel pezzo ;-)
Rinzwind

1
@Terrance Ho provato a passare sudo apt-mark auto ^linux-image-seguito da sudo apt-get autoremove --purgema inutilmente; tuttavia, un po ' dist-upgrademodificato 2 kernel (3.13.0-52 e 3.16.0.37) e il seguente si autoremovesono sbarazzati di 3.13.0-51 ...
ionreflex

1
@ionreflex Sono contento che l'abbia trovato. Non tutte le risposte sono perfette e potrebbero non funzionare per tutti. Ma trovo carino che le persone come te possano fare un po 'di risoluzione dei problemi e trovare un modo per rimuoverle. Sto pensando che dist-upgradetu abbia dato il via a quello /etc/kernel/postinst.d/apt-auto-removalche poi ha modificato il /etc/apt/apt.conf.d/01autoremove-kernelspoi dicendogli quali tenere.
Terrance

1
@Terrance Abbastanza sicuro di averlo fatto dist-upgradeprima, ma forse il fatto che i kernel siano stati aggiornati questa mattina ha fatto il trucco ... comunque, applausi e grazie per la tua risposta, ho imparato molto attraverso questo!
ionreflex,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.