Jak „apt” decyduje o tym, ile starych jąder zachować?

23

Zarządzam kilkoma serwerami dla podstawowych usług (NTP, DNS itp.) I właśnie przyszło mi do głowy, że jeden z serwerów wydaje 3 ostatnie jądra, zamiast 2 na pozostałych:

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

Wszystkie serwery są utrzymywane identycznie, nie wiem, co mogłem zrobić, musi być gdzieś parametrem, ale nie mogę go znaleźć!

Zaspokój moją ciekawość! Dziękuję Ci

ionreflex
źródło

Odpowiedzi:

32

Istnieje plik, który jest automatycznie generowany, który informuje, apt-getktóre jądra autorove i które należy zachować.
Plik, który informuje, apt-getktóre jądra są, /etc/apt/apt.conf.d/01autoremove-kernelsjest generowany /etc/kernel/postinst.d/apt-auto-removal.

Zwykle dzieje się tak, że gdy otrzymujesz aktualizacje jądra, kiedy zmienia się wersja jądra, powiedzmy od 3.13do 3.16, /etc/apt/apt.conf.d/01autoremove-kernelsjest następnie aktualizowana, aby zachować 3.16*jądra, a następnie jest ustawiona na usunięcie wszystkich 3.13jąder, chyba że skrypt generujący określi, że ma zostać usunięty.

Ze apt-auto-removalskryptu:

# Autor: Steve Langasek 
#
# Oznacz jako not-for-autoroval te pakiety jądra, które są:
# - aktualnie uruchomiona wersja
# - wersja jądra, do której zostaliśmy wezwani
# - najnowsza wersja jądra (określona za pomocą reguł skopiowanych z grub
# pakiet do decydowania, które jądro ma zostać uruchomione)
# - druga najnowsza wersja jądra, jeśli uruchomiona jest wersja jądra
# jest już najnowszy i ten skrypt jest wywoływany dla tej samej wersji,
#, aby zapewnić dostępność rezerwy w przypadku nowo zainstalowanego oprogramowania
# jądro w tym ABI nie uruchamia się
# W zwykłym przypadku powoduje to zapisanie dokładnie dwóch jąder, ale może
# powoduje zapisanie trzech jąder. Lepiej jest pomylić się po stronie
# zapisywanie zbyt wielu jąder niż oszczędzanie za mało.
#
# Generujemy tę listę i zapisujemy ją w /etc/apt/apt.conf.d zamiast oznaczania
# pakietów w bazie danych, ponieważ jest to uruchamiane ze skryptu postinst i apt
# zastąpi db po wyjściu.

Jednak czasem nie oznacza to ich automatycznego usuwania, ponieważ niektóre kodowania zmieniły się w różnych wersjach, aby temu zapobiec.

Jeśli chcesz zaznaczyć poprzednie jądra, z autoremovewyjątkiem wymaganych jąder opartych na skryptach, uruchom następującą komendę w oknie terminala:

sudo apt-mark auto ^linux-image-

Następnie po uruchomieniu apt-get autoremovepolecenia można usunąć tylko te, które są już stare i nie są już potrzebne. Poniżej podaję przykłady:

Ten pierwszy pokazuje wszystkie jądra w systemie minus aktualnie działające jądro.

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

Ten pokazuje aktualnie działające jądro.

terrance @ terrance-Linux: ~ $ uname -r
4.0.1-040001-ogólny
terrance @ terrance-Linux: ~ $ sudo apt-get autorove
[sudo] hasło do terrance: 
Czytanie list pakietów ... Gotowe
Budowanie drzewa zależności       
Odczytywanie informacji o stanie ... Gotowe
0 zaktualizowanych, 0 nowo zainstalowanych, 0 do usunięcia i 0 niezaktualizowanych.
terrance @ terrance-Linux: ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33-generic nie może zostać oznaczony, ponieważ nie jest zainstalowany.
linux-image-extra-3.13.0-27-generic nie może zostać oznaczony, ponieważ nie jest zainstalowany.
linux-image-3.13.0-44-lowlatency nie może być oznaczony, ponieważ nie jest zainstalowany.
linux-image-3.13.0-27-generic nie może zostać oznaczony, ponieważ nie jest zainstalowany.
linux-image-3.16.0-31-lowlatency nie może być oznaczony, ponieważ nie jest zainstalowany.
linux-image-3.16.0-36-ogólny zestaw instalowany automatycznie.
linux-image-lowlatency-lts-utopic nie może zostać oznaczony, ponieważ nie jest zainstalowany.
linux-image-extra-3.13.0-36-generic nie może zostać oznaczony, ponieważ nie jest zainstalowany.
linux-image-3.13.0-36-generic nie może zostać oznaczony, ponieważ nie jest zainstalowany.
linux-image-4.0.0-040000-ogólny zestaw instalowany automatycznie.
Linux-image-extra-3.13.0-45-generic nie może zostać oznaczony, ponieważ nie jest zainstalowany.
linux-image-3.16.0-25-generic nie może zostać oznaczony, ponieważ nie jest zainstalowany.

UWAGA: powyższa była zbyt długa, aby ją wymienić, więc trochę ją obciąłem.

terrance @ terrance-Linux: ~ $ sudo apt-get autorove
Czytanie list pakietów ... Gotowe
Budowanie drzewa zależności       
Odczytywanie informacji o stanie ... Gotowe
Następujące pakiety zostaną USUNIĘTE:
  linux-image-3.16.0-34-generic linux-image-3.16.0-36-generic
  linux-image-4.0.0-040000-generic linux-image-extra-3.16.0-34-generic
  linux-image-extra-3.16.0-36-generic
0 zaktualizowanych, 0 nowo zainstalowanych, 5 do usunięcia i 0 niezaktualizowanych.
Po tej operacji zwolnione zostanie 613 MB miejsca na dysku.
Czy chcesz kontynuować? [T / n]

Po uruchomieniu tych poleceń widać, że mogę teraz automatycznie usunąć wszystkie stare, ale bieżące jądro (4.0.1-040001-ogólne) i następne najnowsze (3.16.0-37-ogólne).

Mam nadzieję, że to pomaga.

Terrance
źródło
Ubuntu domyślnie nie wykonuje automatycznego usuwania? Mamy taką opcję, ale uznano (nadal) za niemożliwe określenie, czym jest „niechciane” jądro (w innym systemie operacyjnym „niechciane” oznacza „nieużywane”).
Rinzwind
Dobrze.
Źle
1
@Terrance Próbowałem przejść sudo apt-mark auto ^linux-image-obok, sudo apt-get autoremove --purgeale bezskutecznie; jednak trochę dist-upgradezmodyfikowane 2 jądra (3.13.0-52 i 3.16.0.37) i kolejne autoremovepozbyły się 3.13.0-51 ...
ionreflex
1
@ionreflex Cieszę się, że to znalazłeś. Nie każda odpowiedź jest idealna i może nie działać dla wszystkich. Ale miło jest, że ludzie tacy jak ty mogą rozwiązać problem i znaleźć sposób na ich usunięcie. Myślę, że dist-upgradewybiegłeś, /etc/kernel/postinst.d/apt-auto-removala następnie zmodyfikowałeś, a /etc/apt/apt.conf.d/01autoremove-kernelsnastępnie powiedziałeś, które należy zachować.
Terrance
1
@Terrance Jestem pewien, że zrobiłem to dist-upgradewcześniej, ale być może fakt, że jądra zostały zaktualizowane dziś rano, załatwił sprawę ... w każdym razie, na zdrowie i dziękuję za odpowiedź, wiele się nauczyłem!
ionreflex