Ubuntu: удаление неиспользуемых ядер

May 9, 2016 23:17 · 273 words · 2 minute read ubuntu

Вместе с обновлениями в Ubuntu устанавливаются новые версии ядра, при этом старые не удаляются и занимают место на жестком диске. Давайте разберемся как быстро и без вреда системе удалить старые ядра!

Первый вариант — графический (не наш случай). С помощью менеджера пакетов Synaptic нужно вручную отметить устаревшие версии ядра для удаления и нажать кнопку «Применить».

Второй вариант — консольный. Чтобы удалить все ядра кроме последней и предпоследней версии можно сначала выполнить:

apt-get purge $(dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | head -n -1)

а потом запустить команду:

apt-get autoremove

Третий вариант — тоже консольный (мой выбор). Оставить только текущую версию ядра и удались все остальные можно с помощью команды:

export KERNEL="$(uname -r | grep -Po '([0-9\.\-]*[0-9])?')"; dpkg --get-selections | grep -E "linux-(header|image).*" | grep -iw install | sort | grep -v "$KERNEL" | grep -v "lts" | sed 's/install//g' | xargs dpkg -P

Разберем данную команду подробнее. Первая часть в переменную KERNEL записывает текущую версию ядра:

export KERNEL="$(uname -r | grep -Po '([0-9\.\-]*[0-9])?')"

Вторая часть выводит список всех пакетов в системе:

dpkg --get-selections

Третья часть выбирает из списка всех пакетов в системе те пакеты, в имени которых есть linux-header или linux-image:

grep -E "linux-(header|image).*"

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

grep -iw install

Пятая часть сортирует вывод оставшихся пакетов:

sort

Шестая часть убирает из выборки пакеты с текущей версией ядра и lts-версии:

grep -v "$KERNEL" | grep -v "lts"

Седьмая часть удаляет слово install:

sed 's/install//g'

В последней части наконец удаляются старые неиспользуемые ядра — xargs передает имена пакетов менеджеру пакетов dpkg, который удаляет их с ключом -P (purge):

xargs dpkg -P
tweet Share