Как "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).
Надеюсь, это поможет.