Как удалить старые ядра из терминала

6

Я занимаюсь различными вопросами о том, как очистить старые ядра Linux. Кажется, у всех есть разные ответы, и они старые, поэтому кто-то обязан сказать, что вопрос слишком стар, и начать новую запись, так вот:

Я хочу сделать следующее:

  1. Удалите старые ядра Linux вручную в терминале.
  2. Удалить все файлы конфигурации
  3. Удалить все файлы заголовков
  4. Удалить ненужные индексы?
  5. Объясните, почему dpkg -l | grep linux-image не возвращает те же результаты, что и в моем листе grub2 во время загрузки.
  6. Объяснить rc vs ii в dpkg -l | Список ссылок grep linux-image
  7. Объясните несоответствие между записями в каталоге / usr / src (или там, где эти файлы находятся в других версиях Ubuntu) и двумя вышеописанными методами определения лишних версий ядра.
  8. Каковы последствия полной очистки старых ядер. Нужно ли беспокоиться о зависимостях? Как узнать, зависят ли какие-либо приложения на моем компьютере от файлов конфигурации старых ядер.

Что я не хочу:

  • Ссылки на другие ответы, которые вы лично не протестировали или не адресуете ВСЕ проблемы, связанные с полной очисткой.
  • Любой ответ, который вы лично не проверили.
  • Скрипты, которые пытаются автоматически очистить все сразу. Я просто хочу сделать это вручную, пока я полностью не пойму все, что происходит.

Давайте рассмотрим комплексное решение проблемы с наращиванием ядра. В настоящее время я играю с более старой версией Ubuntu (10.04), прежде чем обновлять, но у меня была та же проблема с Ubuntu 12.04. Если решение отличается для разных версий, укажите версию, которую вы использовали для тестирования вашего решения.

Что работает:

uname -r

Это правильно возвращает версию ядра, которую я сейчас использую.

Вещи, которые не работают:

sudo apt-get autoremove
sudo apt-get clean
sudo apt-get autoremove linux-image-x.x.xx-xx-generic

То, что я думал, должно работать, но не:

sudo apt-get purge linux-image-x.x.xx-xx-generic

Это уменьшило список, сгенерированный dpkg -l | grep linux-image :

sudo dpkg --purge linux-image-x.x.xx-xx-generic

Также здесь начинается голова по проблеме rc/ii :

ii означает «Он должен быть установлен и установлен», тогда как rc означает «Он удален / удален, но все файлы конфигурации все еще там».

Я думаю, что это касается проблемы между несоответствием между списком терминалов и меню grub2 при загрузке. Насколько я помню, списки ii соответствуют списку grub2. Вопрос в том, как в первую очередь попали записи ii ?

    
задан JamesH 22.12.2014 в 08:22
источник

3 ответа

6

Накопление старых ядер до тех пор, пока / boot не будет заполнено, тем самым сломав apt, будет ошибка: LP # 1357093 , с исправлением, реализованным во всех вариантах Ubuntu 16.04 и новее.

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

Когда новое ядро ​​установлено, сценарий /etc/kernel/postinst.d/apt-auto-removal отмечает более старые ядра как подходящие для autoremoval ... но не запускает autoremove. Первоначально недостаток autoremove был предназначен, чтобы позволить человеку просмотреть список удаленных пакетов.

Исправление для LP # 1357093 работает для большинства пользователей - если оно не работает для вас, тогда есть другая основная причина, препятствующая тому, чтобы старые пакеты ядра были помечены как подходящие для autoremove. Ищите справку «один на один» в поддерживающих каналах Ubuntu.

В более старых версиях Ubuntu вы должны исправить старые ядра, чтобы сохранить пространство вручную. Как вы его исправите вручную, зависит от того, полна ли ваша / загрузка или нет. Большинство пользователей не замечают проблему до тех пор, пока / boot не будет заполнен, и они получат ошибки apt и dpkg no-space-left-on-device.

Если / boot не заполнен , а apt работает правильно, просто

