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


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

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

Ubuntu предоставляет простой способ их очистки или не показывать в списке загрузки?


658


происхождения


Как и удаление старых ядер, раскомментируйте эту строку в /etc/default/grub если вы хотите избавиться от элементов «восстановления» в меню: # GRUB_DISABLE_LINUX_RECOVERY = "true" - poolie
В последних выпусках Ubuntu скрывает ядра в подменю Grub, поэтому это не так навязчиво. Тем не менее, может быть хорошей идеей удалить лишние ядра для экономии места, особенно если у вас есть отдельный небольшой / загрузочный раздел. - jarno
Для выполнения этой задачи есть команда ubuntu, называемая очисткой-старыми ядрами. Смотрите мой ответ Чтобы получить больше информации. - jarno
sudo apt-get autoremove должен сделать трюк на Ubuntu 14.04+ - hobs
Накопление старых ядер - ошибка, с исправлением: bugs.launchpad.net/bugs/1357093 , Когда исправление будет выпущено, старые ядра будут автоматически сохранены по умолчанию. - user535733


ответы:


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

sudo apt autoremove

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

11.10 и более поздние версии Ubuntu

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

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

GNU GRUB

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

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

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

GNU GRUB Previous versions 

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

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

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

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

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

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

Synaptic Package Manager

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

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

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

uname -r

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

Terminal <uname -r>

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

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

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


569



Удаление старых пакетов «linux-image *» с использованием синаптики хорошо работало с 10.04. (Я упоминаю это, потому что название предполагает, что это может быть только для 11.10 и выше) - mivk
-yпереключатель в конце apt-get строка необходима, иначе apt-get просто запрашивает подтверждение, и поскольку входной сигнал является трубой, он просто прерывается. Поэтому это должно закончиться: | xargs sudo apt-get purge -y - Josh
Удаление около 20 версий старых linux-image а также linux-headers освободил 4,5 ГБ места на моей машине. - Andrew Mao
Этот метод работает хорошо, но удаление каждого ядра чрезмерно регенерирует grub.cfg, что требует времени. Есть ли способ отключить это для пакетного удаления, а затем восстановить его один раз? - spacediver
Я второй вопрос от @spacediver - это сумасшедший медленный процесс, когда у вас есть 38 ненужных ядер, поскольку, поскольку каждый из них удаляется, он проходит через все остальные, генерируя новый grub.cfg. Это то, что мы называем операцией N ^ 2 - обрабатывает ядро ​​около (38 ^ 2/2) = 722 раза и очень медленно. Конечно, Ubuntu может придумать что-то лучшее .... - nealmcb


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

uname -r 

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

Затем введите следующую команду для просмотра / списка всех установленных ядер в вашей системе.

dpkg --list | grep linux-image 

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

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

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

sudo update-grub2 

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


366



