Почему Ubuntu не использует ядра, установленные автоматическим обновлением?

Я использовал сценарий, описанный в этом вопросе, чтобы перечислить ядро, установленное на компьютере:

Как удалить старые версии ядра, чтобы очистить меню загрузки?

[ 115] В 3.2.0 у меня есть 33, 34, 35, 36, 37, 38, 39, 41, 43, 44, 45 и 48. Я ожидаю запустить 3.2.0-48 после перезагрузки, но Я все еще работаю 3.2.0-32. Почему ядра, установленные с помощью автоматического обновления, не используются (и не предлагаются в menu.lst)?

[Я использую 12.04 LTS]

grep title /boot/grub/menu.lst result в:

title       Ubuntu 12.04.1 LTS, kernel 3.2.0-32-generic
title       Ubuntu 12.04.1 LTS, kernel 3.2.0-32-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-45-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-45-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-44-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-44-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-43-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-43-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, memtest86+

Я ожидал, что ядро ​​между 3.2.0-33 и 3.2.0-48 будет в этом файле и по умолчанию будет самое последнее. Почему ядро ​​с 3.2.0-33 по 48 не добавлено в этот файл?


Когда я запустил sudo dpkg-reconfigure linux-image-3.2.0-48-generic, он обнаружил все остальные ядра и перегенерировал menu.lst, но в нем содержится только те же 9 записей.

5
задан 13 April 2017 в 15:23

1 ответ

Вы задаете два вопроса: почему это произошло и как я могу это исправить?

Что должно произойти

Когда менеджер пакетов устанавливает новое ядро скрипт в /etc/kernel/postinst.d/apt-auto-removal помечает предыдущее ядро ​​для удаления при следующем запуске менеджера пакетов. Он работает правильно для большинства пользователей большую часть времени.

Сценарий довольно консервативный. Он не удаляет все старые ядра, и он оставляет ошибку на месте, оставляя ядра на месте, вместо того, чтобы ошибочно удалить ваше текущее ядро ​​или предыдущее ядро ​​(в случае, если вам нужно вернуться). Он не сканирует, чтобы увидеть все установленные вами ядра - он просто использует номера версий нового и текущего ядер.

Почему этого не произошло

В скрипте могла быть ошибка, другая проблема управления пакетами могла помешать маркировке, несколько действий пользователя могли бы пометить пакет для ручной установки перед удалением. Точная причина неизвестна и, возможно, неизвестна. Это все богатый гобелен.

Как это исправить

Исправить очень легко. Вам нужно две части информации:

  1. Текущее ядро ​​(используйте команду: uname -r)
  2. Другие установленные ядра (используйте команду: ls / boot)

Пример:

$ uname -r
3.11.0-15-generic

$ ls /boot
abi-3.11.0-14-generic         initrd.img-3.11.0-14-generic
abi-3.11.0-15-generic         initrd.img-3.11.0-15-generic
config-3.11.0-14-generic      System.map-3.11.0-14-generic
config-3.11.0-15-generic      System.map-3.11.0-15-generic
extlinux                      vmlinuz-3.11.0-14-generic
grub                          vmlinuz-3.11.0-15-generic

Игнорировать все имена файлов . Посмотрите на все номера версий . Из примера видно, что установлены две версии ядра:

  • 3.11.0-14-generic (можно удалить)
  • 3.11.0-15-generic (the работающее ядро ​​- НЕ удаляйте!)

Таким образом, мы можем удалить старое ядро:

sudo apt-get remove linux-image-3.11.0-14-generic

При удалении ядра менеджер пакетов автоматически удалит все эти файлы из / загрузиться и обновить меню grub.

0
ответ дан 13 April 2017 в 15:23

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

Похожие вопросы: