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

Каждый раз, когда я устанавливаю новое ядро Linux, оно остается в grub_config, что с каждым разом удлиняет загрузочное меню.

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

Предоставляет ли Ubuntu какой-либо более простой способ их очистки или предотвращения их отображения в списке загрузки?

16.04 и более новые версии Ubuntu

sudo apt autoremove

Эта команда удаляет пакеты, которые были автоматически установлены для устранения зависимости, но теперь больше не зависят от них. Это включает в себя старые версии linux-headers-* и linux-image-*. (Это также разумно в отношении этого процесса, оставляя одну запасную версию ядра в качестве запасного варианта!)

11.10 и более новые версии Ubuntu

GRUB2 и его отображение всех ядер

Последние версии Grub2 установленный в Ubuntu автоматически отображает последнее ядро и скрывает более старые ядра, которые вы, возможно, установили.

GNU GRUB

Если вы не видите своего выкапывать - тогда не забудьте нажать Shift во время загрузки.

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

Если вы выберете показанный вариант (нажмите Enter) затем все старые ядра становятся видимыми и доступными для загрузки.

GNU GRUB Previous versions

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

Первая загрузка с последним доступным ядром.

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

синаптический

Альтернативой является Синаптический (sudo apt install synaptic)

искать linux-образ, щелкните правой кнопкой мыши ядро и выберите полное удаление и, наконец, щелкните Применять кнопка для удаления ядра.

Synaptic Package Manager

Повторите поиск, но на этот раз для linux-заголовок - вы можете удалить связанные заголовки для выбранного ранее образа ядра.

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

Не забудьте проверить, какое ядро вы используете, введите:

uname -r

Результат был бы похож на:

Terminal <uname -r>

Запомните результат и номер - убедитесь, что вы не удалили соответствующее изображение или заголовок.

Рекомендация

Моя рекомендация состоит в том, чтобы сохранить по крайней мере два или, предпочтительно, три ядра, включая самые последние. Причина рекомендации заключается в том, что у вас будет по крайней мере одно / два других ядра для загрузки, если по какой-либо причине последнее ядро, с которым вы не можете загрузиться, или вводит регрессирующую возможность, такую как сломанная беспроводная связь.

Сначала перезагрузите свою систему, чтобы убедиться, что она использует последнее ядро. Затем откройте терминал и проверьте ваше текущее ядро:

uname -r 

НЕ УДАЛЯЙТЕ ЭТО ЯДРО!

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

dpkg --list 'linux-image-*'

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

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

Наконец, выполните приведенные ниже команды, чтобы обновить grub2

sudo update-grub2 

Перезагрузите свою систему.

Мой однострочный способ удаления старых ядер (это также освобождает место на диске)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

Объяснение (помните, | использует выходные данные предыдущей команды в качестве входных данных для следующей)

  • dpkg --list список всех установленных пакетов
  • grep linux-image ищет установленные образы Linux
  • awk '{ print $2 }' просто выводит 2-й столбец (который является именем пакета)
  • sort -V упорядочивает элементы по номеру версии
  • sed -n '/'`uname -r`'/q;p' выводит строки перед текущим ядром
  • xargs sudo apt-get -y purge удаляет найденные ядра