Делая это в 10.04 и 12.04, я обнаружил, что обновление-grub автоматически запускается во время процесса очистки. - aidan
Баш-х расширение скобы могут быть использованы, например. sudo apt-get purge linux-image-3.2.0-3{0..5}-generic (удаляет 30,31, .., 35) - ajo
После этого не нужно перезагружать систему. Фактически, вы должны перезагрузить систему до выполнив эти шаги, чтобы убедиться, что вы используете последнюю версию ядра, которую вы, вероятно, просто загрузили и установили (вы сделали обновление apt-get update && apt-get до этого, правильно?) - Ricket
Вы также можете удалить linux-signed-image пакеты, которые могут быть установлены в системах UEFI: sudo apt-get purge linux-signed-image-3.11.0-{12,14,24}-generic который удалит 12, 14 и 24 - devius
@jarno Я не знаю, использую ли я подписанное ядро ​​или нет, но uname -r не имеет signed строка в моей системе. Кажется, что у меня установлено подписанное изображение, и вывод этого ls команда: /boot/vmlinuz-3.19.0-16-generic.efi.signed, - devius


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

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 }' просто выводит второй столбец (который является именем пакета)
  • sort -V помещает элементы в порядок по номеру версии
  • sed -n '/'`uname -r`'/q;p' печатает строки перед текущим ядром
  • xargs sudo apt-get -y purge очищает найденные ядра

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

  • -n говорит sed быть спокойным
  • `uname -r` выводит текущую установленную версию ядра - мы включаем ее в backticks, чтобы выход включался как часть команды (вы также можете увидеть это как $(uname -r) 
  • /something/q говорит, останавливается, когда вы сопоставляете «что-то» (в этом случае что-то выводится uname -r) - / окружать регулярное выражение
  • p печать
  • ; это команда separtor, поэтому /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 purge
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

Обратите внимание sed вызов изменен. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" извлекает только версию (например, «3.2.0-44»), без «-генерического» или аналогичного из 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

262



Обратите внимание, что немного немного опасно сопоставлять текущую версию ядра с регулярным выражением: Точки соответствуют любому символу и 3.1.2-23 соответствуют 3.1.2-2 (или наоборот). Смотрите также мои ответ, - jarno
Вот настроенная версия «все-в-одном»: sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done) Смотрите также мои ответ, - jarno
@jarno, который помог мне в очень большой степени ... Престижность к вашему одному лайнеру - Clain Dsilva
Из-за неудовлетворенных зависимостей мне нужно было использовать его с dkpg -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 dpkg -P - Sebastian Sastre
НЕТ НЕ СДЕЛАЙТЕ ЭТО! «Это oneliner выглядит немного опасно, но, безусловно, 220 спасателей не могут ошибаться!» Я подумал про себя и слепо скопировал. Перезагружено, прямо в GRUB. Эта команда вытерла все мои ядра, включая ту, которую я использовал. Возможно, я запускал ядро ​​реального времени, даже не могу вспомнить. В настоящее время я просматриваю свой дом для USB-накопителя для установки Ubuntu Live CD на :( - Andreas Jansson


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 bikeshed
sudo purge-old-kernels

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

sudo purge-old-kernels --keep 3

55



Эта команда - это сценарий оболочки, местоположение которого вы можете найти по which purge-old-kernels, - jarno
Рад, что они сделали это намного легче в 16.04! Надеюсь, этот ответ продолжает пробиваться ... - Toby J
На Ubuntu 16.04 у меня есть purge-old-kernels без bikeshed (случайные полезные инструменты, которые еще не имеют постоянного дома) или любой другой. Избегайте использования apt-get -y вариант, похоже на закрытие глаз и надежду, что все будет в порядке. Также Вот это как autoremove решает, сколько старых ядер сохранить. - Pablo Bianchi
В 16.04 чистка-старое ядро ​​обеспечивается пакетом byobu (подсказка: apt-file search purge-old-kernels). Договорились о apt-get -y, Я удалю его. - bmaupin
@Dan, так как я не использую версии, отличные от LTS, я не был уверен точно, когда это началось. Но я могу с уверенностью сказать, что sudo apt-get autoremove не удаляет ядра в 14.04. Не стесняйтесь обновлять ответ с конкретной версией, если знаете, что это такое! - bmaupin


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

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

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

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

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

  • Установить настройку ubuntu

  • 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

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


41



На самом деле, startupmanager dint дает мне такое окно на Ubuntu 10.04, вместо этого он просто дал окно с двумя вкладками -> Параметры загрузки и Расширенный .. и в расширенном режиме у него есть возможность ограничить количество ядер. Поэтому, пожалуйста, обновите ответ для Ubuntu 10.04. (И именно поэтому я отказался от этого ...) - Sen
любая идея о том, как «количество ядер для хранения» можно определить на машине, на которой нет установленного GUI (сервера)? - sylvainulg
startupmanager устарел. Видеть Grup-настройщик - muhasturk


Purely commandline, это приведет к удалению всех, кроме текущего и второго самого текущего (через «-2» в команде главы ниже):

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 $OLD
fi
apt-get -qy autoremove --purge

38



однострочный там: dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e [0-9] | xargs sudo apt-get -y purge - Dmitry Verkhoturov
@DmitryPaskal, вы должны добавить это как новый ответ. - saji89
@DmitryPaskal Как всегда, не просто скопируйте их, не понимая их. На моей машине этот однострочный лайнер также соответствует linux-libc-dev:amd64 которые не следует удалять. - jamesadney
@Kees Cook, не должен ли аргумент awk окружать одиночные кавычки? Если вы намерены добавить «linux-image-» к линиям с каналами, это, похоже, работает, если вы используете awk '{print "linux-image-" $0}', - Mark
это не работает для меня, оно включает мое настраиваемое ядро ​​(Ubuntu 14.04 с 3.17) - Alex R


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

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

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

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


34



Выглядит как purge-old-kernels не находится в точном варианте (1.22) bikeshed. Есть ли разумный / безопасный способ получить более свежий bikeshed для точного определения? Или было бы проще / безопаснее просто установить скрипт? Я бы предпочел использовать репо, хотя, несмотря на длинный список зависимостей. - drevicko
@drevicko Смотреть Вот, - jarno
Еще один слегка касательный вопрос: не доходит до источника, есть ли способ определить, какие команды станут доступны при установке bikeshed? - drevicko
@drevicko, конечно, dlocate -lsbin bikeshed - jarno
@drevicko, см. также Другой вопрос - jarno