sudo apt-get autoremove      ## Ubuntu 14.04 and older
sudo apt autoremove          ## Ubuntu 16.04 and newer

должен удалить все пакеты ядра, которые имеют право на автоопределение.

Если / boot заполнен , а действия apt не выполняются с ошибкой dpkg «на устройстве нет места», то использовать autoremove слишком поздно.

Слишком поздно, потому что Aptdaemon ставит в очередь действия пакета. Autoremove находится в конце очереди, и apt прерывает всю оставшуюся очередь, когда какое-либо действие терпит неудачу ... включая пробег. (Возможно, это ошибка в apt / aptdaemon)

Лучшей практикой здесь является использование «uname» и «dpkg» для удаления одного или двух старых ядер, освобождение пространства для apt для завершения его действий в очереди. Затем будет работать autoremove.

Пример:

$ uname -r
3.16.0-36-generic    ## This is kernel you MUST NOT remove.

$ dpkg -l | grep linux-image
rc  linux-image-3.16.0-23-generic    ## 'rc' means already removed
rc  linux-image-3.16.0-28-generic    ## 'rc' can be safely ignored
rc  linux-image-3.16.0-29-generic
ii  linux-image-3.16.0-30-generic    ## 'ii' means installed. Removable
ii  linux-image-3.16.0-31-generic    ## Removable
ii  linux-image-3.16.0-33-generic    ## Removable
ii  linux-image-3.16.0-34-generic    ## Backup working kernel. Don't remove
ii  linux-image-3.16.0-36-generic    ## Current kernel. DO NOT REMOVE

## Use dpkg to remove one older kernel, freeing enough space for apt to work
$ sudo dpkg --remove linux-image-3.16.0-30-generic
$ sudo apt-get autoremove     ## Ubuntu 14.04 and older
$ sudo apt autoremove         ## Ubuntu 16.04 and newer

Если вы долгое время игнорировали проблему , то есть эффекты второго порядка, такие как linux-image-generic, указывающие на неправильную версию ядра и ошибки зависимости apt. Нет единственного способа фиксировать все это сразу.

Как правило, простой способ очистки большинства этих проблем состоит в том, чтобы очистить старые пакеты из локального кеша пакета, обновить базу данных пакетов и переустановить повреждающие пакеты из репозиториев Ubuntu (вместо локального кеша).

$ sudo apt-get update       ## Refresh the package database (14.04 and older)
$ sudo apt update           ##                              (16.04 and newer)

$ sudo apt-get autoclean    ## Delete the obsolete packages from your local cache (14.04 and older)
$ sudo apt autoclean        ##                                                    (16.04 and newer)

$ sudo apt-get install --reinstall <packagename>     ## Reinstall the offending package with the latest version in the Ubuntu repositories (14.04 and older)
$ sudo apt install --reinstall <packagename>         ##                (16.04 and newer)

Если вы все еще сталкиваетесь с ошибками apt и / или dpkg, обратитесь за помощью «один на один» в поддерживающие каналы Ubuntu.

    
ответ дан user535733 31.12.2015 в 17:24
0

Вы можете выполнить следующую команду, чтобы найти список установленных ядер.

  

rpm -q kernel

После поиска списка ядер выполните следующую команду, чтобы удалить ядра.

  

sudo apt-get удалить linux-image-x.x.x.x-generic

    
ответ дан vembutech 25.12.2014 в 12:58
0

Вы можете попробовать эти команды, удалить старые файлы конфигурации и старые ядра:

exec sudo -i

CONFOLD=$(dpkg -l | grep '^rc' | awk '{print }')

KERNELCUR=$(uname -r | sed 's/-*[a-z]//g' | sed 's/-386//g')

PKGLINUX="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAPKGLINUX="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

KERNELSOLD=$(dpkg -l | awk '{print }' | grep -E "$PKGLINUX" | grep -vE "$METAPKGLINUX" | grep -v "$KERNELCUR")

apt-get purge "$CONFOLD"

apt-get purge "$KERNELSOLD"

update-grub
    
ответ дан kyodake 19.08.2017 в 17:32