Как "apt" решает, сколько старых ядер оставить?

Я управляю парой серверов для основных служб (NTP, DNS и т. Д.), И мне просто пришло в голову, что один из серверов, похоже, содержит 3 последних ядра вместо 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

Все серверы обслуживаются одинаково, не знаю, что я мог бы сделать, должен быть где-то параметром, но не могу его найти!

Пожалуйста, кормите мое любопытство! Спасибо

1 ответ

Решение

Существует файл, который автоматически генерируется, который говорит 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 вместо маркировки
# пакетов в базе данных, потому что это запускается из сценария postinst и apt
# перезапишет БД при выходе.

Однако это иногда не помечает их для автоматического удаления, поскольку некоторые версии кодирования были изменены по сравнению с версиями, чтобы этого не происходило.

Если вы хотите пометить предыдущие ядра для 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 /\(.*\)-\([^ 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- универсальный linux-image-4.0.0-040000-универсальный linux-image-extra-3.16.0-34-универсальный linux-image-extra-3.16.0-36-generic
linux-image-extra-3.16.0-37- общий

Это показывает текущее работающее ядро.

terrance @ terrance-Linux: ~ $ uname -r
4.0.1-040001-родовое
terrance@terrance-Linux:~$ sudo apt-get autoremove
[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-generic установлен на автоматически установленный.
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-generic устанавливается на автоматически установленный.
linux-image-extra-3.13.0-45-generic нельзя пометить, так как он не установлен.
linux-image-3.16.0-25-generic нельзя пометить, так как он не установлен.

ПРИМЕЧАНИЕ . Вышеприведенный список был слишком длинным, поэтому я немного обрезал его.

terrance @ terrance-Linux: ~ $ sudo apt-get autoremove
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Следующие пакеты будут удалены:
  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-образ-экстра-3.16.0-36-родовое
0 обновлено, 0 вновь установлено, 5 для удаления и 0 не обновлено.
После этой операции освободится 613 МБ дискового пространства.
Вы хотите продолжить? [Y/ N] 

Итак, после выполнения этих команд вы можете видеть, что теперь я могу автоматически удалить все старое, кроме текущего ядра (4.0.1-040001-generic) и следующее новейшее (3.16.0-37-generic).

Надеюсь, это поможет.

Другие вопросы по тегам