Як "apt" вирішує, скільки старих ядер зберегти?


23

Я керую парою серверів для основних сервісів (NTP, DNS тощо), і мені здалося, що один із серверів, здається, зберігає три останні ядра, а не 2 на інших:

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

Усі сервери підтримуються однаково, не знаю, що я міг би зробити, має бути десь параметр, але не можу його знайти!

Будь ласка, нагодуй мою цікавість! Дякую

Відповіді:


32

Існує файл, який автоматично генерується, який повідомляє, apt-getякі ядра авторемонтувати, а які зберегти.
Файл, який повідомляє, з apt-getяких ядер вони є, /etc/apt/apt.conf.d/01autoremove-kernelsякий генерується з /etc/kernel/postinst.d/apt-auto-removal.

Зазвичай відбувається те, що коли ви отримуєте оновлення ядра, коли зміна версії ядра, скажімо, 3.13на 3.16, /etc/apt/apt.conf.d/01autoremove-kernelsпотім оновляється для збереження 3.16*ядер, а потім встановлюється для видалення всіх 3.13ядер, якщо не вказано генеруючим сценарієм, який не потрібно видаляти.

Зі apt-auto-removalсценарію:

# Автор: Стів Лангасек 
#
# Позначте такі, що не є авторизованими, тими пакетами ядра, які є:
# - поточно завантажена версія
# - версія ядра, до якого ми закликали
# - остання версія ядра (визначається за допомогою правил, скопійованих з grub
# пакет для вирішення, яке ядро ​​для завантаження)
# - друга остання версія ядра, якщо завантажена версія ядра є
# вже остання, і цей сценарій закликається для тієї самої версії,
# для забезпечення резервного зберігання даних, якщо новоспечений встановлений
# ядро ​​в цьому ABI не вдалося завантажити
# У звичайному випадку це призводить до збереження рівно двох ядер, але це може
# в результаті збереження трьох ядер. Краще помилитися на стороні
# збереження занадто багато ядер, ніж збереження занадто мало.
#
# Ми генеруємо цей список і зберігаємо його в /etc/apt/apt.conf.d замість маркування
# пакети в базі даних, оскільки це працює з поштового сценарію, і apt
# замінить db, коли він закінчується.

Однак це іноді не позначає їх для автоматичного видалення, оскільки частина кодування змінилася у версіях, щоб не допустити цього.

Якщо ви хочете позначити попередні ядра за autoremoveвинятком необхідних ядер на основі скриптів, запустіть наступну команду з вікна терміналу:

sudo apt-mark auto ^linux-image-

Потім, коли ви запускаєте apt-get autoremoveкоманду, можна видалити лише ті, які вже не потрібні. Я прикладу нижче приклади:

Цей перший показує всі ядра в системі за вирахуванням поточного ядра, що працює.

root @ terrance-Linux: / home / share # dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "$ (uname -r | sed" s /\(.*\)-\(pted^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d '
linux-заголовки-3.16.0-34
linux-заголовки-3.16.0-34-generic
linux-заголовки-3.16.0-36
linux-заголовки-3.16.0-36-generic
linux-заголовки-3.16.0-37
linux-headers-3.16.0-37-generic
linux-заголовки-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

Це показує поточне запущене ядро.

terrance @ terrance-Linux: ~ $ uname -r
4.0.1-040001-родовий
terrance @ terrance-Linux: ~ $ sudo apt - отримати авторемонт
[sudo] пароль для terrance: 
Читання списків пакунків ... Готово
Побудова дерева залежності       
Читання інформації про стан ... Готово
0 оновлено, 0 знову встановлено, 0 видалити та 0 не оновлено.
terrance @ terrance-Linux: ~ $ sudo apt-mark auto ^ linux-image-
linux-image-extra-3.16.0-33-generic не можна позначати, оскільки він не встановлений.
linux-image-extra-3.13.0-27-generic не можна позначати, оскільки він не встановлений.
linux-image-3.13.0-44-lowlatency не можна позначати, оскільки він не встановлений.
linux-image-3.13.0-27-generic не можна позначати, оскільки він не встановлений.
linux-image-3.16.0-31-lowlatency не можна позначати, оскільки він не встановлений.
linux-image-3.16.0-36-загальний набір для автоматичного встановлення.
linux-image-lowlatency-lts-utopic не можна позначати, оскільки він не встановлений.
linux-image-extra-3.13.0-36-generic не можна позначати, оскільки він не встановлений.
linux-image-3.13.0-36-generic не можна позначати, оскільки він не встановлений.
linux-image-4.0.0-040000 - загальний набір для автоматичного встановлення.
linux-image-extra-3.13.0-45-generic не можна позначати, оскільки він не встановлений.
linux-image-3.16.0-25-generic не можна позначати, оскільки він не встановлений.

ПРИМІТКА . Наведене вище було занадто довгим, щоб перелічити, тому я трохи укоротив.

terrance @ terrance-Linux: ~ $ sudo apt - отримати авторемонт
Читання списків пакунків ... Готово
Побудова дерева залежності       
Читання інформації про стан ... Готово
Наступні пакети будуть видалені:
  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 оновлених, 0 нещодавно встановлених, 5 для видалення та 0 не оновлених.
Після цієї операції 613 Мб дискового простору буде звільнено.
Ви хочете продовжити? [Y / n]

Отже, після запуску цих команд ви бачите, що тепер я можу автоматично видалити все старе, але поточне ядро ​​(4.0.1-040001-generic) та наступне нове (3.16.0-37-generic).

Сподіваємось, це допомагає.


Ubuntu не робить автоматичне видалення за замовчуванням? У нас є варіант, але визначити, що таке "небажане" ядро ​​(у інших операційних системах "небажане" дорівнює "невикористаному"), вважати неможливо.
Rinzwind

Добре. Я неправильно
прочитав

1
@Terrance я намагався пройти sudo apt-mark auto ^linux-image-за ним, sudo apt-get autoremove --purgeале безрезультатно; однак трохи dist-upgradeзмінені 2 ядра (3.13.0-52 та 3.16.0.37) та наступне autoremoveпозбулися 3.13.0-51 ...
ionreflex

1
@ionreflex Радий, що ви це виявили. Не кожна відповідь є ідеальною, і може не працювати всім. Але мені здається, що такі люди, як ти, можуть трохи вирішити проблеми та знайти спосіб їх усунення. Я думаю, що dist-upgradeти втік, що вимкнув те, /etc/kernel/postinst.d/apt-auto-removalщо змінило /etc/apt/apt.conf.d/01autoremove-kernelsтоді, сказавши, які з них зберегти.
Терранс

1
@Terrance Досить впевнений, що я робив dist-upgradeраніше, але, можливо, той факт, що ядра були оновлені сьогодні вранці, зробив трюк ... все одно, привіт, і дякую за вашу відповідь, я багато чого навчився за це!
ionreflex
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.