Разматывание sed вызов:

  • -n говорит sed чтобы быть тихим
  • `uname -r` выводит текущую установленную версию ядра - мы включаем ее в обратные ссылки, чтобы выходные данные включались как часть команды (вы также можете увидеть это как $(uname -r)
  • /something/q говорит "стоп", когда вы сопоставляете "что-то" (в данном случае что-то выводится из uname -r) - тот / окружите регулярное выражение
  • p это печать
  • то ; является разделителем команд, так что /something/q;p говорит "выйти", когда вы что-то сопоставляете, иначе печатайте

в целом, sed -n '/'`uname -r`'/q;p' выводит строки до тех пор, пока они не совпадут с текущим именем ядра.

Если вы параноик (как и я), вы можете сделать последнюю часть xargs echo sudo apt-get -y purge чтобы была напечатана команда для очистки старых ядер, вы можете проверить, что перед ее запуском не включено ничего неожиданного.


Измененная версия для удаления заголовков:

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purgedpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

Примечание: в sed вызов изменен. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" извлекает только версию (например, "3.2.0-44"), без "-generic" или аналогичной из uname -r


Универсальная версия для удаления изображений и заголовков (объединяет две версии выше):

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

Ubuntu 16.04+:

$ sudo apt autoremove...The following packages will be REMOVED:  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu 15.10 и ниже:

Я нахожу, что это самый простой и быстрый способ. Он сохраняет последнее ядро, а также еще два:

sudo apt-get install bikeshedsudo purge-old-kernels

Чтобы изменить количество дополнительных сохраняемых ядер:

sudo purge-old-kernels --keep 3

Удаление записей из Grub 2Entries должно быть удалено путем редактирования или удаления файлов в папке /etc/grub.d. Файл /boot/grub/grub.cfg доступен только для чтения и обычно не требует редактирования.

Слишком Много Ядер?

  • Если вы не уверены в ядре, которое используете в данный момент, в терминале введите uname -r.

  • Ядра, удаленные с помощью APT (Synaptic, "apt-get remove" и т.д.), автоматически обновят grub.cfg, и никаких действий пользователя не требуется.

  • Отличным инструментом для удаления ядер (и элементов меню) является Ubuntu-Tweak, безопасное и простое в использовании приложение с графическим интерфейсом.

  • Установите ubuntu tweak

  • Ubuntu-Tweak будет доступен в разделе Приложения и Системные инструменты.

Удаление Старых Записей Ядра

  • Выберите "Очиститель пакетов" слева и "Очистить ядро" на правой панели.

  • Нажмите кнопку "Разблокировать" в правом нижнем углу, введите свой пароль.

  • Выберите из отображаемого списка образы ядра и заголовки, которые вы хотите удалить. Используемое ядро не указано в списке.

  • Нажмите кнопку "Очистка" в правом нижнем углу, чтобы удалить выбранные образы ядра и заголовки.

Удаление операционных систем из меню Grub

  • Другие операционные системы, которые были удалены с компьютера, также будут удалены из меню после запуска "update-grub" от имени root.

  • Пункты меню размещаются в меню Grub2 с помощью скриптов. Если вы не хотите, чтобы в меню вводились другие операционные системы, отключите /etc/grub.d/30_osprober

  • Выполните эту команду, чтобы остановить запуск скрипта
    sudo chmod -x /etc/grub.d/30_os-prober

  • DISABLE_30_OS-PROBER='true' в /etc/default/grub

Удалите Memtest86+ из меню Grub
sudo chmod -x /etc/grub.d/20_memtest86+

  • Запустите команду update-grub, чтобы разрешить внесение изменений в grub.cfg

Источник

Примечание:После обновления ядра в меню GRUB добавляется новая запись.Вы можете удалить более старую, если хотите.Однако большинство опытных пользователей посоветуют вам сохранить хотя бы одну запасную запись на случай, если что-то пойдет не так при обновлении и вам потребуется загрузить более старую версию ядра для устранения неполадок.

Альтернативный способ удаления записей ядра (до версии 10.04)

для GRUB, а не для GRUB2

startupmanager Install startupmanager

Вы можете найти его в разделе Система>>Администрирование>>alt text
alt text
Вы видите на втором скриншоте, что вы можете выбрать, сколько ядер показывать? Обычно я просто оставляю его на 1, но когда я получаю обновление ядра, я всегда меняю его на 2 перед перезапуском, чтобы я мог выбрать более старое ядро, если у нового ядра есть проблемы с моим оборудованием. Как только я узнаю, что новое ядро работает хорошо, я меняю его обратно на 1.

Чисто из командной строки, это удалит все, кроме текущего и второго по величине (с помощью "-2" в приведенной ниже команде head):

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |    awk '{print "linux-image-" $0 " linux-headers-" $0}' )if [ -n "$OLD" ]; then    apt-get -qy remove --purge $OLDfiapt-get -qy autoremove --purge

Обновление: purge-old-kernels является осуждаемый в наше время.

Я создал скрипт для очистки ядер даже в сложных условиях. Это называется linux-purge и вы можете найти его здесь.

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

Существует также страница документации Ubuntu, на которую я внес свой вклад в отношении удаления старых ядер здесь.

