Каждый раз, когда я устанавливаю новое ядро Linux, оно остается в grub_config, делая загрузочное меню дольше каждый раз.
Я знаю, что могу вручную искать установленные пакеты и удалять их.
У Ubuntu есть простой способ их очистки или не показывать в списке загрузки?
Откройте терминал и проверьте текущее ядро:
uname -r
НЕ УДАЛЯЙТЕ ЭТО КЕРНЕЛЬ!
Затем введите следующую команду, чтобы просмотреть / перечислить все установленные ядра в вашей системе .
dpkg --list | grep 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 }', просто выдает второй столбец (который является именем пакета) sort -V помещает элементы в порядок по номеру версии [ f9] печатает строки до того, как текущее ядро xargs sudo apt-get -y purge очистит найденные ядраРазматывание вызова sed:
dpkg --list перечисляет все установленные пакеты [!d3 ] `uname -r` выводит текущую установленную версию ядра - мы включаем ее в обратные так, чтобы выход включался как часть команды (вы также можете видеть это как $(uname -r) grep linux-image ищет установленные изображения linux [ ! d4] p is print awk '{ print $2 }' просто выводит второй столбец (который является именем пакета)в целом, sed -n '/'`uname -r`'/q;p' печатает строки до тех пор, пока они не совпадут с текущее имя ядра.
Если вы параноидально (как и я), вы можете e последняя часть 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
$ 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
Я считаю, что это самый простой и быстрый способ. Он сохраняет последнее ядро, а также еще два:
sudo apt-get install bikeshed
sudo purge-old-kernels
Чтобы изменить количество дополнительных сохраняемых ядер:
sudo purge-old-kernels --keep 3
Удаление записей из Grub 2 Записи должны быть удалены путем редактирования или удаления файлов в папке /etc/grub.d. Файл /boot/grub/grub.cfg доступен только для чтения и обычно не требует редактирования.
Слишком много ядер?
Если вы не уверены в том, какое ядро вы используете, в терминале типа uname -r. Ядра, удаленные с помощью APT (Synaptic, «apt-get remove» и т. Д.) Будут автоматически обновлять grub.cfg, и никаких действий пользователя не требуется. Отличным инструментом для удаления ядер (и записей в меню) является Ubuntu-Tweak, безопасное и удобное графическое приложение. Установите ubuntu tweak. Ubuntu-Tweak будет доступен в разделе «Приложения»> «Системные инструменты».Слишком много ядер?
Если вы не уверены в том, какое ядро вы используете в терминальном типе uname -r.Если вы не уверены в ядре, которое используете в настоящее время, в терминале типа uname -r.
Ядра, удаленные с помощью APT (Synaptic, «apt-get remove» и т. д.) будут автоматически обновлять grub.cfg, и никакое действие пользователя не требуется.Ядра удалены через APT (Synaptic , «apt-get remove» и т. д.) автоматически обновит grub.cfg, и никакое действие пользователя не потребуется.
Нажмите кнопку «Разблокировать» в правом нижнем углу, введите свой пароль.
Если вы не уверены в том, какое ядро вы используете, в терминале типа uname -r.
Элементы меню помещаются в меню Grub2 по сценариям. Если вы не хотите, чтобы в меню вводились другие операционные системы, отключите /etc/grub.d/30_osprober . Отличным инструментом для удаления ядер (и записей в меню) является Ubuntu-Tweak, безопасный и простой в использовании -use GUI.Ядра, удаленные с помощью APT (Synaptic, «apt-get remove» и т. д.), автоматически обновят grub.cfg, и никакое действие пользователя не потребуется.
[ ! d24]Нажмите кнопку «Очистка» в правом нижнем углу, чтобы удалить выбранные изображения и заголовки ядра.
Элементы меню помещаются в меню Grub2 с помощью сценариев. Если вы не хотите вводить другие операционные системы в меню, отключите /etc/grub.d/30_osproberУдалите операционные системы из меню Grub
DISABLE_30_OS-PROBER = 'true' в / etc / default / grub
Удалить Memtest86 + из меню Grub sudo chmod -x /etc/grub.d/20_memtest86+
Источник
Удалить операционные системы из меню Grub После обновления ядра новая запись добавляется в меню GRUB. Вы можете удалить более старую, если хотите. Однако большинство опытных пользователей будут советовать вам поддерживать по крайней мере, одну резервную запись, если что-то пойдет не так с обновлением, и вам нужно загрузить старшую версию ядра для устранения неполадок.
Чистая командная строка, это приведет к удалению всех, кроме текущего и второго самых текущих (через «-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
Обновление: purge-old-kernels устарел в настоящее время.
Я сделал сценарий для очистки ядер даже в сложных условиях.
Если вы просто хотите очистить ядра (и связанные пакеты), которые старше, чем используемое в данный момент ядро, Если система не сломана, вы можете использовать этот скрипт.
Существует также страница документации Ubuntu, которую я внес в отношении удаления старых ядер этого скрипта .
Вы можете выполнить раздел «Автоматический обновление» раздела статьи «Автоматические обновления безопасности» в Ubuntu Wiki для этого.
Вам нужно изменить следующую строку в . Используя «без присмотра» -upgrades "[] d1] file
//Unattended-Upgrade::Remove-Unused-Dependencies "false";
с
Unattended-Upgrade::Remove-Unused-Dependencies "true";
для автоматического удаления старых пакетов, включая ядра.
Также удалите или прокомментируйте строку
"^linux-image.*";
в разделе «NeverAutoRemove» файла /etc/apt/apt.conf.d/01autoremove.
Самый быстрый / более простой способ (возможно, по крайней мере с 12.04), который уже существует с Ubuntu, - apt-get. Выполните следующие действия, если хотите удалить все старые версии ядра, которые не используются (за исключением предыдущего, который вы не используете. Это значит, что если текущая версия ядра сработает некорректно, у вас есть способ пойти назад в предыдущее состояние). Выполните следующие действия:
sudo apt-get autoclean
Это приведет к удалению любых старых файлов (включая версии ядра), которые у вас могут быть. Обратите внимание, что если у вас много старых версий, это займет некоторое время, поскольку он должен удостовериться, что удаление версии ядра не вызывает проблем. Для меня удаление последних 12 версий ядра заняло около 2 минут. Вы также можете сделать следующее:
sudo apt-get clean
Который устранит все, что скачано и сохранено в папке кеша apt. Наконец, у вас есть:
sudo apt-get autoremove
, который будет проверять любые неиспользованные пакеты и удалять их, если необходимо. Это отлично подходит для тех библиотек и пакетов зависимостей, которые больше не нужны ни одному из установленных приложений.
Computer Janitor может очищать старые ядра, и я полагаю, что установлен по умолчанию в Ubuntu (но не в Kubuntu).
GRUB 1, если вы используете что имеет опцию в /boot/grub/menu.lst, чтобы указать, сколько ядер он должен показывать максимум. GRUB 2, насколько я могу судить, не делает.
Чтобы выяснить, какие ядра и заголовки установлены, используйте
dpkg -l | grep linux-image
dpkg -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)" | xargs sudo apt-get purge
Чтобы удалить старые ядра изображений Linux, сначала загрузитесь в ядро, которое вы хотите сохранить.
Вы также можете проверить версию ядра с помощью команды uname -r, чтобы вы не удалили ошибку по ошибке.
Теперь перейдите в диспетчер синаптических пакетов и выполните поиск linux-image и удалите старые версии, кроме тех, которые показаны верхней командой. Обычно я предпочитаю идти с последним.
Теперь при перезапуске вы увидите более чистое меню grub.
Вы можете установить ubuntu-tweak, а затем перейдите в «Приложения» -> «Системный инструмент» -> ubuntu tweak и
щелкните очистите и очистите ядра. он не показывает текущее ядро, поэтому вы всегда будете в безопасности.
Лично мне нравится использовать Synaptic. Это заставляет меня чувствовать себя более уверенно в том, что происходит. Единственное приложение, которое я использовал, которое имеет возможность удалить старые ядра, - Ubuntu Tweak.
Как удалить ядра, которые вы не используете:
Открыть UbuntuTweak Нажмите «Очистить пакет» 'в разделе «Приложения» в левой панели. В правой части «очистки» нажмите «Очистить ядра». Выберите все ядра. Я думаю, что тот, который используется, отсутствует в списке, но на всякий случай проверьте работу uname -a в терминалВы можете удалить старые ядра (linux-image-... пакеты) с помощью Synaptic, и это удалит их из меню загрузки. Будьте осторожны, чтобы не удалять запущенное ядро (вы можете проверить его версию с помощью uname -r).
Помните, что если одна или две старые версии могут помочь вам устранить неполадки, должно быть что-то не так.
В качестве альтернативы вы можете редактировать / удалять записи вручную (gksu gedit /boot/grub/grub.cfg), но они будут сгенерированы при обновлении до более нового ядра. Если вы думаете об удалении опций recovery mode - не делайте этого. Они могут пригодиться, если вы сломаете что-то, что мешает вам загружаться.
См. Эту страницу.
Это чистое решение командной строки.
Сначала создайте список всех установленных версий ядра, кроме текущего ядра:
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2))
Альтернативно создайте список всех установленных версии ядра, за исключением последних двух:
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
sort -V | head -n -2)
Изучите список. Убедитесь, что версии ядра, которые вы хотите сохранить, не являются частью списка. Используйте команду uname -r, чтобы увидеть версию текущего ядра.
Если вы довольны результатами, вы можете использовать apt-get для удаления пакетов.
Сначала a (используя первый генератор в качестве примера):
sudo apt-get --dry-run purge $(
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2)))
Затем реальный пробег:
sudo apt-get purge $(
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2)))
Если вы хотите автоматизировать процесс, добавьте параметр --yes :
sudo apt-get --yes purge $(
...)
Преимущество этого ответа - родной Ubuntu Bash используется без установки сторонних приложений. Пользователи пользовательских ядер, которые не использовали apt или dpkg, могут изменить этот сценарий bash в соответствии с их потребностями. Этот ответ основан на (как выборочно очистить старые ядра все сразу).
Zenity предоставляет удобный интерфейс графического интерфейса для терминала для обработки списка и выбора элементов с радио-кнопками:
Как выборочно удалять старые ядра все сразу
Поскольку заголовок указывает, что текущее ядро, с которым вы загрузились, не может быть удалено и isn Включено в список. Сообщается, сколько будет сохранено в каталоге /boot. На вашем диске сохраняется больше, потому что двоичные файлы ядра также находятся в других областях. radio-buttons Теперь включены каталоги /usr/src/*kernel_version* и /lib/modules/*kernel_version*.
Измененная дата открыта с помощью команды stat. В моей системе эта дата «трогается» каждый раз, когда ядро загружается с помощью этого (как вы узнаете, когда была загружена последняя версия ядра?) Скрипт перезагрузки cron. Тем не менее, в вашей системе дата будет датой выпуска ядра, а не в последний раз, когда вы ее загрузили.
Вам предоставляется окончательная возможность чтобы просмотреть все, что будет очищено, и посмотреть общее количество дискового пространства (несколько вводящее в заблуждение), которое будет восстановлено:
The following packages will be REMOVED:
linux-headers-4.7.1-040701* linux-headers-4.7.1-040701-generic*
linux-headers-4.7.2-040702* linux-headers-4.7.2-040702-generic*
linux-headers-4.7.3-040703* linux-headers-4.7.3-040703-generic*
linux-headers-4.8.1-040801* linux-headers-4.8.1-040801-generic*
linux-headers-4.8.10-040810* linux-headers-4.8.10-040810-generic*
linux-headers-4.8.11-040811* linux-headers-4.8.11-040811-generic*
linux-headers-4.8.4-040804* linux-headers-4.8.4-040804-generic*
linux-headers-4.8.5-040805* linux-headers-4.8.5-040805-generic*
linux-image-4.7.1-040701-generic* linux-image-4.7.2-040702-generic*
linux-image-4.7.3-040703-generic* linux-image-4.8.1-040801-generic*
linux-image-4.8.10-040810-generic* linux-image-4.8.11-040811-generic*
linux-image-4.8.4-040804-generic* linux-image-4.8.5-040805-generic*
0 upgraded, 0 newly installed, 24 to remove and 2 not upgraded.
After this operation, 2,330 MB disk space will be freed.
Do you want to continue? [Y/n]
Скопируйте этот код в исполняемый файл с именем [ f13] в /usr/local/bin:
#!/bin/bash
# NAME: rm-kernels
# PATH: /usr/local/bin
# DESC: Provide zenity item list of kernels to remove
# DATE: Mar 10, 2017. Modified Jul 28, 2017.
# NOTE: Will not delete current kernel.
# With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
# # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
# First time for `du` 34 seconds.
# Second time for `du` 1 second.
# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
# By default `du` is not used and estimated size is displayed.
# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
zenity --error --text "root access required. Use: sudo rm-kernels"
exit 99
fi
OLDIFS="$IFS"
IFS="|"
choices=()
current_version=$(uname -r)
for f in /boot/vmlinuz*
do
if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
[[ $f =~ vmlinuz-(.*) ]]
v=${BASH_REMATCH[1]} # example: 4.9.21-040921-generic
v_main="${v%-*}" # example: 4.9.21-040921
# Kernel size in /boot/*4.9.21-040921-generic*
s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')
if [[ $# -ne 0 ]] ; then # Was a parameter passed?
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
# Kernel headers size in /usr/src/*4.9.21-040921*
s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
else
s2="0M" # Linux Headers are not installed
fi
# Kernel image size in /lib/modules/4.9.21-040921-generic*
s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
else
# Estimate sizof of optional headers at 125MB and size of image at 220MB
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
s2="125M"
else
s2="0M" # Linux Headers are not installed
fi
s3="220M"
fi
# Strip out "M" provided by human readable option of du and add 3 sizes together
s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
t=$(( t + s ))
s=$s" MB"
d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
choices=("${choices[@]}" false "$v" "$d" "$s")
done
# adjust width & height below for your screen 640x480 default for 1920x1080 HD screen
# also adjust font="14" below if blue text is too small or too large
choices=(`zenity \
--title "rm-kernels - Total: $t MB excluding: $current_version" \
--list \
--separator="$IFS" \
--checklist --multiple \
--text '<span foreground="blue" font="14">Check box next to kernel(s) to remove</span>' \
--width=640 \
--height=480 \
--column "Select" \
--column "Kernel Version Number" \
--column "Modified Date" \
--column " Size " \
"${choices[@]}"`)
IFS="$OLDIFS"
i=0
list=""
for choice in "${choices[@]}" ; do
if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
((i++))
short_choice=$(echo $choice | cut -f1-2 -d"-")
header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)
# If -lowlatency and -generic are purged at same time the _all header directory
# remains on disk for specific version with no -generic or -lowlatency below.
if [[ $header_count -lt 3 ]]; then
# Remove all w.x.y-zzz headers
list="$list""linux-image-$choice- linux-headers-$short_choice"
else
# Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
list="$list""linux-image-$choice- linux-headers-$choice"
fi
done
if [ "$i" -gt 0 ] ; then
apt-get purge $list
fi
Измененная дата Вам нужно sudo-разрешение для создания файла, поэтому используйте:
gksu gedit /usr/local/bin/rm-kernels
Чтобы сделать файл исполняемый файл:
sudo chmod +x /usr/local/bin/rm-kernels
rm-kernels-server - это версия сервера для выборочного удаления ядер одновременно. Вместо диалогового окна GUI (графического) текстовое диалоговое окно используется для выбора ядер для очистки.
Перед запуском скрипта вам необходимо установить функцию диалога, используя: sudo apt install dialogДиалог находится в установке Ubuntu Desktop по умолчанию, но не на сервере Ubuntu.
Как вы узнаете, когда была загружена последняя версия ядра?
#!/bin/bash
# NAME: rm-kernels-server
# PATH: /usr/local/bin
# DESC: Provide dialog checklist of kernels to remove
# Non-GUI, text based interface for server distro's.
# DATE: Mar 10, 2017. Modified Jul 28, 2017.
# NOTE: Will not delete current kernel.
# With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
# # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
# First time for `du` 34 seconds.
# Second time for `du` 1 second.
# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
# By default `du` is not used and estimated size is displayed.
# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
echo "root access required. Use: sudo rm-kernels-server"
exit 99
fi
# Must have the dialog package. On Servers, not installed by default
command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed. Aborting."; exit 99; }
OLDIFS="$IFS"
IFS="|"
item_list=() # Deviate from rm-kernels here.
current_version=$(uname -r)
i=0
for f in /boot/vmlinuz*
do
if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
[[ $f =~ vmlinuz-(.*) ]]
((i++)) # Item List
v=${BASH_REMATCH[1]} # example: 4.9.21-040921-generic
v_main="${v%-*}" # example: 4.9.21-040921
# Kernel size in /boot/*4.9.21-040921-generic*
s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')
if [[ $# -ne 0 ]] ; then # Was a parameter passed?
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
# Kernel headers size in /usr/src/*4.9.21-040921*
s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
else
s2="0M" # Linux Headers are not installed
fi
# Kernel image size in /lib/modules/4.9.21-040921-generic*
s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
else
# Estimate sizof of optional headers at 125MB and size of image at 220MB
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
s2="125M"
else
s2="0M" # Linux Headers are not installed
fi
s3="220M"
fi
# Strip out "M" provided by human readable option of du and add 3 sizes together
s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
t=$(( t + s ))
s=$s" MB"
d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
item_list=("${item_list[@]}" "$i" "$v ! $d ! $s" off)
done
cmd=(dialog --backtitle "rm-kernels-server - Total: $t MB excluding: $current_version" \
--title "Use space bar to toggle kernel(s) to remove" \
--column-separator "!" \
--separate-output \
--ascii-lines \
--checklist " Kernel Version --------- Modified Date Size" 20 60 15)
selections=$("${cmd[@]}" "${item_list[@]}" 2>&1 >/dev/tty)
IFS=$OLDIFS
if [ $? -ne 0 ] ; then
echo cancel selected
exit 1
fi
i=0
choices=()
for select in $selections ; do
((i++))
j=$(( 1 + ($select - 1) * 3 ))
choices[i]=$(echo ${item_list[j]} | cut -f1 -d"!")
done
i=0
list=""
for choice in "${choices[@]}" ; do
if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
((i++))
short_choice=$(echo $choice | cut -f1-2 -d"-")
header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)
# If -lowlatency and -generic are purged at same time the _all header directory
# remains on disk for specific version with no -generic or -lowlatency below.
if [[ $header_count -lt 3 ]]; then
# Remove all w.x.y-zzz headers
list="$list""linux-image-$choice- linux-headers-$short_choice"
else
# Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
list="$list""linux-image-$choice- linux-headers-$choice"
fi
done
if [ "$i" -gt 0 ] ; then
apt-get purge $list
fi
ПРИМЕЧАНИЕ. При вызове dialog директива --ascii-lines передается для замены расширенного набора символов линии (который ssh не нравится) с «+ ----- +» для рисования ящиков. Если вам не нравится этот внешний вид, вы можете использовать директиву --no-lines для отсутствия поля.
Расчетный размер каждого ядра было взято из /boot/*kernel_version*, из которых 5 файлов суммарно ~ 50 МБ. Формула изменилась, чтобы включить файлы в /usr/src/*kernel_version* и /lib/modules/*kernel_version*. Расчетный размер для каждого ядра теперь составляет ~ 400 МБ. Вышеупомянутый код для rm-kernels и rm-kernels-server обновлен.
По умолчанию используется размер файлов для linux-заголовков на 125 МБ и linux-изображение при 220 МБ, потому что du может быть болезненным медленно, если файлы не находятся в кеше. Чтобы получить реальный размер с помощью du, передайте любой параметр сценарию.
Общее количество всех размеров ядра (исключая текущую текущую версию, которая не может быть удалена) теперь отображается в строке заголовка.
Диалоговое окно, используемое для отображения каждого ядра ПРИМЕЧАНИЕ: . Эта дата может быть перезаписана для всех ядер во время резервного копирования или аналогичных операций. В диалоговом окне теперь отображается cron .
Легкий способ избавиться от почти всех устаревших пакетов, пакеты больше не входят в список пакетов, а также устаревшие ядра - сделать одно из следующего:
dpkg --purge $(aptitude search ?obsolete)
Однако это пропустит пакеты, которые по-прежнему рекомендуются другими пакетами, а аргумент -R / - без рекомендаций не разрешает эту проблему.
dselect после переключения режима сортировки с помощью «o» отобразит все устаревшие пакеты, включая те, aptitude промахивается, но некоторым людям это не нравится.
Принимаемый ответ с использованием sed для удаления старых ядер навсегда имеет некоторые недостатки, если кто-то не перезагрузил компьютер после обновления ядра, команда также удалит новое ядро.
Вот альтернативное решение который рассмотрит все ситуации, чтобы удалить только старые устаревшие ядра:
#!/bin/bash
kernels=( $(grep -Po "^linux-image-[^-]+-[^-]+-generic\b" < <(dpkg --get-selections)) )
cur_rel=$(grep -Po ".*(?=-[a-z]*$)" < <(uname -r))
for kernel in "${kernels[@]}"; do
ker_rel=$(grep -Po "[0-9].*(?=-[a-z]*)" <<< "$kernel")
dpkg --compare-versions "$ker_rel" gt "$cur_rel" && echo "Please Restart your computer first" && break
dpkg --compare-versions "$ker_rel" lt "$cur_rel" && sudo apt-get remove "$kernel"
done
Если у вас есть версия, которая является более новой, чем текущая, это даст вам предупреждение о перезагрузке компьютера в первую очередь. Также обратите внимание, что старые ядра сохраняются по уважительной причине: если вы каким-то образом испортили свое текущее ядро, что делает вашу систему неустойчивой, тогда вы сможете загрузиться в любое более раннее ядро.
ailurus имеет функцию удаления старых ядер, а также неиспользуемых конфигураций. Я лично удаляю его вручную из синаптики. Вы можете установить ailurus из getdeb, а также ppa
Вы можете использовать ukuu - это все GUI - обновить и удалить старые ядра. Работает для меня!
Просто помните, что последние 2 установлены и, очевидно, «запущенное» ядро.
Вы также можете установить ukuu только для показа основных выпусков, даже ядер RC, скрыть точку релизы
Вы можете найти ukuu в Synaptic или инструкции здесь:
вот грубая схема того, что я сделал, осторожно, поскольку я не эксперт в Linux, убедитесь, что вы знаете, что делаете, и создали резервные копии любых файлов, которые вы изменяете.
gedit /boot/grub/grub.cfg
затем найдите записи, которые вы хотите сохранить, выделим и скопируем их
cd /etc/grub.d
ls
, вы увидите список файлов, таких как 10_linux и 30_os-prober
sudo chmod -x 10_linux
this прекратит форматировать автоматическое добавление всех записей linux в меню загрузки grub.
gksudo gedit 40_custom
откройте файл меню пользовательской загрузки, затем вернитесь к grub.cfg (который все еще должен быть открыт в gedit) и скопируйте записи, которые хотите сохранить ... например [!d4 ]
menuentry "My Default Karmic" {
set root=(hd0,1)
search --no-floppy --fs-uuid --set cb201140-52f8-4449-9a95-749b27b58ce8
linux /boot/vmlinuz-2.6.31-11-generic root=UUID=cb201140-52f8-4449-9a95-749b27b58ce8 ro quiet splash
initrd /boot/initrd.img-2.6.31-11-generic
}
вставьте их в 40_custom, а затем сохраните.
sudo chmod 755 40_custom
делает его исполняемым, затем, наконец, мы обновляем grub, который изменит файл grub.cfg: [!d6 ]
sudo update-grub
Теперь, ОСТОРОЖНО, если вы обновляете ядро или ОС, ваше загрузочное меню, вероятно, не будет обновляться ... вам нужно будет сделать это вручную. Но выполнение этой процедуры позволит вам настроить меню загрузки немного больше, например, удалить версию ядра и просто поместить имя ubuntu ... т.е. Ubuntu Lucid 10.04 и т. Д.
Надеюсь, что кто-то найдет это полезно, поскольку мне потребовалось некоторое время, чтобы разобраться ... не видел этого решения нигде ...
Установите диспетчер синаптических пакетов и перейдите на вкладку фильтров (я думаю, фильтры, если не попробовать все 5) и выберите «local». Это покажет вам сиротские пакеты в вашей системе, такие как ядра. После их удаления запустите update-grub. Эта команда обновляет список параметров загрузки для grub.
Если это не удается, вы всегда можете попробовать apt-get remove linux-image-version-generic.
На основании предыдущего ответа Дэвида Кемпа, следующий скрипт очистит все заголовки и изображения, за исключением последних двух версий.
#!/bin/sh
# This script assumes that the installed linux-image and linux-headers packages
# share the same versions (i.e. if a linux-image version number is installed,
# the corresponding linux-headers package will also be installed, and vice
# versa.)
SECONDTOLASTVER=$(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -r -n | sed '/^[^0-9]\+$/d' | sed 's/^.*-\([0-9\.]\+-[0-9]\+\).*/\1/' | uniq | sed -n 2p)
# get a list of package names matching the argument passed to the function, and
# return only those package names which should be removed
get_pkgs_to_remove_matching () {
if [ -n "$SECONDTOLASTVER" ]; then
echo $(dpkg --list | grep $1 | awk '{ print $2 }' | sort | sed -n '/'"$SECONDTOLASTVER"'/q;p')
fi
}
echo $(get_pkgs_to_remove_matching linux-image) $(get_pkgs_to_remove_matching linux-headers) | xargs sudo apt-get -y purge
Следующая строка команд очистит все установленные ядра Linux, кроме текущего (grep -v uname -r) и последнего доступного ядра (dpkg -l | .... | tail -1): [!d0 ]
dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | grep -v `dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | tail -1` | grep -v `uname -r` | xargs apt-get -y purge
Я использую это, чтобы поддерживать загрузочные тома на рабочем столе относительно чистыми, но в ситуации на сервере вы, вероятно, захотите расширить логику и написать несколько дополнительных скриптов, чтобы сохранить список последних ядер X, загруженных сервером .
Что-то вроде сценария запуска, который делает:
uname -r >> /root/bootedkernels
cat /root/bootedkernels | sort -u | tail -3 > /root/bootedkernels # Keep the last 3 booted kernels
, а затем использует:
dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | grep -vf /root/bootedkernels | grep -v `dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | tail -1` | grep -v `uname -r` | xargs apt-get -y purge
Чтобы иметь немного больше контроля над версиями, явным образом выбираю те, которые вы хотите удалить. Например, если вы хотите удалить версии ядра 3.2.0. [49-53], используйте простой цикл for:
for k in 49 51 52 53 ; do aptitude remove --purge linux-image-3.2.0-${k}-generic ; done
Откорректируйте список версий ядра для соответствия.
Попробуйте это. Запустите его как root.
Сохраните этот скрипт как, скажем ./keep-n-kernels.sh
Передайте в качестве аргумента командной строки количество последних ядер, которые вы хотите сохранить.
#!/bin/bash # pass n as a command line argument, and it will find all the installed # kernels and keep only the n most recent ones => uninstall all older ones # dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' # this command gives the list of all packages EXCEPT for the latest kernel. # source : https://help.ubuntu.com/community/Lubuntu/Documentation/RemoveOldKernels n=$1 # find the installed kernel versions : # dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sort -n # gives version numbers, one in each line # dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sed 's/\...$//g' | grep -v '\...$'| sort -u # gives only the ones that appear in linux-image # suffix, e.g. -generic-pae # the kind of kernel you boot into suffix=$(uname -r | sed 's:^[0-9]\.[0-9]\.[0-9]\-[0-9]\{2\}::g') command="apt-get purge " for version in $(dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sed 's/\...$//g' | grep -v '\...$'| sort -u | head -n -${n}) do command=${command}"^linux-image-${version}${suffix} " done $commandПример использования:
# ./keep-n-kernels.sh 4 # launch the apt-get command to remove all but the 4 most recent kernelsЕсли вы хотите [И НА СВОЙ СОБСТВЕННЫЙ РИСК], вы можете добавить a -y (или флаг силы) в команду apt-get и сделать его неинтерактивным.
Я использую рабочий стол KDE, и самый простой вариант, который я нашел, - это использовать приложение kde-config-grub2, как предлагается здесь: https://www.kubuntuforums.net/showthread.php?58075-remove-old- linux-версий (которые я уже установил для установки фонового изображения, опции загрузки по умолчанию и т. п.). Рядом с раскрывающимся списком, в котором вы можете выбрать запись по умолчанию, есть кнопка «Удалить старые записи». Нажав эту кнопку, вы увидите список всех установленных ядер, и вы можете выбрать, какие из них нужно удалить. Когда вы применяете изменения, он будет использовать dpkg, чтобы фактически удалить их из системы, а также меню GRUB.
Чтобы прослушивать, вы также можете выдать
apt-get remove linux-{image,headers}-x.y.z-{1,2,...,n}
как root, и задание будет выполнено.
У меня есть сценарий для этого, который не нуждается в очень симпатичном разборе строк.
Удалить заголовки и изображения, кроме текущего, чтобы освободить место
sudo apt-get autoremove --purge 'linux-headers-[0-9].*' linux-headers-$(uname -r)+ linux-headers-$(uname -r | cut -d- -f1,2)+ 'linux-image-[0-9].*' linux-image-$(uname -r)+