Вы можете следить за Использование раздела пакета "автоматическое обновление" от Автоматические Обновления системы Безопасности статья в Ubuntu Wiki для выполнения этого.

Вам нужно изменить следующую строку в /etc/apt/apt.conf.d/50unattended-обновления файл;

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

с

Unattended-Upgrade::Remove-Unused-Dependencies "true";

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

Также удалите или прокомментируйте строку

"^linux-image.*"; 

в разделе "NeverAutoRemove" файла /etc/apt/apt.conf.d/01автоматическое удаление.

Самый быстрый / простой способ (применимый, по крайней мере, с 12.04), который уже поставляется с Ubuntu, - это apt-get. Выполните следующие действия, если вы хотите удалить все старые версии ядра, которые не используются (кроме предыдущей, которую вы не используете. Это делается для того, чтобы убедиться, что если текущая версия ядра каким-либо образом выйдет из строя, у вас есть способ вернуться к предыдущему состоянию). Выполните следующие действия:

sudo apt-get autoclean

Это приведет к удалению любых старых файлов (включая версии ядра), которые у вас могут быть. Обратите внимание, что если у вас много старых версий, это займет некоторое время, так как необходимо убедиться, что удаление версии ядра не вызывает проблем. Для меня удаление последних 12 версий ядра заняло около 2 минут. Вы также можете выполнить следующие действия:

sudo apt-get clean

Который удалит все загруженное и сохраненное в папке кэша apt. Наконец, у вас есть:

sudo apt-get autoremove

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

Чтобы выяснить, какие ядра и заголовки установлены, используйте

dpkg -l | grep linux-imagedpkg -l | grep linux-headers

Затем вы можете удалить их по одному или вместе, просто убедитесь, что сохранили самые последние.

Есть также несколько удобных команд и скриптов для автоматизации удаления.

http://ubuntuforums.org/showthread.php?t=1658648

Следующие утверждения об удалении всех неиспользуемых ядер и заголовков:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge

(использовать apt-get -y удалить без вопросов)

Вот что происходит при запуске 18.04.1:

~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purgeReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following packages will be REMOVED:  linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*  linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.After this operation, 671 MB disk space will be freed.(Reading database ... 227403 files and directories currently installed.)Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-image-4.15.0-33-generic (4.15.0-33.36) .../etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericFound linux image: /boot/vmlinuz-4.15.0-34-genericFound initrd image: /boot/initrd.img-4.15.0-34-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-genericI: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic/etc/kernel/postrm.d/initramfs-tools:update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic/etc/kernel/postrm.d/zz-update-grub:Generating grub configuration file ...Found linux image: /boot/vmlinuz-4.15.0-36-genericFound initrd image: /boot/initrd.img-4.15.0-36-genericAdding boot menu entry for EFI firmware configurationdoneRemoving linux-modules-4.15.0-33-generic (4.15.0-33.36) ...Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...(Reading database ... 156180 files and directories currently installed.)Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removedPurging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...~$ uname -r4.15.0-36-generic

`sudo apt-get autoremove" должен сделать свое дело в Ubuntu 14.04+

Для выполнения этой работы существует команда ubuntu под названием purge-old-kernels. Смотрите мой ответ для получения дополнительной информации.

Я продолжаю возвращаться к этой странице… комментарий @hobs работает только в том случае, если ваши ядра были установлены автоматически - однако вы делаете “sudo apt-get autoremove --purge” ** ответом **, следуя совету apt-mark на https://help.ubuntu.com/community/RemoveOldKernels

Накопление старых ядер - это ошибка, исправление которой продолжается: https://bugs .launchpad.net/bugs/1357093 . Когда исправление будет выпущено, старые ядра будут автоматически удаляться по умолчанию.

@ Команда не делает трюк для меня в Ubuntu Studio 14.04, если ядра были установлены не автоматически, а с помощью программы обновления программного обеспечения.

@hobs не могли бы вы преобразовать этот комментарий в ответ

Если /boot заполнен, см. apt - How can I remove old kernels/install new ones when /boot is full? - Ask Ubuntu

Помимо удаления старых ядер, раскомментируйте эту строку в “/etc/default/grub”, если вы хотите избавиться от пунктов “recovery” в меню: #GRUB_DISABLE_LINUX_RECOVERY=“true”

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